博弈樹實現(xiàn)3字棋程序設計報告_第1頁
博弈樹實現(xiàn)3字棋程序設計報告_第2頁
博弈樹實現(xiàn)3字棋程序設計報告_第3頁
博弈樹實現(xiàn)3字棋程序設計報告_第4頁
博弈樹實現(xiàn)3字棋程序設計報告_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄摘 要3第一部分 設計總概3一設計目的3二設計要求及內容4三設計方法4四系統(tǒng)分析與設計4一 . 概要設計4二. 詳細設計4第二部分 數(shù)據(jù)結構設計5一:主系統(tǒng)的函數(shù)5二:頭文件5第三部分 功能實現(xiàn)與程序調試5一:程序實現(xiàn)的功能流程圖6二:程序實現(xiàn)源代碼61. 頭文件62.cpp文件代碼9三 程序實現(xiàn)截圖101.界面102. 進入游戲開始下棋103.判斷棋局勝負:124:結束游戲:12第四部分 完成設計13一、 實驗總結13摘 要用所學的語言,設計簡單的一字棋游戲。關鍵字:博弈,啟發(fā)式搜索 第一部分 設計總概一設計目的 理解和掌握博弈樹的啟發(fā)式搜索過程,能夠用選定的編程語言實現(xiàn)簡單的博弈游戲。

2、二設計要求及內容 設計一個不少于3行3列的棋盤,自己給出估價函數(shù),采用極大極小搜索方法。采用人機對弈的方式,一方走步夠等待對方,對弈過程的棋局變化在屏幕上顯示。三設計方法 采用c語言編寫程序實現(xiàn) 四系統(tǒng)分析與設計一 . 概要設計 A:進入主界面 主界面包括導語及游戲操作步驟及其規(guī)則 B:進入游戲,開始下棋 C:判斷輸贏,結束游戲 D:判斷是否重新開始游戲 是則返回B步驟 否則結束游戲 二. 詳細設計 1.進入vs2010,選擇win32項目,新建程序 2 界面設計 利用所學的c語言知識,設計一個簡單的棋盤游戲界面3. 函數(shù)設計 利用所學的算法,編寫棋盤分析函數(shù)第二部分 數(shù)據(jù)結構設計一:主系統(tǒng)的

3、函數(shù)窗口創(chuàng)建函數(shù),消息響應函數(shù)皆放在主函數(shù)cpp里面 二:頭文件 存放具體的操作步驟及其函數(shù) 第三部分 功能實現(xiàn)與程序調試 開始 主界面 判斷輸贏 棋盤 開始下棋分出勝負 平局 結束,是否重新開始游戲 結束是否否是一:程序實現(xiàn)的功能流程圖 二:程序實現(xiàn)源代碼1. 頭文件 A:定義類:#include #include using namespace std;class CGobang /棋子類private:char chSort; /棋子的類別int nWin; /贏棋的次數(shù)int nLose; /輸棋的次數(shù)static int nDraw; /平局次數(shù)static char achBoar

4、d33; /棋盤static int nSize; /棋盤的尺寸 nSize X nSizepublic:CGobang(char chsort) /構造函數(shù),決定一方棋子的類別chSort=chsort;nWin=nLose=nDraw=0;void PlayTurn(void); /走1步棋int Judge(); /判斷是否連成一線,是則返回1,否則返回0void Win(void); /贏棋void Lose(void); /輸棋static void Draw(void); /平局void PrintInfo(void); /輸出總體情況static void PrintBoard(

5、void); /輸出棋盤static int GetFull(void); /判斷棋盤是否已布滿棋子static void InitialBoard(void); /初始化棋盤;B:操作函數(shù): #include lei.h#includechar CGobang:achBoard33;int CGobang:nSize = 3;int CGobang:nDraw = 0;void CGobang:Draw()cout nntt平局!nn;nDraw+;void CGobang:InitialBoard() /初始化棋盤for(int i=0;inSize;i+)for(int j=0;jnSi

6、ze;j+)achBoardij= ;void CGobang:PrintBoard() /輸出棋盤system(CLS);cout endl;cout 1 2 3 endl;cout 1 achBoard00 | achBoard01 | achBoard02 endl;cout -|-|- endl;cout 2 achBoard10 | achBoard11 | achBoard12 endl;cout -|-|- endl;cout 3 achBoard20 | achBoard21 | achBoard22 endl;cout endl;cout endl;int CGobang:G

