資源簡介
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數據處理
評論
共有 條評論