MATLAB连连看小游戏

news/2024/11/30 9:28:49/

这是一款MATLAB连连看小游戏,基本实现了连连看的功能,不过目前没有写出死局判定的模块,日后可能会对其进行改进。

目录

            • 游戏截图
            • 游戏组装说明
            • 完整代码
            • 其他说明
            • 后记

游戏截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


游戏组装说明

我们的变量path输入的是图像包的相对路径或绝对路径
在这里插入图片描述
这里我们由于文件夹名称就叫“图片”所以直接path='图片’是没啥问题的。

文件夹里就是图片素材啦,其名称没有任何要求,形状最好是方的,不过不是的话问题也不大,程序会自动将其拉伸成方的。。。。。。。。

我们这里要求的是读入jpg格式,想要png,jpg都读的话,。。。。。最简单的就是直接读两次

在这里插入图片描述


完整代码
function ConnectingGame
%连连看图片导入============================================================
path='图片';
picInformation=dir(fullfile(path,'*.jpg'));
N=length(picInformation);
for i=1:NpicList.(['pic',num2str(i)])=...imread([path,'\',picInformation(i).name]);
end%全局变量==================================================================
global selectedPos clickPos
global redLinePnts
global 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);endpicMat=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',[]);
uh1=uimenu('label','帮助');
uimenu(uh1,'label','重新开始','callback',@restartGame)
for i=2:9for j=2:7drawPicHdl(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);end
end%重新开始函数==============================================================function restartGame(~,~)createMat()for ii=2:9for jj=2:7set(drawPicHdl(ii,jj),'CData',picList.(['pic',num2str(picMat(ii,jj))]))endendend%主函数====================================================================function clickOnPic(object,~)redLinePnts=[];clickPos=[str2num(object.Tag(1)),str2num(object.Tag(2))];if isempty(selectedPos),selectedPos=clickPos;endif ~all(selectedPos==clickPos)%-------------------------------------------------------------------------------------------------condition1=0;condition2=0;switch 1case 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)));endif (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];endendif 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];endend%-------------------------------------------------------------------------------------------------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];breakendendendif 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];breakendendend%-------------------------------------------------------------------------------------------------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=[];elseselectedPos=clickPos;end    end end
end
其他说明
  • 游戏左上角的帮助点开是重新开始按钮
  • 若是想要素材的话,这里有压缩包呀:MATLAB连连看小游戏
后记

由于不太想动脑子,代码中的连线部分直接分了三种情况讨论,分类讨论是最无脑的操作hiahiahia


http://www.ppmy.cn/news/622067.html

相关文章

使用JAVA开发连连看游戏

技术&#xff1a;Java等摘要&#xff1a;随着社会节奏的加快&#xff0c;平常工作的竞争强度也加大&#xff0c;生活的压力也跟着加重&#xff0c;所以休息时或下班后大家都需要个休闲的娱乐工具&#xff0c;来放松自己&#xff0c;缓解自己的压力&#xff0c;消除紧张的疲劳状…

PPT课件实现连连看游戏——简单好用

想做个羊了个羊地理课件&#xff0c;讨论了下需求&#xff0c;还是连连看吧 先看眼效果图 一、先加载背景 找到草地图片&#xff0c;根据图中顺序&#xff0c;将绿地设为背景 二、制作图标 其实我是用希沃白板做的图标&#xff0c;用ppt其实也很简单&#xff0c;图片的叠…

基于JavaSwing的连连看游戏的设计与实现

目录 摘 要 1 Abstract 2 目录 2 绪论 1 1.1. 课题背景 1 1.2. Java游戏开发的现状 1 1.2.1. Java日益趋向成熟 1 1.2.2. Java极大的方便了游戏脚本的使用 2 1.2.3. Java平台无关特性 2 1.2.4. Java在手机游戏开发方面的优势 2 1.2.5. Java在网络方面的良好表现 2 1.2.6. 游戏…

Java实现连连看源代码文档_JAVA实现连连看游戏

文件名大小更新时间 JAVA实现连连看游戏\java连连看游戏设计介绍 幻灯片.pptx22697322018-06-09 JAVA实现连连看游戏\源代码\JAVA连连看游戏设计 源代码\.classpath3012018-01-07 JAVA实现连连看游戏\源代码\JAVA连连看游戏设计 源代码\.project4182018-01-07 JAVA实现连连看游…

html连连看小游戏论文,JavaScript编写连连看小游戏

天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢。 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果图: 写连连看之前要先考虑哪些呢? 1:如何判断两个元素可以连接呢, 刚刚开始的时候我也…

【MATLAB第43期】基于MATLAB的BO-NAR贝叶斯优化动态神经网络NAR时间序列股票预测模型

【MATLAB第43期】基于MATLAB的BO-NAR贝叶斯优化动态神经网络NAR时间序列股票预测模型 一、效果展示 二、模型介绍 1.数据情况 一列数据&#xff0c;499个值 ratio 0.9;% 训练集比例 MaxEpochs 600;% 最大训练次数 % % 导入股票数据 xall importdata(数据.xlsx);2.优化参…

【python】python制作 连连看 游戏脚本(二)

【python】python制作 连连看 游戏脚本&#xff08;一&#xff09;_sunriver2000的博客-CSDN博客 【python】python制作 连连看 游戏脚本&#xff08;二&#xff09;_sunriver2000的博客-CSDN博客 【python】python制作 连连看 游戏脚本&#xff08;三&#xff09;_sunriver2…

【python】python制作 连连看 游戏脚本(一)

【python】python制作 连连看 游戏脚本&#xff08;一&#xff09;_sunriver2000的博客-CSDN博客 【python】python制作 连连看 游戏脚本&#xff08;二&#xff09;_sunriver2000的博客-CSDN博客 【python】python制作 连连看 游戏脚本&#xff08;三&#xff09;_sunriver2…