版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 目錄</b></p><p> 第一章 需求分析1</p><p> 1.1 總體分析1</p><p><b> 1.2 初始化1</b></p><p> 1.3 主循環(huán)控制模塊1</p><p> 1.4 玩家下子1&l
2、t;/p><p> 1.5 盤(pán)面分析填寫(xiě)棋型表2</p><p> 1.6 對(duì)方下子2</p><p> 1.7 勝負(fù)判斷2</p><p> 第二章 功能描述3</p><p> 2.1 功能模塊圖3</p><p> 2.2 功能說(shuō)明3</p><p&
3、gt; 第三章 系統(tǒng)設(shè)計(jì)4</p><p><b> 3.1 流程圖4</b></p><p> 3.2 流程圖說(shuō)明5</p><p> 第四章 運(yùn)行結(jié)果6</p><p><b> 第五章 總結(jié)8</b></p><p><b> 第六章 致
4、謝9</b></p><p> 附錄一 參考文獻(xiàn)10</p><p> 附錄二 源代碼11</p><p><b> 五子棋游戲</b></p><p><b> 第一章 需求分析</b></p><p><b> 1.1 總體分析<
5、;/b></p><p> 軟件需求分析是軟件開(kāi)發(fā)周期的第一個(gè)階段,也是關(guān)系到軟件開(kāi)發(fā)成敗的關(guān)鍵一步。對(duì)于任何一個(gè)軟件而言,需求分析工作都是至關(guān)重要的一步。只有通過(guò)軟件需求分析,才能把軟件的功能和性能由總體的概念性描述轉(zhuǎn)化為具體的規(guī)格說(shuō)明,進(jìn)而建立軟件開(kāi)發(fā)的基礎(chǔ)。實(shí)踐表明,需求分析工作進(jìn)行得好壞,在很大程度上決定了軟件開(kāi)發(fā)的成敗。</p><p> 軟件需求分析的任務(wù)是:讓用戶和
6、開(kāi)發(fā)者共同明確將要開(kāi)發(fā)的是一個(gè)什么樣的軟件。具體而言,就是通過(guò)對(duì)問(wèn)題及其環(huán)境的理解、分析和綜合,建立邏輯模型,完成新軟件的邏輯方案設(shè)計(jì)。</p><p> 基于本游戲,首先得為整個(gè)棋盤(pán)建立一張表格用以記錄棋子信息,我們使用一個(gè)15*15的二維數(shù)組Table[15][15](15*15是五子棋棋盤(pán)的大小),數(shù)組的每一個(gè)元素對(duì)應(yīng)棋盤(pán)上的一個(gè)交叉點(diǎn),用‘0’表示空位、‘1’代表己方的子、‘2’代表對(duì)方的子;這張表也是
7、今后分析的基礎(chǔ)。在此之后還要為兩個(gè)玩家雙方各建立一張棋型表Computer[15][15][4]和Player[15][15][4],用來(lái)存放棋型數(shù)據(jù)。</p><p><b> 1.2 初始化</b></p><p> 首先,建立盤(pán)面數(shù)組Table[15][15]、對(duì)戰(zhàn)雙方的棋型表Computer[15][15][4]和Player[15][15][4]并將它們
8、清零以備使用;然后初始化顯示器、鍵盤(pán)、鼠等輸入輸出設(shè)備并在屏幕上畫(huà)出棋盤(pán)(棋盤(pán)可以不顯示)。 </p><p> 1.3 主循環(huán)控制模塊</p><p> 控制下棋順序,當(dāng)輪到某方下子時(shí),負(fù)責(zé)將程序轉(zhuǎn)到相應(yīng)的模塊中去,主要擔(dān)當(dāng)一個(gè)調(diào)度者的角色。</p><p><b> 1.4 玩家下子</b></p><p>
9、 當(dāng)輪到玩家下時(shí),您通過(guò)鍵盤(pán)或鼠標(biāo)在棋盤(pán)上落子,程序會(huì)根據(jù)該點(diǎn)的位置,在Table[15][15]數(shù)組的相應(yīng)地方記錄‘2’,以表明該子是玩家下的。</p><p> 1.5 盤(pán)面分析填寫(xiě)棋型表</p><p> 您在下五子棋時(shí),一定會(huì)先根據(jù)棋盤(pán)上的情況,找出當(dāng)前最重要的一些點(diǎn)位,如“活三”、“沖四”等;然后再在其中選擇落子點(diǎn)。先來(lái)分析己方的棋型,我們從棋盤(pán)左上角出發(fā),向右逐行搜索,當(dāng)遇
10、到一個(gè)空白點(diǎn)時(shí),以它為中心向左挨個(gè)查找,如果遇到己方的子則記錄然后繼續(xù),如果遇到對(duì)方的子、空白點(diǎn)或邊界就停止查找。左邊完成后再向右進(jìn)行同樣的操作;最后把左右兩邊的記錄合并起來(lái),得到的數(shù)據(jù)就是該點(diǎn)橫向上的棋型,然后把棋型的編號(hào)填入到Computer[x][y][n]中就行了(x、y代表坐標(biāo),n=0、1、2、3分別代表橫、豎、左斜、右斜四個(gè)方向)。而其他三個(gè)方向的棋型也可用同樣的方法得到,當(dāng)搜索完整張棋盤(pán)后,己方棋型表也就填寫(xiě)完畢了。然后再
11、用同樣的方法填寫(xiě)對(duì)方棋型表。</p><p> 注意:所有棋型的編號(hào)都要事先 定義好,越重要的號(hào)數(shù)越大! </p><p><b> 1.6 對(duì)方下子</b></p><p> 有了上面填寫(xiě)的兩張棋型表,就是遍歷棋型表Computer[15][15][4]和Player[15][15][4]找出其中數(shù)值最大的一點(diǎn),在該點(diǎn)下子即可。但這種算
12、法的弱點(diǎn)非常明顯,只顧眼前利益,不能顧全大局,這就和許多五子棋初學(xué)者一樣犯了“目光短淺”的毛病。 如果在這兒下子將會(huì)形成對(duì)手不得不防守的棋型(例如:‘沖四’、‘活三’);那么下一步對(duì)手就會(huì)照您的思路下子來(lái)防守您,如此一來(lái)便完成了第一步的預(yù)測(cè)。這時(shí)再調(diào)用模塊4對(duì)預(yù)測(cè)后的棋進(jìn)行盤(pán)面分析,如果出現(xiàn)了‘四三’、‘雙三’或‘雙四’等制勝點(diǎn),那么己方就可以獲勝了(當(dāng)然對(duì)黑棋而言‘雙三’、‘雙四’是禁手,另當(dāng)別論);否則照同樣的方法向下分析,就可預(yù)測(cè)
13、出第二步、第三步……</p><p> 等一等,要是盤(pán)面上沒(méi)有對(duì)手必須防的棋型,哪該怎么辦呢?進(jìn)攻不成的話就得考慮防守了,將自己和對(duì)手調(diào)換一下位置,然后用上面的方法來(lái)預(yù)測(cè)對(duì)手的棋,這樣既可以防住對(duì)手巧妙的攻擊,又能待機(jī)發(fā)動(dòng)反擊,何樂(lè)而不為呢!</p><p><b> 1.7 勝負(fù)判斷</b></p><p> 務(wù)須多言,某方形成五子連即
14、獲勝;若黑棋走出‘雙三’、‘雙四’或長(zhǎng)連即以禁手判負(fù)。</p><p><b> 第二章 功能描述</b></p><p><b> 2.1 功能模塊圖</b></p><p> 圖2.1 功能模塊圖</p><p><b> 2.2 功能說(shuō)明</b></p>
15、;<p> 該五子棋程序基本上實(shí)現(xiàn)了五子棋的游戲功能,有雙方下棋的界面及最終判定結(jié)果的界面。同時(shí)該游戲采用二維坐標(biāo)實(shí)現(xiàn),明了易懂,方便玩家在游戲過(guò)程中的基本操作,使游戲更加簡(jiǎn)便。在細(xì)節(jié)方面,該系統(tǒng)提供實(shí)時(shí)存儲(chǔ)功能,隨時(shí)記錄為完成的游戲,使用戶可以很好的處理意外中斷的情況。該游戲基本實(shí)現(xiàn)了游戲的一些要求和特征。在游戲的源程序及文檔方面,我們也嚴(yán)格遵守軟件工程思想,立足實(shí)驗(yàn)要求,確定任務(wù),需求分析,設(shè)計(jì)和編碼,每個(gè)步驟力求清
16、晰易懂。原代碼注釋詳盡,各功能模塊功能分明,可移植性強(qiáng)。當(dāng)然該系統(tǒng)也有很多不足的地方,第一次進(jìn)行獨(dú)立的課程設(shè)計(jì),也有很多細(xì)節(jié)方面是考慮到的,這款游戲也是在不斷的調(diào)試和修改中產(chǎn)生和完善的。希望老師能夠指出不足,幫助我不斷提高。</p><p><b> 第三章 系統(tǒng)設(shè)計(jì)</b></p><p><b> 3.1 流程圖</b></p&g
17、t;<p><b> 圖3.1 流程圖</b></p><p><b> 3.2 流程圖說(shuō)明</b></p><p> 本程序定義了各種操作函數(shù)、各種狀態(tài)判定宏,思想明確,思路清晰。各個(gè)判斷選擇了不同路徑,因此繼續(xù)進(jìn)行或輸出結(jié)果。程序中,“循環(huán)”的利用非常直接和清晰,雙方交替下棋,因此循環(huán)往復(fù)。最終決出勝負(fù)或最終平局。分析時(shí),
18、也考慮了許多種情況,針對(duì)各個(gè)情況均作出了相對(duì)措施和解決方案。</p><p> 程序采用循環(huán)進(jìn)行雙方交替下棋,并進(jìn)行了很多判斷。首先判斷棋盤(pán)是否已滿,若棋盤(pán)已滿,則輸出平局,結(jié)束游戲;若棋盤(pán)未滿,則繼續(xù)進(jìn)行。然后判斷“0”方是否勝出,若“0”方獲勝,則輸出“0”方獲勝,結(jié)束游戲;若“0”方?jīng)]有獲勝,則繼續(xù)進(jìn)行。再判斷“x”方是否獲勝,若“x”方獲勝,則輸出“x”方獲勝,結(jié)束游戲;若“x”方?jīng)]有獲勝,則繼續(xù)進(jìn)行。
19、回到“首先”的判斷。如此循環(huán)……</p><p><b> 第四章 運(yùn)行結(jié)果</b></p><p> 圖4.1 運(yùn)行結(jié)果初始圖</p><p> 圖4.2 游戲過(guò)程圖</p><p> 圖4.3 游戲進(jìn)行圖</p><p> 圖4.4 “0”方獲勝圖</p><p&
20、gt;<b> 第五章 總結(jié)</b></p><p><b> 第六章 致謝</b></p><p><b> 附錄一 參考文獻(xiàn)</b></p><p> [1]嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu).北京:清華大學(xué)出版社,2010年</p><p> [2]蘇仕華,魏韋巍,王敬生
21、,劉燕君.數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(第二版).北京:機(jī)械工業(yè)出版社,2010年</p><p> [3]譚浩強(qiáng).C程序設(shè)計(jì)(第二版).北京:清華大學(xué)出版社,1999年</p><p> [4]譚浩強(qiáng).C++程序設(shè)計(jì).北京:清華大學(xué)出版社,2009年</p><p><b> 附錄二 源代碼</b></p><p> #i
22、nclude<iostream> </p><p> using namespace std; </p><p> int Hsheng(char a[][15]);</p><p> //判斷o子是否獲勝的函數(shù) </p><p> int Bsheng(char a[][15]);</p><p
23、> //判斷x子是否獲勝的函數(shù) </p><p> int he(char a[][15]);</p><p> //判斷是否平局(也就是棋盤(pán)下滿了)的函數(shù) </p><p> void qipan(char a[15][15])</p><p> //執(zhí)行輸出棋盤(pán)命令</p><p><b&
24、gt; { </b></p><p> cout<<"本游戲采用二維數(shù)組實(shí)現(xiàn),棋盤(pán)為15X15的二維直角坐標(biāo)系,均從1到15,祝二位游戲愉快.";</p><p> for(int i=0;i<15;i++)</p><p><b> //打印棋盤(pán)</b></p><
25、p><b> {</b></p><p> for(int j=0;j<15;j++)</p><p> cout<<a[i][j];</p><p> cout<<endl; </p><p><b> } </b></p><
26、;p><b> } </b></p><p> int main() </p><p><b> { </b></p><p> char a[15][15]; int x,y; </p><p> for(int i=0;i<15;i++) </p>&
27、lt;p> for(int j=0;j<15;j++) </p><p> a[i][j]=' ';</p><p> qipan(a); </p><p><b> while(1)</b></p><p> //用循環(huán)語(yǔ)句執(zhí)行o,x交替下子,這些while語(yǔ)句看起來(lái)似乎是個(gè)死
28、循環(huán)~實(shí)際上都會(huì)經(jīng)過(guò)break結(jié)束 </p><p><b> {</b></p><p> int a1=1; </p><p> while(1) </p><p><b> {</b></p><p> for(;a1;) </p>&l
29、t;p><b> { </b></p><p> cout<<"請(qǐng)輸入o子下的位置:"; </p><p><b> //輸入o子的位置</b></p><p> cin>>x>>y; if(a[x][y]=='o'||a[x][y]==
30、'x')</p><p> //判斷是否已有子 </p><p> {cout<<"已有子請(qǐng)重下"<<",";continue;} </p><p> else if(x>=15||y>=15)</p><p> {cout<<
31、"輸入錯(cuò)誤請(qǐng)重輸"<<",";continue;} </p><p><b> else</b></p><p> { a[x][y]='o'; a1=0;} </p><p><b> }</b></p><p><
32、b> break;</b></p><p><b> } </b></p><p><b> qipan(a);</b></p><p> //下好o子后將棋盤(pán)顯示 </p><p> if(Hsheng(a))</p><p> //判斷o
33、子是否已經(jīng)獲勝 </p><p> {cout<<"o子獲勝"<<endl; break; } </p><p><b> while(1)</b></p><p><b> //下x子 </b></p><p><b> {<
34、;/b></p><p> cout<<"請(qǐng)輸入x子下的位置:"; </p><p> cin>>x>>y; </p><p> if(a[x][y]=='o'||a[x][y]=='x'||x>=15||y>=15) </p><
35、;p><b> { </b></p><p> for( ; a[x][y]=='o'||a[x][y]=='x'; ) </p><p><b> { </b></p><p> cout<<"已有子請(qǐng)重下"; </p>&l
36、t;p> cout<<"請(qǐng)輸入x子下的位置:"; </p><p> cin>>x>>y;continue;</p><p><b> } </b></p><p> for ( ; x>=15||y>=15||x; ) </p><p&
37、gt;<b> {</b></p><p> cout<<"輸入錯(cuò)誤請(qǐng)重輸"<<",";</p><p> //判斷輸入棋子位置是否正確</p><p> cout<<"請(qǐng)輸入x子下的位置:"; </p><p>
38、cin>>x>>y;continue ;</p><p><b> } </b></p><p> a[x][y]='x';break; </p><p><b> } </b></p><p><b> else </b>
39、</p><p> {a[x][y]='x'; break;} </p><p><b> } </b></p><p><b> qipan(a);</b></p><p> //再一次輸出棋盤(pán) </p><p> if(Bsheng(a))&
40、lt;/p><p> //判斷x子是否已經(jīng)獲勝 </p><p> {cout<<"x子獲勝"<<endl; break; } </p><p><b> if(he(a))</b></p><p> //判斷是否平局 </p><p> {
41、cout<<"平局"<<endl; break;} </p><p><b> } </b></p><p> return 0; </p><p><b> } </b></p><p> int Hsheng(char a[][15])
42、</p><p><b> {</b></p><p><b> int i,j;</b></p><p> //判斷橫著的5個(gè)是否都相等 </p><p> for(i=0;i<15;i++) </p><p> for(j=0;j<15;j++)
43、 </p><p> if(a[i][j]=='o'&&a[i][j+1]=='o'&&a[i][j+2]=='o'&&a[i][j+3]=='o'&&a[i][j+4]=='o') </p><p> return 1; </p&
44、gt;<p> for(j=0;j<15;j++)</p><p> //判斷豎著的5個(gè)是否都相等 </p><p> for(i=0;i<15;i++) </p><p> if(a[i][j]=='o'&&a[i+1][j]=='o'&&a[i+2][j]==&
45、#39;o'&&a[i+3][j]=='o'&&a[i+4][j]=='o') </p><p> return 1; </p><p> for(i=0;i<15;i++)</p><p> //判斷左斜5個(gè) </p><p> for(j=0;j&
46、lt;15;j++) </p><p> if(a[i][j]=='o'&&a[i+1][j+1]=='o'&&a[i+2][j+2]=='o'&&a[i+3][j+3]=='o'&&a[i+4][j+4]=='o') </p><p>
47、return 1; </p><p> for(i=0;i<15;i++)</p><p><b> //右斜5個(gè) </b></p><p> for(j=14;j>3;j--) </p><p> if(a[i][j]=='H'&&a[i+1][j-1]==
48、39;o'&&a[i+2][j-2]=='o'&&a[i+3][j-3]=='o'&&a[i+4][j-4]=='o') </p><p> return 1; </p><p><b> return 0;</b></p><p>
49、<b> } </b></p><p> int Bsheng(char a[][15])</p><p> //同o,只是改字符 </p><p><b> { </b></p><p> int i,j; </p><p> for(i=0;i<
50、15;i++) </p><p> for(j=0;j<15;j++) </p><p> if(a[i][j]=='x'&&a[i][j+1]=='x'&&a[i][j+2]=='x'&&a[i][j+3]=='x'&&a[i][j+4]==
51、9;x') </p><p> return 1; </p><p> for(j=0;j<15;j++) </p><p> for(i=0;i<15;i++) </p><p> if(a[i][j]=='x'&&a[i+1][j]=='x'&&a
52、mp;a[i+2][j]=='x'&&a[i+3][j]=='x'&&a[i+4][j]=='x') </p><p> return 1; </p><p> for(i=0;i<15;i++) </p><p> for(j=0;j<15;j++) <
53、/p><p> if(a[i][j]=='x'&&a[i+1][j+1]=='x'&&a[i+2][j+2]=='x'&&a[i+3][j+3]=='x'&&a[i+4][j+4]=='x') </p><p> return 1; </
54、p><p> for(i=0;i<15;i++) </p><p> for(j=14;j>3;j--) </p><p> if(a[i][j]=='x'&&a[i+1][j-1]=='x'&&a[i+2][j-2]=='x'&&a[i+3][j-3]
55、=='x'&&a[i+4][j-4]=='x') </p><p> return 1; </p><p><b> return 0;</b></p><p><b> } </b></p><p> int he(char a[][1
56、5]) </p><p><b> { </b></p><p> for(int i=0;i<15;i++) </p><p> for(int j=0;j<15;j++) </p><p><b> { </b></p><p> if(a[i
57、][j]==' ')</p><p> //當(dāng)棋盤(pán)全部子都不是' '時(shí)才能return 1,即棋盤(pán)已下滿 </p><p> return 0; </p><p><b> } </b></p><p> return 1; </p><p><
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設(shè)計(jì)--五子棋游戲
- 五子棋小游戲課程設(shè)計(jì)
- java課程設(shè)計(jì)-五子棋游戲
- 五子棋-課程設(shè)計(jì)報(bào)告
- 五子棋游戲設(shè)計(jì)報(bào)告
- 五子棋游戲課程設(shè)計(jì)word格式
- 課程設(shè)計(jì)---五子棋游戲的實(shí)現(xiàn)
- 五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告---java 五子棋游戲設(shè)計(jì)
- c語(yǔ)言課程設(shè)計(jì)報(bào)告五子棋游戲課程設(shè)計(jì)
- flash課程設(shè)計(jì)---五子棋游戲制作
- c++課程設(shè)計(jì)--五子棋游戲
- c語(yǔ)言課程設(shè)計(jì)--五子棋游戲設(shè)計(jì)
- java課程設(shè)計(jì)報(bào)告-五子棋
- 五子棋畢業(yè)課程設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)---五子棋游戲的實(shí)現(xiàn).docx
- java_五子棋小游戲課程設(shè)計(jì)
- java五子棋課程設(shè)計(jì)
- java課程設(shè)計(jì)--五子棋
- 五子棋java課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論