五子棋游戲課程設計報告_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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 盤面分析填寫棋型表2</p><p>  1.6 對方下子2</p><p>  1.7 勝負判斷2</p><p>  第二章 功能描述3</p><p>  2.1 功能模塊圖3</p><p>  2.2 功能說明3</p><p&

3、gt;  第三章 系統(tǒng)設計4</p><p><b>  3.1 流程圖4</b></p><p>  3.2 流程圖說明5</p><p>  第四章 運行結果6</p><p><b>  第五章 總結8</b></p><p><b>  第六章 致

4、謝9</b></p><p>  附錄一 參考文獻10</p><p>  附錄二 源代碼11</p><p><b>  五子棋游戲</b></p><p><b>  第一章 需求分析</b></p><p><b>  1.1 總體分析<

5、;/b></p><p>  軟件需求分析是軟件開發(fā)周期的第一個階段,也是關系到軟件開發(fā)成敗的關鍵一步。對于任何一個軟件而言,需求分析工作都是至關重要的一步。只有通過軟件需求分析,才能把軟件的功能和性能由總體的概念性描述轉化為具體的規(guī)格說明,進而建立軟件開發(fā)的基礎。實踐表明,需求分析工作進行得好壞,在很大程度上決定了軟件開發(fā)的成敗。</p><p>  軟件需求分析的任務是:讓用戶和

6、開發(fā)者共同明確將要開發(fā)的是一個什么樣的軟件。具體而言,就是通過對問題及其環(huán)境的理解、分析和綜合,建立邏輯模型,完成新軟件的邏輯方案設計。</p><p>  基于本游戲,首先得為整個棋盤建立一張表格用以記錄棋子信息,我們使用一個15*15的二維數組Table[15][15](15*15是五子棋棋盤的大小),數組的每一個元素對應棋盤上的一個交叉點,用‘0’表示空位、‘1’代表己方的子、‘2’代表對方的子;這張表也是

7、今后分析的基礎。在此之后還要為兩個玩家雙方各建立一張棋型表Computer[15][15][4]和Player[15][15][4],用來存放棋型數據。</p><p><b>  1.2 初始化</b></p><p>  首先,建立盤面數組Table[15][15]、對戰(zhàn)雙方的棋型表Computer[15][15][4]和Player[15][15][4]并將它們

8、清零以備使用;然后初始化顯示器、鍵盤、鼠等輸入輸出設備并在屏幕上畫出棋盤(棋盤可以不顯示)。 </p><p>  1.3 主循環(huán)控制模塊</p><p>  控制下棋順序,當輪到某方下子時,負責將程序轉到相應的模塊中去,主要擔當一個調度者的角色。</p><p><b>  1.4 玩家下子</b></p><p> 

9、 當輪到玩家下時,您通過鍵盤或鼠標在棋盤上落子,程序會根據該點的位置,在Table[15][15]數組的相應地方記錄‘2’,以表明該子是玩家下的。</p><p>  1.5 盤面分析填寫棋型表</p><p>  您在下五子棋時,一定會先根據棋盤上的情況,找出當前最重要的一些點位,如“活三”、“沖四”等;然后再在其中選擇落子點。先來分析己方的棋型,我們從棋盤左上角出發(fā),向右逐行搜索,當遇

10、到一個空白點時,以它為中心向左挨個查找,如果遇到己方的子則記錄然后繼續(xù),如果遇到對方的子、空白點或邊界就停止查找。左邊完成后再向右進行同樣的操作;最后把左右兩邊的記錄合并起來,得到的數據就是該點橫向上的棋型,然后把棋型的編號填入到Computer[x][y][n]中就行了(x、y代表坐標,n=0、1、2、3分別代表橫、豎、左斜、右斜四個方向)。而其他三個方向的棋型也可用同樣的方法得到,當搜索完整張棋盤后,己方棋型表也就填寫完畢了。然后再

11、用同樣的方法填寫對方棋型表。</p><p>  注意:所有棋型的編號都要事先 定義好,越重要的號數越大! </p><p><b>  1.6 對方下子</b></p><p>  有了上面填寫的兩張棋型表,就是遍歷棋型表Computer[15][15][4]和Player[15][15][4]找出其中數值最大的一點,在該點下子即可。但這種算

12、法的弱點非常明顯,只顧眼前利益,不能顧全大局,這就和許多五子棋初學者一樣犯了“目光短淺”的毛病。 如果在這兒下子將會形成對手不得不防守的棋型(例如:‘沖四’、‘活三’);那么下一步對手就會照您的思路下子來防守您,如此一來便完成了第一步的預測。這時再調用模塊4對預測后的棋進行盤面分析,如果出現了‘四三’、‘雙三’或‘雙四’等制勝點,那么己方就可以獲勝了(當然對黑棋而言‘雙三’、‘雙四’是禁手,另當別論);否則照同樣的方法向下分析,就可預測

13、出第二步、第三步……</p><p>  等一等,要是盤面上沒有對手必須防的棋型,哪該怎么辦呢?進攻不成的話就得考慮防守了,將自己和對手調換一下位置,然后用上面的方法來預測對手的棋,這樣既可以防住對手巧妙的攻擊,又能待機發(fā)動反擊,何樂而不為呢!</p><p><b>  1.7 勝負判斷</b></p><p>  務須多言,某方形成五子連即

