• 大小: 46KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Matlab
  • 标签: 拼图游戏  

资源简介

利用MATLAB编写的拼图游戏完整程序文件,包含M文件以及用到的图片文件,程序调试运行无误,点击运行即可进行拼图游戏。

资源截图

代码片段和文件信息

%% 制作人:吴限

function jigsaw()
%% 主函数
Tag_A= Disrupt();%将图像的排列顺序打乱
drawmap(Tag_A);%调用画图函数绘制九宫格
set(gcf‘windowButtonDownFcn‘@ButtonDownFcn);%点击鼠标时调用ButtonDownFcn函数


Tag_B=reshape(Tag_A33);%将1*9的矩阵A转换为3*3矩阵B
global Tag;%定义全局变量,方便传递参数
Tag=Tag_B;


function ButtonDownFcn(srcevent)
%% 回调函数,鼠标点击事件发生时调用
pt=get(gca‘CurrentPoint‘);%获取当前鼠标点击位置坐标
xpos=pt(11);
ypos=pt(12);
   
col = ceil(ypos/100);%鼠标位置横坐标取整
row = ceil(xpos/100);%鼠标位置纵坐标取整
global Tag; 

if(col<=3&&col>0)&&(row<=3&&row>0)%鼠标点击位置在有效范围内    
    Tag=movejig(Tagrowcol);%按点击位置移动拼图
    C=reshape(Tag19); 
    drawmap(C)%调用划线函数
    
    G = [1 2 3 4 5 6 7 8 0];%顺序矩阵
    zt = abs(C-G);%比较两个矩阵
    if sum(zt(:))==0%顺序已经完全吻合
        image=imread(‘jigsawImage.jpeg‘);
        imshow(image)
        msgbox(‘You did a good job 恭喜完成!!!‘)%提示完成信息
        return%完成游戏跳出while循环
    end
    
else
    return
    
end




function tag=movejig(tagrowcol)
 %% 坐标表示与矩阵行列系数不同需进行转换
  % 4个if分4种情况对不同位置处的点坐标与矩阵行列式统一
    num = tag(rowcol);%鼠标位置与号码牌一致
    if (row>1)&&(tag(row-1col)==0)%第一第二行出现空格(0)
        tag(row-1col) = num;
        tag(rowcol) = 0;
    end
    if (row<3)&&(tag(row+1col)==0)%第二三行出现空格
        tag(row+1col) = num;
        tag(rowcol) = 0;
    end
    if (col>1)&&(tag(rowcol-1)==0)%第二三列出现空格
        tag(rowcol-1) = num;
        tag(rowcol) = 0;
    end
    if (col<3)&&(tag(rowcol+1)==0)%第一二列出现空格
        tag(rowcol+1) = num;
        tag(rowcol) = 0;
    end
   




function y = Disrupt()
%% 随机打乱原拼图排列顺序
y =[123456780];
y = reshape(y33);

for i = 1:180
    row=randi([13]);%产生一个范围在1到3的整数
    col=randi([13]);
    y=movejig(yrowcol);%按随机产生的动作打乱拼图
end
y = reshape(y19);




function x = choose(imageindex)
%% 根据索引选择对应位置上的拼图块
if index>0
    row=fix((index-1)/3);
    column=mod(index-13);
    x=image(1+row*100:100*(row+1)1+column*100:100*(column+1):);
else
    x=uint8(255*ones(1001003));%拼图块9矩阵数据
end

function drawmap(A)
%% 将运算数字与对应拼图对应显示图片
image=imread(‘jigsawImage.jpeg‘);
n=image;

for i=1:9
    row=fix((i-1)/3);%计算行
    column=mod(i-13);%计算列
    n(1+row*100:100*(row+1)1+column*100:100*(column+1):)=choose(imageA(i));
end

imshow(n)%显示拼图





    

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2615  2018-02-14 18:28  jigsaw puzzle\jigsaw.m
     文件       45040  2018-02-09 17:09  jigsaw puzzle\jigsawImage.jpeg
     目录           0  2018-02-18 21:32  jigsaw puzzle\

评论

共有 条评论

相关资源