matlab編程(五子棋)_第1頁
matlab編程(五子棋)_第2頁
matlab編程(五子棋)_第3頁
matlab編程(五子棋)_第4頁
matlab編程(五子棋)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、精品文檔 function five() M 文件的一種類型,以 function 開啟的函數(shù)文件,另一種是把一系列命令結(jié) 合在一起的一般M文件 figure(1)創(chuàng)建一個(gè)新的圖形對象 axis(0 12 0 12); 坐標(biāo)軸范圍控制命令, axis(xmin xmax ymin ymax) 用于設(shè)置圖表各坐 標(biāo)軸的刻度范圍 hold on 圖形保持功能,當(dāng)前坐標(biāo)軸和圖形都將保持,此后繪制的圖形都將添加在這個(gè)圖形之 上,并且自動(dòng)調(diào)整坐標(biāo)軸的范圍 axis off取消坐標(biāo)軸背景,在運(yùn)行的圖中不顯示坐標(biāo) for i = 1:11 a:b:c第一個(gè)為起始值,第二個(gè)為增量(增量為1,冒號(hào)省略),第三個(gè)

2、為結(jié)束 值 line(1 11,i i);畫網(wǎng)格 line(1,2,3,4) 將畫出 (1,3) 到(2,4) 的一條直線 line(i i,1 11); end axis equal橫縱坐標(biāo)使用相同的刻度( 使每一個(gè)格子成為正方形) qishou = 1;判斷棋手的顏色,開始的時(shí)候是紅色,取0 時(shí)是黑色 boardstatus = zeros(10); 棋盤狀態(tài) gt 矩陣,取 0為空,取 1 為黑,取 2為紅 zeros(10) 將畫出 10*10 的零陣,代表棋盤上的100個(gè)位置 while 1 hold on posflag = 1;用于判斷下的棋是否有效,取1說明下的棋無效,要重新下