7、etFull() /判斷棋盤是否布滿棋子,若是返回1for(int i=0;inSize;i+)for(int j=0;jnSize;j+)if(achBoardij= )return 0;return 1;void CGobang:Win() /贏棋CGobang:PrintBoard(); /輸出棋盤cout nnttchSort方獲勝!nn;nWin+;void CGobang:Lose() /輸棋nLose+;void CGobang:PlayTurn(void) /走1步棋int nRow,nCol;cout 現(xiàn)在該 chSort nRow nCol; /輸入坐標if(nRownSi

8、ze | nColnSize|nRow1|nCol1) /判斷坐標越界cout 輸入的坐標越界,x與y的范圍應小于等于nSize并且大于0,請重新輸入n;else if(achBoardnRow-1nCol-1!= ) /判斷坐標合理cout 棋盤(nRow ,nCol )處已有棋子,請重新輸入n;elseachBoardnRow-1nCol-1=chSort; /在坐標處放上棋子break; /退出循環(huán)while(1);int CGobang:Judge() /判斷是否棋子連成一線,若是返回1/以下是各種可能連成一線的情況if(achBoard00=chSort & achBoard11=c

9、hSort & achBoard22=chSort)return 1;else if(achBoard20=chSort & achBoard11=chSort & achBoard02=chSort)return 1;else if(achBoard00=chSort & achBoard10=chSort & achBoard20=chSort)return 1;else if(achBoard01=chSort & achBoard11=chSort & achBoard21=chSort)return 1;else if(achBoard02=chSort & achBoard12=c

10、hSort & achBoard22=chSort)return 1;else if(achBoard00=chSort & achBoard01=chSort & achBoard02=chSort)return 1;else if(achBoard10=chSort & achBoard11=chSort & achBoard12=chSort)return 1;else if(achBoard20=chSort & achBoard21=chSort & achBoard22=chSort)return 1;elsereturn 0; /沒有連成一線則返回0void CGobang:Pr

11、intInfo(void) /打印總體情況cout Side chSort方共計贏 nWin 局,輸 nLose 局,平 nDraw 局。endl;void PrintRule(void) /打印規(guī)則cout nt*歡迎使用三子棋游戲!* endl endl;cout nt* endl ;cout t* 游戲規(guī)則: * endl;cout t* a.每1步輸入要下棋的格子的x,y坐標,按Enter鍵 *n;cout t* b.有1方首先3個棋子連成一線即判獲勝 *n;cout t* c.當棋子布滿棋盤但仍無獲勝方即為平局 *n;cout t* d.X方先行 *n;cout t* endl ;c

12、out nntt請按任意鍵開始下棋!nn;int JudgePlay(CGobang & SideX,CGobang & SideO) /每下1步要進行輸贏的判斷,有結果則返回1if(SideX.Judge() /X方獲勝SideX.Win();SideO.Lose();return 1;else if(SideO.Judge() /O方獲勝SideO.Win();SideX.Lose();return 1;elsereturn 0;void Play(CGobang & SideX,CGobang & SideO) /開始一局游戲while(1)CGobang:PrintBoard(); /

13、輸出棋盤SideX.PlayTurn(); /X方下棋if(JudgePlay(SideX,SideO) /判斷輸贏break;if(CGobang:GetFull() /判斷是否平局CGobang:Draw();break;CGobang:PrintBoard(); /輸出棋盤SideO.PlayTurn(); /O方下棋if(JudgePlay(SideX,SideO) /判斷輸贏break;if(CGobang:GetFull() /判斷是否平局CGobang:Draw();break;2.cpp文件代碼#include #include #include juti.hint main(

14、void)system(color 88);CGobang SideX(X),SideO(O); /定義兩個棋子類對象,分別代表X方與O方PrintRule();cin.get();string strChoice;doCGobang:InitialBoard(); /初始化棋盤Play(SideX,SideO); /開始下一局cout strChoice;while(strChoice = Y | strChoice = y);SideX.PrintInfo();SideO.PrintInfo();cout nnt歡迎再次使用三子連珠游戲! endl endl;return 0;3 程序實現(xiàn)截圖1.界面2. 進入游戲開始下棋 輸入坐標開始棋局判斷輸入坐標是否合理:3.判斷棋局勝負:4:結束游戲: 第四部分 完

溫馨提示

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

評論

0/150

提交評論