怎么利用Matlab制作一款真正的拼图小游戏
发表于:2024-10-12 作者:千家信息网编辑
千家信息网最后更新 2024年10月12日,这篇文章主要介绍怎么利用Matlab制作一款真正的拼图小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简单原理介绍:1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形
千家信息网最后更新 2024年10月12日怎么利用Matlab制作一款真正的拼图小游戏
这篇文章主要介绍怎么利用Matlab制作一款真正的拼图小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
简单原理介绍:
1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置)
jigsawMask=zeros(101*5,101*5);jigsawMask(102:404,102:404)=1;[xMesh,yMesh]=meshgrid(1:101*5,1:101*5);dis1=sqrt((xMesh-51).^2+(yMesh-253).^2);dis2=sqrt((xMesh-505+50).^2+(yMesh-253).^2);dis3=sqrt((xMesh-253).^2+(yMesh-152).^2);dis4=sqrt((xMesh-253).^2+(yMesh-505+151).^2);bool1=dis1<=50;bool2=dis2<=50;bool3=dis3<=50;bool4=dis4<=50;jigsawMask(bool1)=1;jigsawMask(bool2)=1;jigsawMask(bool3)=0;jigsawMask(bool4)=0;jigsawMask(253-25:253+25,51:505-50)=1;jigsawMask(1:152,253-25:253+25)=0;jigsawMask(505-151:505,253-25:253+25)=0;
2为每片拼图块设置ButtonDownFcn属性,将其改造成按钮
完整代码:
function jigsaw2(path)if nargin<1||isempty(path) [filename, pathname] = uigetfile({'*.jpg;*.tif;*.png;*.jpeg','All Image Files';... '*.*','All Files' }); path = [pathname,filename]; endoriPic=imread(path);%imshow(oriPic)jigsawMask=zeros(101*5,101*5);jigsawMask(102:404,102:404)=1;[xMesh,yMesh]=meshgrid(1:101*5,1:101*5);dis1=sqrt((xMesh-51).^2+(yMesh-253).^2);dis2=sqrt((xMesh-505+50).^2+(yMesh-253).^2);dis3=sqrt((xMesh-253).^2+(yMesh-152).^2);dis4=sqrt((xMesh-253).^2+(yMesh-505+151).^2);bool1=dis1<=50;bool2=dis2<=50;bool3=dis3<=50;bool4=dis4<=50;jigsawMask(bool1)=1;jigsawMask(bool2)=1;jigsawMask(bool3)=0;jigsawMask(bool4)=0;jigsawMask(253-25:253+25,51:505-50)=1;jigsawMask(1:152,253-25:253+25)=0;jigsawMask(505-151:505,253-25:253+25)=0;resizePic=imresize(oriPic,[101*(3*4+2),101*(3*4+2)]);Mainfig=figure('units','pixels','position',[300 80 720 400],... 'Numbertitle','off','menubar','none','resize','off',... 'name','jigsaw');Mainaxes=axes('parent',Mainfig,'position',[0 0 1 1],... 'XLim', [0 720],... 'YLim', [0 400],... 'NextPlot','add',... 'layer','bottom',... 'YDir','reverse',... 'Visible','on',... 'XTick',[], ... 'YTick',[]); image(Mainaxes,[420,420+14*20],[20,20+14*20],resizePic)whiteMask=150*ones(100,100,3);whiteMask(2:99,2:99,:)=255;for i=1:4 for j=1:4 image(Mainaxes,440+[0,60]+(j-1)*60,40+[0,60]+(i-1)*60,uint8(whiteMask),... 'UserData',[i,j]','Visible','on'); endendfor i=1:4 for j=1:4 picHdlR(j+(i-1)*4)=image(Mainaxes,420+[0,100]+(j-1)*60,20+[0,100]+(i-1)*60,uint8(zeros(100,100,3)),'alphaData',zeros(100,100),... 'UserData',j+(i-1)*4,'ButtonDownFcn',@putPiece,'Visible','on'); endendlogsheetR=zeros(1,16); function putPiece(object,~) object.UserData if logsheetR(object.UserData)==0&&handHdl.UserData~=0 object.CData=handHdl.CData; object.AlphaData=handHdl.AlphaData; logsheetR(object.UserData)=handHdl.UserData; handHdl.UserData=0; handHdl.CData=uint8(zeros(100,100,3)); handHdl.AlphaData=zeros(100,100); elseif logsheetR(object.UserData)~=0&&handHdl.UserData==0 handHdl.UserData=logsheetR(object.UserData); handHdl.CData=object.CData; handHdl.AlphaData=object.AlphaData; logsheetR(object.UserData)=0; object.CData=uint8(zeros(100,100,3)); object.AlphaData=zeros(100,100); end if all(logsheetR==1:16) text1.String='恭喜你,游戏胜利!'; end end%========================================================================== for i=1:4 for j=1:4 tempPiece=resizePic((i-1)*303+1:(i-1)*303+505,(j-1)*303+1:(j-1)*303+505,:); if mod(i+j,2)==0 tempMask=jigsawMask'; else tempMask=jigsawMask; end if j==1 tempMask(:,1:101)=0; tempMask(102:404,102:201)=1; end if j==4 tempMask(:,405:505)=0; tempMask(102:404,304:404)=1; end if i==1 tempMask(1:101,:)=0; tempMask(102:201,102:404)=1; end if i==4 tempMask(405:505,:)=0; tempMask(304:404,102:404)=1; end picHdl(j+(i-1)*4)=image(Mainaxes,[0,100]+(j-1)*100,[0,100]+(i-1)*100,tempPiece,'alphaData',tempMask,... 'UserData',j+(i-1)*4,'ButtonDownFcn',@selectPiece); whiteHdl(j+(i-1)*4)=image(Mainaxes,[0,100]+(j-1)*100,[0,100]+(i-1)*100,uint8(240*ones(100,100,3)),'alphaData',ones(100,100),... 'UserData',[i,j],'ButtonDownFcn',@selectPiece,'Visible','off'); endendRandNum=rand(1,16);[~,logSheet]=sort(RandNum);for i=1:4 for j=1:4 picHdl(logSheet(j+(i-1)*4)).XData=[0,100]+(j-1)*100; picHdl(logSheet(j+(i-1)*4)).YData=[0,100]+(i-1)*100; endendhandHdl=image(Mainaxes,[0,100],[0,100],uint8(zeros(100,100,3)),... 'alphaData',zeros(100,100),'UserData',0,'PickableParts','none'); set(gcf,'WindowButtonMotionFcn',@onhandfunc) function onhandfunc(~,~) xy=get(gca,'CurrentPoint'); x=xy(1,1);y=xy(1,2); handHdl.XData=[x-50,x+50]; handHdl.YData=[y-50,y+50]; end function selectPiece(object,~) %object.UserData if length(object.UserData)==1 if handHdl.UserData~=0 picHdl(handHdl.UserData).Visible='on'; whiteHdl(logSheet==handHdl.UserData).Visible='off'; end object.Visible='off'; whiteHdl(logSheet==object.UserData).Visible='on'; handHdl.UserData=object.UserData; handHdl.CData=object.CData; handHdl.AlphaData=object.AlphaData; else if handHdl.UserData==0 else ii=object.UserData(1); jj=object.UserData(2); object.Visible='off'; picHdl(handHdl.UserData).XData=[0,100]+(jj-1)*100; picHdl(handHdl.UserData).YData=[0,100]+(ii-1)*100; picHdl(handHdl.UserData).Visible='on'; logSheet(jj+(ii-1)*4)=handHdl.UserData; handHdl.UserData=0; handHdl.CData=uint8(zeros(100,100,3)); handHdl.AlphaData=zeros(100,100); end end end%==========================================================================fill([420,420+14*20,420+14*20,420],[320,320,380,380],[0.9412 0.9412 0.9412],'LineWidth',5,'EdgeColor',[0.7,0.7,0.7])text1=text(430,350,'请点击拼图块中心位置移动拼图块','fontSize',12);end
运行m文件后选择一张接近方形的图片即可开始游戏
以上是"怎么利用Matlab制作一款真正的拼图小游戏"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
小游戏
制作
内容
属性
篇文章
不规则
代码
价值
位置
兴趣
函数
原理
图片
小伙
小伙伴
形状
按钮
文件
方形
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
奥丁神叛怎么提示服务器繁忙
isc网络安全大会会场
网络技术f5是什么意思
ios软件开发的好处
计算机网络技术需要技能
想学网络技术培训项目
农贸设计软件开发
袁翰贷款软件开发
崩坏3安卓能选ios服务器吗
合肥工业大学erp数据库
宁波ipfs服务器
网上选课数据库的背景
服务器硬盘损坏数据会丢失吗
河南统一软件开发设施参考价格
服务器架构存储设备
闵行区信息网络技术有哪些
h2数据库可视化
be服务器 绝地
网络安全咨询厂家
去达内网络安全工作怎么样
网络安全知识与注意事项
天津服务器
2008ftp服务器搭建
网络安全专题讲座观后感
袁翰贷款软件开发
贵州数据软件开发
华为集团财经 软件开发工程师
计算机网络技术策划案
迅雷代理服务器最好的
率土之滨各个服务器势力表