怎么用Matlab编写简易版连连看小游戏
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍"怎么用Matlab编写简易版连连看小游戏",在日常操作中,相信很多人在怎么用Matlab编写简易版连连看小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
千家信息网最后更新 2025年01月24日怎么用Matlab编写简易版连连看小游戏
这篇文章主要介绍"怎么用Matlab编写简易版连连看小游戏",在日常操作中,相信很多人在怎么用Matlab编写简易版连连看小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用Matlab编写简易版连连看小游戏"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
游戏截图
游戏组装说明
我们的变量path输入的是图像包的相对路径或绝对路径
这里我们由于文件夹名称就叫"图片"所以直接path='图片’是没啥问题的。
文件夹里就是图片素材啦,其名称没有任何要求,形状最好是方的,不过不是的话问题也不大,程序会自动将其拉伸成方的。。。。。。。。
我们这里要求的是读入jpg格式,想要png,jpg都读的话,。。。。。最简单的就是直接读两次
完整代码
function ConnectingGame%连连看图片导入============================================================path='图片';picInformation=dir(fullfile(path,'*.jpg'));N=length(picInformation);for i=1:N picList.(['pic',num2str(i)])=... imread([path,'\',picInformation(i).name]);end%全局变量==================================================================global selectedPos clickPosglobal redLinePntsglobal picMatselectedPos=[];redLinePnts=[];%图片矩阵生成============================================================== function createMat(~,~) tempMat=zeros(8,6); while any(any(tempMat==0)) zeosPos=find(tempMat==0); temprand=rand(1,length(zeosPos)); [~,tempSort]=sort(temprand); tempNum=zeosPos(tempSort(1:2)); tempMat(tempNum)=randi(N); end picMat=zeros(10,8); picMat(2:9,2:7)=tempMat; endcreateMat()%主要框架生成==============================================================MainFig=figure('units','pixels','position',[750 250 (9*100+10*5+20)*0.5 (7*100+8*5+20)*0.5],... 'Numbertitle','off','menubar','none','resize','off',... 'name','ConnectingGame | by slandarer');axes('parent',MainFig,'position',[0 0 1 1],... 'XLim', [40 10*100+10*5-40],... 'YLim', [40 8*100+8*5-40],... 'color',[0.95,0.95,0.95],... 'NextPlot','add',... 'layer','bottom',... 'Visible','on',... 'YDir','reverse',... 'XTick',[], ... 'YTick',[]);uh2=uimenu('label','帮助');uimenu(uh2,'label','重新开始','callback',@restartGame)for i=2:9 for j=2:7 drawPicHdl(i,j)=image([(i-1)*100,i*100]+(i-1)*5,[(j-1)*100,j*100]+(j-1)*5,... picList.(['pic',num2str(picMat(i,j))]),'tag',[num2str(i),num2str(j)],... 'ButtonDownFcn',@clickOnPic); endend%重新开始函数============================================================== function restartGame(~,~) createMat() for ii=2:9 for jj=2:7 set(drawPicHdl(ii,jj),'CData',picList.(['pic',num2str(picMat(ii,jj))])) end end end%主函数==================================================================== function clickOnPic(object,~) redLinePnts=[]; clickPos=[str2num(object.Tag(1)),str2num(object.Tag(2))]; if isempty(selectedPos),selectedPos=clickPos;end if ~all(selectedPos==clickPos) %------------------------------------------------------------------------------------------------- condition1=0;condition2=0; switch 1 case any(selectedPos(1)==clickPos(1)) condition1=abs(selectedPos(2)-clickPos(2))==1; tempVector1=sort([selectedPos(2),clickPos(2)])+[1 -1]; tempSum=sum(picMat(clickPos(1),tempVector1(1):tempVector1(2))); condition2=(tempSum==0)&~isempty(picMat(clickPos(1),tempVector1(1):tempVector1(2))); case any(selectedPos(2)==clickPos(2)) condition1=abs(selectedPos(1)-clickPos(1))==1; tempVector1=sort([selectedPos(1),clickPos(1)])+[1 -1]; tempSum=sum(picMat(tempVector1(1):tempVector1(2),clickPos(2))); condition2=(tempSum==0)&~isempty(picMat(clickPos(1),tempVector1(1):tempVector1(2))); end if (condition1||condition2)&&picMat(clickPos(1),clickPos(2))==picMat(selectedPos(1),selectedPos(2)) redLinePnts=[selectedPos;clickPos]; end %------------------------------------------------------------------------------------------------- if isempty(redLinePnts) tempNode=[selectedPos(1),clickPos(2)]; tempVector1=[selectedPos(2)+1,clickPos(2)].*(clickPos(2)>selectedPos(2))+... [clickPos(2),selectedPos(2)-1].*(clickPos(2)<=selectedPos(2)); tempVector2=[selectedPos(1),clickPos(1)-1].*(clickPos(1)>selectedPos(1))+... [clickPos(1)+1,selectedPos(1)].*(clickPos(1)<=selectedPos(1)); condition1=(sum(picMat(selectedPos(1),tempVector1(1):tempVector1(2)))==0); condition2=sum(picMat(tempVector2(1):tempVector2(2),clickPos(2)))==0; condition3=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2)); if all([condition1,condition2,condition3]) redLinePnts=[selectedPos;tempNode;clickPos]; end end if isempty(redLinePnts) tempNode=[clickPos(1),selectedPos(2)]; tempVector1=[clickPos(2)+1,selectedPos(2)].*(selectedPos(2)>clickPos(2))+... [selectedPos(2),clickPos(2)-1].*(selectedPos(2)<=clickPos(2)); tempVector2=[clickPos(1),selectedPos(1)-1].*(selectedPos(1)>clickPos(1))+... [selectedPos(1)+1,clickPos(1)].*(selectedPos(1)<=clickPos(1)); condition1=sum(picMat(clickPos(1),tempVector1(1):tempVector1(2)))==0; condition2=sum(picMat(tempVector2(1):tempVector2(2),selectedPos(2)))==0; condition3=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2)); if all([condition1,condition2,condition3]) redLinePnts=[selectedPos;tempNode;clickPos]; end end %------------------------------------------------------------------------------------------------- if isempty(redLinePnts) for ii=[selectedPos(1):-1:1,selectedPos(1):10] tempNode1=[ii,selectedPos(2)]; tempNode2=[ii,clickPos(2)]; tempVector1=[selectedPos(1)+1,ii].*(ii>selectedPos(1))+[ii,selectedPos(1)-1].*(ii<=selectedPos(1)); tempVector2=[clickPos(1)+1,ii].*(ii>clickPos(1))+[ii,clickPos(1)-1].*(ii<=clickPos(1)); tempVector3=sort([selectedPos(2),clickPos(2)]); condition1=sum(picMat(tempVector1(1):tempVector1(2),selectedPos(2)))==0; condition2=sum(picMat(tempVector2(1):tempVector2(2),clickPos(2)))==0; condition3=sum(picMat(ii,tempVector3(1):tempVector3(2)))==0; condition4=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2)); if all([condition1,condition2,condition3,condition4]) redLinePnts=[selectedPos;tempNode1;tempNode2;clickPos]; break end end end if isempty(redLinePnts) for jj=[selectedPos(2):-1:1,selectedPos(2):8] tempNode1=[selectedPos(1),jj]; tempNode2=[clickPos(1),jj]; tempVector1=[selectedPos(2)+1,jj].*(jj>selectedPos(2))+[jj,selectedPos(2)-1].*(jj<=selectedPos(2)); tempVector2=[clickPos(2)+1,jj].*(jj>clickPos(2))+[jj,clickPos(2)-1].*(jj<=clickPos(2)); tempVector3=sort([selectedPos(1),clickPos(1)]); condition1=sum(picMat(selectedPos(1),tempVector1(1):tempVector1(2)))==0; condition2=sum(picMat(clickPos(1),tempVector2(1):tempVector2(2)))==0; condition3=sum(picMat(tempVector3(1):tempVector3(2),jj))==0; condition4=picMat(selectedPos(1),selectedPos(2))==picMat(clickPos(1),clickPos(2)); if all([condition1,condition2,condition3,condition4]) redLinePnts=[selectedPos;tempNode1;tempNode2;clickPos]; break end end end %------------------------------------------------------------------------------------------------- if ~isempty(redLinePnts) redLinePntsX=(redLinePnts(:,1)-1).*100+(redLinePnts(:,1)-1).*5+50; redLinePntsY=(redLinePnts(:,2)-1).*100+(redLinePnts(:,2)-1).*5+50; RedLine=plot(redLinePntsX,redLinePntsY,'Color',[1 0 0],'LineWidth',2.5); pause(0.3) delete(RedLine) picMat(selectedPos(1),selectedPos(2))=0; picMat(clickPos(1),clickPos(2))=0; set(drawPicHdl(selectedPos(1),selectedPos(2)),'CData',ones(100,100,3).*0.95); set(drawPicHdl(clickPos(1),clickPos(2)),'CData',ones(100,100,3).*0.95); selectedPos=[]; else selectedPos=clickPos; end end endend
到此,关于"怎么用Matlab编写简易版连连看小游戏"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
图片
连连看
小游戏
简易
学习
问题
帮助
函数
变量
名称
就是
文件
文件夹
更多
路径
生成
实用
接下来
不大
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术常用术语
神华科技软件开发
行业代码 管理服务器
年度网络安全和信息化工作总结
游戏服务器安全如何做
鼎捷软件开发容易吗
文档管理存储服务器
延川软件开发
svn 同步到服务器
6G网络技术应用
公安机关互联网科技
网挺好的为什么重新连接服务器
网易我的世界租凭服务器介绍
世界传统药物数据库网站
炉石传说手游补丁服务器
网络安全基干民兵
TCPA数据库干什么用
key数据库redis
上海量境网络技术公司
网络安全l1证书
交通运输网络安全存在的主要问题
光遇维护不退出服务器会怎么样
软件开发行业内网部署
故意删数据库
杭州大树网络技术
百分制怎么算150分制数据库
河池市网络安全进校园
实用网络安全技术感受
服务器隔离 安全
服务器安全狗防护关闭