3、 while posflag xpos,ypos = ginput(1);能從當(dāng)前的坐標(biāo)中讀取n個(gè)點(diǎn)并返回這n個(gè)點(diǎn)的x,y坐標(biāo), 均為n x1向量,程序運(yùn)行時(shí),在界面鼠標(biāo)會(huì)以一個(gè) 十字線移動(dòng),便是 ginput(x) 的功能 xpos = 0.5*(floor(xpos)+ceil(xpos); x,y為圓心,floor(x) 地板函數(shù),即舍去 正小數(shù)至最近整數(shù) ypos = 0.5*(floor(ypos)+ceil(ypos); ceil(x)天花板函數(shù),即加入正小數(shù)至最近 整數(shù),例如 x=9.5 , floo(x)=9,ceil(x)=10 if xpos=11|ypos=11點(diǎn)到棋盤外

4、了,回到上面的循環(huán) continue end for n=1:10判斷棋子是否下到邊界,若在邊線上,判斷無效,繼續(xù) if xpos=n|ypos=n continue end rx = floor(xpos); boardstatus是10*10 零陣從 1*1 開始,所以用 floor 函數(shù) ry = floor(ypos); if boardstatus(rx,ry)=1|boardstatus(rx,ry)=2該位置已經(jīng)有棋子 continue;回到上面的循環(huán) end posflag = 0;跳出循環(huán) end if qishou=1 drawthego(xpos,ypos,qishou)

5、; boardstatus(rx,ry)=1;此空為紅棋 qishou = 0;輪到黑棋下 else drawthego(xpos,ypos,qishou); boardstatus(rx,ry)=2; 此空位黑棋 qishou = 1; 輪到紅棋下 end if iswin(boardstatus,rx,ry)=1 if qishou=1 winmsg = else winmsg = end 黑棋連成了五顆,黑棋勝! 紅棋連成了五顆,紅棋勝! if iswin(boardstatus,rx,ry)=2 winmsg = msgbox(winmsg) 和棋 ; msgbox(Message)創(chuàng)

6、建一個(gè)對話框,根據(jù) figure 窗體大小自動(dòng)將 Message換行。Message可以是一個(gè)子符串向量、子符串矩陣或 者元胞數(shù)組,彈出贏家是紅方或黑方的或和棋的對話框 return end axis(0 12 0 12); 坐標(biāo)軸范圍控制命令,axis(xmin xmax ymin ymax)用 于設(shè)置圖表各坐標(biāo)軸的刻度范圍 axis equal end 橫縱坐標(biāo)使用相同的刻度(使每個(gè)格子是正方形) figure(1) axis(0 10 0 10); 創(chuàng)建一個(gè)新的圖形對象 坐標(biāo)軸范圍控制命令,axis(xmin xmax ymin ymax)用于設(shè) 置圖表各坐標(biāo)軸的刻度范圍 axis eq

7、ual 橫縱坐標(biāo)使用相同的刻度(使每個(gè)格子為正方形)【上三行為無效語句在程序中 無作用】 function drawthego(x,y,flag) t = 0:pi/100:2*pi; 在(x,y)處畫一個(gè)棋子flag取1時(shí)畫紅棋flag取0時(shí)畫黑棋 畫最外面一層的圓周,x,y是圓心0.5為半徑,其中增量只要足夠小就行 不必非取 pi/100 ,若想要畫到格子的點(diǎn)上,只需將圓心移到格點(diǎn)坐 標(biāo) rx = x+0.5*cos(t); ry = y+0.5*sin(t); 標(biāo) if flag=1 fill(rx,ry,r); fill(x1,x2,x3,x4,y1,y2,y3,y4,k) x1,x2

8、,x3,x4,y1,y2,y3,y4 區(qū)域內(nèi)的顏色填充為黑色, k 表示 黑色 r 是紅色, flag 取 1畫紅色, flag 取0畫黑色 else fill(rx,ry,k); end function w = iswin(board,x,y) w = 0; if isempty(find(board)=0) 判斷是否贏棋 棋盤上下滿棋了,判為和棋, find(A) 計(jì)算一個(gè)數(shù)組,它包含數(shù) 組A中非零元素的索引【此if循環(huán)判斷和棋有誤,find(A) 函數(shù)返回的是行列向量】,應(yīng)該統(tǒng)計(jì)棋子個(gè)數(shù),若為棋 盤的最大容量就和棋 w=2; return; end 修改如下:在剛下棋的后面判斷 fla

9、g = board(x,y);剛下的棋 sum=0;for i=1:10 for j=1:10 該位置已經(jīng)有棋子 if boardstatus(i,j)=1|boardstatus(i,j)=2 sum=sum+1 ; if sum=100 w=2; return; k = 0;統(tǒng)計(jì)連在一起的棋的個(gè)數(shù) for i = x:10統(tǒng)計(jì)從此子開始,橫向到右邊界的同色個(gè)數(shù) if board(i,y)=flag 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就跳出 循環(huán) break end k = k+1; end if k=5 w=1; return end for i = x-1:-1:1 i

10、f board(i,y)=flag 統(tǒng)計(jì)從此子開始,橫向到左邊界的同色個(gè)數(shù) 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就跳出 循環(huán) break; end k = k+1; end if k=5 w=1; return end k = 0; for i = y:10統(tǒng)計(jì)從此子開始,縱向到上邊界的同色個(gè)數(shù) if board(x,i)=flag 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就跳出 循環(huán) break; end k = k+1; end if k=5 w=1; return end for i = y-1:-1:1 if board(x,i)=flag 統(tǒng)計(jì)從此子開始,

11、縱向到下邊界的同色個(gè)數(shù) 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就跳出 循環(huán) break; end k = k+1; end if k=5 w=1; return end k = 0;統(tǒng)計(jì)主對角線,斜向上同色子的個(gè)數(shù) for i = 0:10 if x+i10 break end if y+i10 break; end if board(x+i,y+i)=flag 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就 跳出循環(huán) break; end k = k+1; end if k=5 w=1; return end for i = 1:10統(tǒng)計(jì)主對角線,斜向下同色子的個(gè)數(shù) if x-i0 break; end if y-i=5 w=1; return end k = 0;統(tǒng)計(jì)副對角線,斜向上同色子的個(gè)數(shù) for i = 0:10 if x-i10 break; end if board(x-i,y+i)=flag 判斷在此過程中,棋子與剛下的棋的顏色是否一樣,不一樣就 跳出循環(huán) break; end

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論