14、獲勝;若黑棋走出‘雙三’、‘雙四’或長連即以禁手判負。</p><p><b>  第二章 功能描述</b></p><p><b>  2.1 功能模塊圖</b></p><p>  圖2.1 功能模塊圖</p><p><b>  2.2 功能說明</b></p>

15、;<p>  該五子棋程序基本上實現了五子棋的游戲功能,有雙方下棋的界面及最終判定結果的界面。同時該游戲采用二維坐標實現,明了易懂,方便玩家在游戲過程中的基本操作,使游戲更加簡便。在細節(jié)方面,該系統(tǒng)提供實時存儲功能,隨時記錄為完成的游戲,使用戶可以很好的處理意外中斷的情況。該游戲基本實現了游戲的一些要求和特征。在游戲的源程序及文檔方面,我們也嚴格遵守軟件工程思想,立足實驗要求,確定任務,需求分析,設計和編碼,每個步驟力求清

16、晰易懂。原代碼注釋詳盡,各功能模塊功能分明,可移植性強。當然該系統(tǒng)也有很多不足的地方,第一次進行獨立的課程設計,也有很多細節(jié)方面是考慮到的,這款游戲也是在不斷的調試和修改中產生和完善的。希望老師能夠指出不足,幫助我不斷提高。</p><p><b>  第三章 系統(tǒng)設計</b></p><p><b>  3.1 流程圖</b></p&g

17、t;<p><b>  圖3.1 流程圖</b></p><p><b>  3.2 流程圖說明</b></p><p>  本程序定義了各種操作函數、各種狀態(tài)判定宏,思想明確,思路清晰。各個判斷選擇了不同路徑,因此繼續(xù)進行或輸出結果。程序中,“循環(huán)”的利用非常直接和清晰,雙方交替下棋,因此循環(huán)往復。最終決出勝負或最終平局。分析時,

18、也考慮了許多種情況,針對各個情況均作出了相對措施和解決方案。</p><p>  程序采用循環(huán)進行雙方交替下棋,并進行了很多判斷。首先判斷棋盤是否已滿,若棋盤已滿,則輸出平局,結束游戲;若棋盤未滿,則繼續(xù)進行。然后判斷“0”方是否勝出,若“0”方獲勝,則輸出“0”方獲勝,結束游戲;若“0”方沒有獲勝,則繼續(xù)進行。再判斷“x”方是否獲勝,若“x”方獲勝,則輸出“x”方獲勝,結束游戲;若“x”方沒有獲勝,則繼續(xù)進行。

19、回到“首先”的判斷。如此循環(huán)……</p><p><b>  第四章 運行結果</b></p><p>  圖4.1 運行結果初始圖</p><p>  圖4.2 游戲過程圖</p><p>  圖4.3 游戲進行圖</p><p>  圖4.4 “0”方獲勝圖</p><p&

20、gt;<b>  第五章 總結</b></p><p><b>  第六章 致謝</b></p><p><b>  附錄一 參考文獻</b></p><p>  [1]嚴蔚敏,吳偉民.數據結構.北京:清華大學出版社,2010年</p><p>  [2]蘇仕華,魏韋巍,王敬生

21、,劉燕君.數據結構課程設計(第二版).北京:機械工業(yè)出版社,2010年</p><p>  [3]譚浩強.C程序設計(第二版).北京:清華大學出版社,1999年</p><p>  [4]譚浩強.C++程序設計.北京:清華大學出版社,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子是否獲勝的函數 </p><p>  int Bsheng(char a[][15]);</p><p

23、>  //判斷x子是否獲勝的函數 </p><p>  int he(char a[][15]);</p><p>  //判斷是否平局(也就是棋盤下滿了)的函數 </p><p>  void qipan(char a[15][15])</p><p>  //執(zhí)行輸出棋盤命令</p><p><b&

24、gt;  { </b></p><p>  cout<<"本游戲采用二維數組實現,棋盤為15X15的二維直角坐標系,均從1到15,祝二位游戲愉快.";</p><p>  for(int i=0;i<15;i++)</p><p><b>  //打印棋盤</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)語句執(zhí)行o,x交替下子,這些while語句看起來似乎是個死

28、循環(huán)~實際上都會經過break結束 </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<<"請輸入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<<"已有子請重下"<<",";continue;} </p><p>  else if(x>=15||y>=15)</p><p>  {cout<<

31、"輸入錯誤請重輸"<<",";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><p>  if(Hsheng(a))</p><p>  //判斷o

33、子是否已經獲勝 </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<<"請輸入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<<"已有子請重下"; </p>&l

36、t;p>  cout<<"請輸入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<<"輸入錯誤請重輸"<<",";</p><p>  //判斷輸入棋子位置是否正確</p><p>  cout<<"請輸入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><p>  if(Bsheng(a))&

40、lt;/p><p>  //判斷x子是否已經獲勝 </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個是否都相等 </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個是否都相等 </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個 </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個 </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>  //當棋盤全部子都不是' '時才能return 1,即棋盤已下滿 </p><p>  return 0; </p><p><b>  } </b></p><p>  return 1; </p><p><

溫馨提示

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

評論

0/150

提交評論