資源簡介
利用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\
- 上一篇:codeblocks16.01全新漢化包 綠色版
- 下一篇:頻率調制雷達信號
評論
共有 條評論