返回顶部
首页 > 资讯 > 精选 >怎么使用Matlab制作一款真正的拼图小游戏
  • 204
分享到

怎么使用Matlab制作一款真正的拼图小游戏

2023-06-15 00:06:00 204人浏览 八月长安
摘要

这篇文章主要介绍怎么使用Matlab制作一款真正的拼图小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果:简单原理介绍:1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alph

这篇文章主要介绍怎么使用Matlab制作一款真正的拼图小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

效果:

怎么使用Matlab制作一款真正的拼图小游戏
怎么使用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;

怎么使用Matlab制作一款真正的拼图小游戏

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制作一款真正的拼图小游戏

以上是“怎么使用Matlab制作一款真正的拼图小游戏”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 怎么使用Matlab制作一款真正的拼图小游戏

本文链接: https://lsjlt.com/news/276255.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么使用Matlab制作一款真正的拼图小游戏
    这篇文章主要介绍怎么使用Matlab制作一款真正的拼图小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果:简单原理介绍:1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alph...
    99+
    2023-06-15
  • 如何利用Matlab制作一款真正的拼图小游戏
    效果: 简单原理介绍: 1构造0,1矩阵作为每片拼图的透明度,可以构造出不规则形状的拼图(image函数有alphaData属性可以设置) jigsawMask=zeros...
    99+
    2024-04-02
  • 怎么用Matlab制作一款3D版2048小游戏
    这篇文章主要介绍了怎么用Matlab制作一款3D版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Matlab制作一款3D版2048小游戏文章都会有所收获,下面我们一起来看看吧。效果:完整代码...
    99+
    2023-06-29
  • 利用Matlab制作一款3D版2048小游戏
    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代...
    99+
    2024-04-02
  • 利用Matlab制作一款狗头翻牌子小游戏
    目录0游戏效果1fig界面和背景板2狗狗牌子与胜利标志2.1狗狗牌子绘制2.2游戏胜利标签2.3鼠标点击牌子回调3游戏难度按钮组3.1按钮绘制3.2难度选择回调4游戏刷新模块4.1刷...
    99+
    2024-04-02
  • 如何用Matlab制作一款简单的龙舟小游戏
    今天小编给大家分享一下如何用Matlab制作一款简单的龙舟小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果图:步骤1...
    99+
    2023-06-29
  • 基于Matlab制作一款简单的龙舟小游戏
    效果图: 没找到合适的背景就自己画了个,大家如果有更好看的可以换一下。。。 步骤 1 创建Axes及图片导入 窗口创建: Mainfig=figure('units','pixe...
    99+
    2024-04-02
  • 利用Vue.js制作一个拼图华容道小游戏
    目录游戏介绍核心思路核心代码htmlgames 类生成随机图片数量移动图片键盘事件拼图完成结语游戏介绍 先看看界面 这是一个拼图游戏,可以自选难度和自选闯关图片 游戏开始后根据...
    99+
    2024-04-02
  • 怎么用Matlab制作黄金矿工小游戏
    本文小编为大家详细介绍“怎么用Matlab制作黄金矿工小游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Matlab制作黄金矿工小游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果步骤图片准备本文所...
    99+
    2023-06-29
  • 如何使用Matlab制作大富翁小游戏
    这篇文章主要介绍“如何使用Matlab制作大富翁小游戏”,在日常操作中,相信很多人在如何使用Matlab制作大富翁小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Matlab制作大富翁小游戏”的疑...
    99+
    2023-06-29
  • 怎么用Python实现拼图小游戏
    本篇内容主要讲解“怎么用Python实现拼图小游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现拼图小游戏”吧!开发工具Python版本:...
    99+
    2024-04-02
  • 使用CocosCreator怎么制作一个微信小游戏
    使用CocosCreator怎么制作一个微信小游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、在微信公众平台下载微信开发者工具 地址: http...
    99+
    2023-06-14
  • 使用Matlab制作大富翁小游戏的过程详解
    目录1.自定义头像及名称2.买地、收费、破产3.部分代码展示gui_init.mself_init.m4.修改记录5.下载地址大富翁大家都玩过,走到建筑的位置可以买地,第二圈走到买过...
    99+
    2024-04-02
  • 怎么用python制作小游戏
    这篇文章主要介绍“怎么用python制作小游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用python制作小游戏”文章能帮助大家解决问题。开发工具Python版本:3.6.4相关模块:pyg...
    99+
    2023-06-27
  • 使用C/C++怎么制作一个推箱子小游戏
    使用C/C++怎么制作一个推箱子小游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。运行示例:以下为完整代码:#include <stdio.h>#inc...
    99+
    2023-06-15
  • 使用pygame制作一个贪吃蛇的小游戏
    之前我们已经学习了如果使用pygame创建一个窗口,现在我们来学习使用pygame来制作一个经典的小游戏—贪吃蛇。首先我们需要导入待使用的模块:import pygame, sys, randomfrom pygame.locals imp...
    99+
    2023-06-02
  • 怎么用canvas制作一个猜字母的小游戏
    这篇文章主要讲解了“怎么用canvas制作一个猜字母的小游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用canvas制作一个猜字母的小游戏”吧! ...
    99+
    2024-04-02
  • 怎么用PyQt5制作一个猜数字小游戏
    今天小编给大家分享一下怎么用PyQt5制作一个猜数字小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始之前,直接来看一...
    99+
    2023-06-29
  • 怎么在Android中使用ViewDragHelper实现一个拼图游戏
    本篇文章给大家分享的是有关怎么在Android中使用ViewDragHelper实现一个拼图游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ViewDragHelper其实V...
    99+
    2023-05-30
    android viewdraghelper
  • 使用python怎么制作一个俄罗斯方块小游戏
    这期内容当中小编将会给大家带来有关使用python怎么制作一个俄罗斯方块小游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作