• 大小: 1M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-08-28
  • 语言: 其他
  • 标签: 其他  

资源简介

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


评论

共有 条评论