资源简介
JigsawGUI.rar

代码片段和文件信息
%% 制作人:吴限
% 2019年5月6日
function jigsaw(handles rank_Tag pic_data)
% handles:图形句柄
% rank_Tag:拼图阶数
% pic_data:读入图片的全路径
%% 拼图主函数
Tag_A= Disrupt(rank_Tag);% 将标记矩阵的排列顺序打乱
drawmap(Tag_Ahandles.axes_jigsawpic_datarank_Tag);% 按照标记矩阵显示拼图
global flag;% flag决定在拼图区点击是否移动拼图
global Tag; % Tag是标记矩阵,定义成全局变量,方便传递参数
global steps;% steps用于计数,累计移动拼图的步数
% 初始化变量
flag=true; % 开始游戏后,可以点击移动拼图
steps=0;
Tag=Tag_A;
len_row=size(pic_data1)/rank_Tag; % 每块拼图的宽度
len_col=size(pic_data2)/rank_Tag; % 每块拼图的高度
mask_number(Taghandleslen_rowlen_col) % 改进选择决定是否显示数字标记
set(handles.text_steps‘String‘num2str(steps)) % 显示初始步数
set(gcf‘windowButtonDownFcn‘{@ButtonDownFcnhandlespic_datarank_Tag}); % 点击鼠标时调用ButtonDownFcn函数
function ButtonDownFcn(srceventhandlespic_datarank_Tag)
%% 回调函数,鼠标点击事件发生时调用
global flag;% flag声明,共用全局变量
global Tag; % 全局变量声明
if flag % 若flag为true,允许移动拼图
pt=get(gca‘CurrentPoint‘); % 获取当前鼠标点击位置坐标
xpos=pt(11); % 鼠标点击处的横坐标实际值
ypos=pt(12); % 鼠标点击处的纵坐标实际值
len_row=size(pic_data1)/rank_Tag; % 每块拼图的宽度
len_col=size(pic_data2)/rank_Tag; % 每块拼图的高度
col = ceil(xpos/len_row); % 将横坐标值转换为列数
row = ceil(ypos/len_col); % 将纵坐标值转换为行数
% 判断鼠标点击位置是否在有效范围内
if(col<=rank_Tag && col>0)&&(row<=rank_Tag && row>0)
Tag=movejig(Tagrowcolhandles.text_steps); % 按点击位置移动拼图
drawmap(Taghandles.axes_jigsawpic_datarank_Tag) % 显示拼图
mask_number(Taghandleslen_rowlen_col) % 是否显示数字提示
% order为顺序矩阵,以此判断拼图是否完成
order=[1:1:rank_Tag^2-10];
order=reshape(orderrank_Tagrank_Tag);
order=order‘;
zt = abs(Tag-order); % 比较两个矩阵
if sum(zt(:))==0 % 顺序已经完全吻合
axes(handles.axes_jigsaw)
% 游戏完成,补全拼图
image(pic_data) % 显示全图
set(handles.axes_jigsaw‘Visible‘‘off‘);% 隐藏坐标轴
msgbox(‘You did a good job 恭喜完成!!!‘) % 提示完成信息
flag=false;% 游戏已经完成,设置flag为false
end
else % 点击在外部区域
return % 直接返回,不作处理
end
end
function mask_number(taghandleslen_rowlen_col)
%% 判断是否需要显示数字提示的函数
ismask=get(handles.checkbox_num‘Value‘);% 获取CheckBox的值(是否勾选)
rank_Tag=size(tag1);% 拼图阶数
axes(handles.axes_jigsaw);% 确定坐标轴
% 根据是否勾选决定是否显示text标识
for i=1:size(tag1)
for j=1:size(tag2)
if ismask
text(len_col/2*(2*j-1)-10len_row/2*(2*i-1)num2str(tag(ij))‘FontSize‘55-rank_Tag*5‘Color‘‘c‘)
else
% 未勾选,在该位置设置text为空,实现不显示
text(len_col/2*(2*j-1)-10len_row/2*(2*i-1)‘‘‘FontSize‘55-rank_Tag*5‘Color‘‘c‘)
end
end
end
function tag=movejig(tagrowcolhandle_step)
global steps; % 计步
%% 4个if分4种情况对不同位置处的点坐标与矩阵行列式统一
last_tag=tag;
num = tag(rowcol);%鼠标位置与号码牌一致
[max_rowmax_col]=size(tag);
% 检测点击位置是否处于0号临域
if (row-1)<=max_row && (row-1)>0 % 点击在范围内
if tag(row-1col)==0 % 空白块在点击位置的上一行
tag(row-
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 414029 2019-05-06 01:17 JigsawGUI\girl.jpg
文件 5951 2019-05-06 16:53 JigsawGUI\jigsaw.m
文件 9651 2019-05-06 15:17 JigsawGUI\jigsawGUI.fig
文件 12497 2019-05-06 16:30 JigsawGUI\jigsawGUI.m
文件 541518 2019-05-06 01:20 JigsawGUI\jigsawImage.jpeg
文件 37297 2019-05-06 14:40 JigsawGUI\jigsaw_active.png
文件 37849 2019-05-06 13:29 JigsawGUI\Puzzle_icon.png
目录 0 2019-05-06 16:57 JigsawGUI
----------- --------- ---------- ----- ----
1058792 8
- 上一篇:利用vue写的后台管理系统开源代码
- 下一篇:Unity数据处理
相关资源
- 价值2k的H漫画小说系统
- Pythonamp;课堂amp;笔记(高淇amp;400;集第
- ddos压力测试工具99657
- UML建模大全
- 开源1A锂电池充电板TP4056原理图+PCB
- m1卡 ic卡可选择扇区初始化加密软件
- TSCC.exe
- FTP课程设计(服务端+客户端)
- 计算机图形学 边填充算法实现代码
- 电力系统潮流计算程序集合
- oracle数据迁移项目实施方案
- Web Api 通过文件流 文件到本地
- Visio图标-最新最全的网络通信图标库
- Spire API文档
- OpenGL参考手册
- Python中Numpy库最新教程
- SPD博士V5.3.exe
- 直流无刷电机方波驱动 stm32 例程代码
- layui后台管理模板
- 仿知乎界面小程序源代码
- 云平台-阿里云详细介绍
- photoshop经典1000例
- scratch垃圾分类源码(最终版本).sb
- IAR ARM 7.8破解
- TI CCS V5.4 安装步骤及破解文件
- 松下plc FP-XH的驱动
- 局域网硬件信息收集工具
- 加快Windows XP操作系统开机速度
- 联想启天M4350 BIOS升级文件
- 操作系统教程课后答案华中科技大学
评论
共有 条评论