五子棋c++課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  目錄</b></p><p> ?。赫n程設(shè)計(jì)目的和要求·······················2</p><

2、p>  1.1 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的 ··························2</p><p>  1.2 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)現(xiàn)的要

3、求······················2</p><p>  :課程設(shè)計(jì)任務(wù)內(nèi)容·········

4、················3</p><p>  2.1 五子棋對(duì)弈系統(tǒng)···············

5、;····················3</p><p> ?。涸敿?xì)設(shè)計(jì)說(shuō)明···········&#

6、183;·················4</p><p>  3.1 功能設(shè)計(jì)·············

7、83;··························4</p><p>  3.2五子棋對(duì)弈系統(tǒng)流程圖····

8、··························4</p><p>  3.3 軟件中實(shí)現(xiàn)各項(xiàng)功能的函數(shù)與程序代碼···&

9、#183;····5</p><p>  :程序運(yùn)行環(huán)境說(shuō)明··························10

10、</p><p>  4.1 程序運(yùn)行環(huán)境說(shuō)明及出現(xiàn)的問(wèn)題·····················10</p><p>  4.2 運(yùn)行結(jié)果···

11、····································

12、3;·10</p><p>  第五章:課程設(shè)計(jì)心得與體會(huì)····················14</p><p>  附錄····

13、83;···································15</

14、p><p>  源程序:·································

15、····16</p><p><b>  五子棋</b></p><p><b>  課程設(shè)計(jì)目的和要求</b></p><p>  1.1 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的目的 </p><p>  進(jìn)一步培養(yǎng)結(jié)構(gòu)化程序設(shè)計(jì)的思想,加深對(duì)高級(jí)系統(tǒng)語(yǔ)言基本語(yǔ)言要素和控制結(jié)構(gòu)

16、的理解,針對(duì)數(shù)據(jù)結(jié)構(gòu)中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。</p><p>  此課程設(shè)計(jì)著眼于知識(shí)的運(yùn)用,把平常學(xué)的知識(shí)運(yùn)用到課程實(shí)踐中來(lái),本身就是考察我們知識(shí)運(yùn)用能力。要求熟悉運(yùn)用一些編程軟件,對(duì)我們所學(xué)的理論知識(shí)進(jìn)一步的深化。</p><p>  1.2 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)現(xiàn)的要求</p><p>  使用

17、C++語(yǔ)言編寫(xiě)一個(gè)基于控制臺(tái)的簡(jiǎn)單程序,使學(xué)生掌握簡(jiǎn)單的程序設(shè)計(jì)技巧。同時(shí)設(shè)計(jì)一個(gè)簡(jiǎn)單的五子棋對(duì)弈系統(tǒng),可以實(shí)現(xiàn)五子棋的基本功能,是一款?yuàn)蕵?lè)用的小型程序。</p><p><b>  課程設(shè)計(jì)任務(wù)內(nèi)容</b></p><p>  2.1五子棋對(duì)弈系統(tǒng) </p><p>  設(shè)計(jì)一個(gè)五子棋系統(tǒng)程序,實(shí)現(xiàn)對(duì)五子棋進(jìn)行運(yùn)行。</p>

18、<p>  基本要求:五子棋是有兩個(gè)人在一盤(pán)棋上進(jìn)行對(duì)抗的競(jìng)技活動(dòng)。在對(duì)局開(kāi)始時(shí),先由用戶(hù)選擇哪方開(kāi)局,先開(kāi)局一方將一枚棋子落在一點(diǎn)上,然后由另一方在對(duì)方棋周?chē)徊纥c(diǎn)上落子,如此輪流落子,知道某一方首先在棋盤(pán)的直線(xiàn)、橫線(xiàn)或斜線(xiàn)上形成連續(xù)的五子則該方程就算獲勝。</p><p>  此時(shí)算法結(jié)束,當(dāng)有任何一方退時(shí)出,都可在算法中實(shí)現(xiàn)。</p><p>  第三章 詳細(xì)設(shè)計(jì)說(shuō)明&

19、lt;/p><p><b>  3.1 功能設(shè)計(jì)</b></p><p> ?。?)由兩個(gè)玩家分別下棋,當(dāng)某一玩家五子相連,則贏。</p><p> ?。?)界面要求:初始狀態(tài)——顯示棋盤(pán),并顯示兩個(gè)玩家的操作鍵及初始玩家名稱(chēng);游戲進(jìn)行狀態(tài)——?jiǎng)討B(tài)顯示棋盤(pán),不同玩家的棋子用不同符號(hào)顯示,屏幕上顯示當(dāng)前玩家號(hào),結(jié)束時(shí)顯示贏家名稱(chēng)。</p>

20、;<p>  3.2五子棋對(duì)弈系統(tǒng)流程圖</p><p><b>  是</b></p><p><b>  否</b></p><p><b>  是</b></p><p>  否

21、 </p><p><b>  否</b></p><p><b>  是</b></p><p><b>  是</b></p><p>  圖 3-1程序總體圖</p><p><b>

22、  圖3-2算法流程圖</b></p><p>  3.3 軟件中實(shí)現(xiàn)各項(xiàng)功能的函數(shù)與程序代碼</p><p>  主要函數(shù)、結(jié)構(gòu)體和鏈表</p><p>  Int a; //紀(jì)錄坐標(biāo)位置</p><p>  Int b; //紀(jì)錄坐標(biāo)位置</p><p>  

23、Char achBoard[i][j],//用于在【a】【b】處落子</p><p>  chSort;; //棋子的類(lèi)別</p><p>  Int nWin ////贏棋的次數(shù)</p><p><b>  類(lèi)的使用:</b></p><p>  class CGobang<

24、/p><p><b>  {private:</b></p><p>  char chSort; //棋子的類(lèi)別</p><p>  int nWin; //贏棋的次數(shù)</p><p>  int nLose;

25、 //輸棋的次數(shù)</p><p>  static int nDraw; //平局次數(shù)</p><p><b>  public:</b></p><p>  static char achBoard[19][19]; //棋盤(pán)</p>&

26、lt;p>  static int nSize; //棋盤(pán)的尺寸nSize*nSize</p><p>  CGobang(char chsort) //構(gòu)造函數(shù),決定一方棋子的類(lèi)別</p><p><b>  {</b></p><p>  chSort=chsort;&l

27、t;/p><p>  nWin=nLose=nDraw=0;</p><p><b>  }</b></p><p>  friend void huiqi(); //悔棋</p><p>  static void savefile(); //將棋盤(pán)保存至文件</p&

28、gt;<p>  static void readBoard(); //從文件中讀入棋盤(pán)</p><p>  void continute(); //接著上次的游戲玩</p><p>  void PlayTurn(void); //走一步棋</p><p>  int Judg

29、e(); //判斷是否連成五子,是則返回1</p><p>  void Win(void); //贏棋</p><p>  void Lose(void); //輸棋</p><p>  static void Draw(void); //平局&

30、lt;/p><p>  void PrintInfo(void); //打印總體情況</p><p>  static void PrintBoard(void); //輸出棋盤(pán)</p><p>  static int GetFull(void); //判斷棋盤(pán)是否一滿(mǎn)</p><p>  static vo

31、id InitialBoard(void); //初始化棋盤(pán)</p><p><b>  };}</b></p><p>  本次程序設(shè)計(jì)主要設(shè)計(jì)了五個(gè)模塊</p><p><b>  1.繪制棋盤(pán)模塊</b></p><p>  當(dāng)游戲初始化時(shí),和每當(dāng)落子消息觸發(fā)時(shí),都需要對(duì)棋盤(pán)進(jìn)行重繪。這里

32、用特殊符號(hào)“o”“@”分別來(lái)描繪白子、黑子。這個(gè)函數(shù)主要完成了以下工作:</p><p>  ●裝載棋盤(pán)二位數(shù)組并進(jìn)行繪制。</p><p>  ●根據(jù)棋盤(pán)數(shù)據(jù)繪制棋子。</p><p>  ●繪制最后落子指示規(guī)矩。</p><p><b>  圖3-3</b></p><p>  2.鍵盤(pán)操作控

33、制模塊</p><p>  此模塊主要用于處理與用戶(hù)的交互過(guò)程。即完成落子判斷過(guò)程。</p><p>  此模塊主要完成以下工作:</p><p>  判斷是否在棋盤(pán)內(nèi)按落子鍵,和移動(dòng)是否超出棋盤(pán)范圍。</p><p>  判斷落子點(diǎn)是否已有棋子。</p><p><b>  3.判斷勝負(fù)模塊</b&g

34、t;</p><p>  這是游戲中一個(gè)極其重要的算法,用來(lái)判斷當(dāng)前棋盤(pán)的形勢(shì)是哪一方獲勝。五子棋的勝負(fù),在于判斷棋盤(pán)上是否有一個(gè)點(diǎn),從這個(gè)點(diǎn)開(kāi)始的右、下、右下、左下四個(gè)方向是否有連續(xù)的五個(gè)同色棋子出現(xiàn),如圖:</p><p>  圖 3-5判斷勝負(fù)方向</p><p>  這個(gè)算法是本系統(tǒng)里的nWin成員函數(shù)。需要它接受一個(gè)棋子顏色的參數(shù),然后返回一個(gè)布爾值,這個(gè)

35、值指示是否勝利。</p><p>  1).橫向判斷流程圖“——”</p><p><b>  圖3-6</b></p><p>  2).豎向判斷流程圖“|”</p><p>  3).從左到右斜方向“\”</p><p><b>  圖3-8</b></p>

36、<p>  4) .從右到左斜方向“/”</p><p><b>  圖3-9</b></p><p><b>  圖3-9</b></p><p><b>  4.重置棋盤(pán)模塊</b></p><p>  在每局游戲開(kāi)始的時(shí)候都需要調(diào)用這個(gè)函數(shù)InitialBoa

37、rd(void)將棋盤(pán)初始化,也就是棋盤(pán)的初始化工作。在這個(gè)函數(shù)中,主要發(fā)生了這么幾件事情:</p><p>  ●將achBoard[N][N]中每一個(gè)落子位都置為無(wú)子狀態(tài)(0)。</p><p>  ●默認(rèn)的先手順序是黑子先手,置player=1。</p><p><b>  5.游戲結(jié)束模塊</b></p><p>

38、;  這一模塊主要用于釋放內(nèi)存,用輸出流語(yǔ)句輸出結(jié)束信息,并控制循環(huán)退出程序。</p><p>  第四章 程序運(yùn)行環(huán)境說(shuō)明</p><p>  4.1 程序運(yùn)行環(huán)境說(shuō)明及出現(xiàn)的問(wèn)題</p><p>  該程序可以實(shí)現(xiàn)對(duì)學(xué)生信息的錄入和顯示,可以采用Dev-c或者Visual C++</p><p>  運(yùn)行,可以實(shí)現(xiàn)簡(jiǎn)單的界面化,使程序

39、方便使用和修改。</p><p><b>  4.2 運(yùn)行結(jié)果</b></p><p><b>  軟件使用結(jié)果</b></p><p>  1.進(jìn)入游戲→主界面</p><p><b>  圖4-1</b></p><p>  2.點(diǎn)擊1→開(kāi)始游戲&

40、lt;/p><p><b>  圖4-2</b></p><p>  3.繼續(xù)點(diǎn)擊1或2→游戲過(guò)程中</p><p><b>  圖4-3</b></p><p><b>  4.判斷勝負(fù)</b></p><p><b>  圖4-4</b&

41、gt;</p><p>  5.在主界面中點(diǎn)擊0→退出游戲</p><p><b>  圖4-6</b></p><p>  第五章 課程設(shè)計(jì)心得與體會(huì)</p><p>  課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí) ,發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),是對(duì)我們的實(shí)際工作能力的具體訓(xùn)練和考察過(guò)程.隨著科學(xué)

42、技術(shù)發(fā)展的日新月異,當(dāng)今計(jì)算機(jī)應(yīng)用在生活中可以說(shuō)得是無(wú)處不在。因此作為二十一世紀(jì)的大學(xué)來(lái)說(shuō)掌握程序開(kāi)發(fā)技術(shù)是十分重要的,而C++語(yǔ)言又是最常見(jiàn),功能最強(qiáng)大的一種高級(jí)語(yǔ)言,因此做好C++語(yǔ)言課程設(shè)計(jì)是十分必要的。</p><p>  通過(guò)幾周的課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能

43、力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做這么長(zhǎng)的程序設(shè)計(jì),難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)一些前面學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,通過(guò)這次課程設(shè)計(jì)之后,我們把前面所學(xué)過(guò)的知識(shí)又重新溫故了一遍。</p><p>  我做的是五子棋設(shè)計(jì),雖然是很簡(jiǎn)單的一個(gè)小的程序,但對(duì)我來(lái)說(shuō)卻是一個(gè)很大的困難。更加是第一次做課程設(shè)計(jì),所以做了一個(gè)下

44、午卻絲毫沒(méi)有進(jìn)展,最主要是不知從何開(kāi)始,這個(gè)時(shí)候才知道上課老師們不厭其煩的教導(dǎo)是多么的寶貴,這個(gè)時(shí)候才后悔上課的時(shí)候沒(méi)有認(rèn)真的聽(tīng)講??墒乾F(xiàn)在一切都晚了,還好時(shí)間還算是充裕,只好拿出書(shū)本重新復(fù)習(xí)一下。</p><p>  開(kāi)始的時(shí)候真的感覺(jué)編程是一件很無(wú)聊的事情,不過(guò)當(dāng)一個(gè)程序運(yùn)行成功的時(shí)候那種喜悅是無(wú)法言語(yǔ)的,那種成就感是無(wú)法比擬的。又經(jīng)過(guò)幾天的努力,終于把程序完成了,盡管程序還是有很多功能上的欠缺和漏洞,可我還

45、是很高興的。無(wú)論如何是自己的勞動(dòng)成果,是自己經(jīng)過(guò)努力得到的成績(jī),同時(shí)也是學(xué)習(xí)C++語(yǔ)言的一次實(shí)踐作業(yè),自己進(jìn)步的證明。</p><p>  在課程設(shè)計(jì)過(guò)程中,收獲知識(shí),提高能力的同時(shí),我也學(xué)到了很多人生的哲理,懂得怎么樣去制定計(jì)劃,怎么樣去實(shí)現(xiàn)這個(gè)計(jì)劃,并掌握了在執(zhí)行過(guò)程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學(xué)習(xí)的過(guò)程中,我一定會(huì)把課程設(shè)計(jì)的精神帶到生活中,不畏艱難,勇往直前!</p>

46、<p><b>  附錄1:參考文獻(xiàn)</b></p><p>  1、譚浩強(qiáng) 著.C++程序設(shè)計(jì)教程.清華大學(xué)出版社</p><p>  2、陳維興 林小茶 編著.C++面向?qū)ο蟪绦蛟O(shè)計(jì).中國(guó)鐵道出版社</p><p>  3、田淑清, C語(yǔ)言程序設(shè)計(jì),北京:高等教育出版社,2006年1月</p><p>  

47、4、David J.Kruglinski,Scot Wingo,George Shepherd,Visual C++6.0技術(shù)內(nèi)幕(第五版),希望圖書(shū)室譯,北京:北京希望電子出版社,2001 年1月</p><p><b>  源程序:</b></p><p>  #include <iostream></p><p>  #inc

48、lude <string></p><p>  #include <fstream></p><p>  #include <iomanip></p><p>  int a[90],b[90]; //定義全局?jǐn)?shù)組</p><p><

49、b>  int k=0;</b></p><p>  using namespace std;</p><p>  class CGobang //棋子類(lèi)</p><p><b>  {</b></p><p><b>

50、  private:</b></p><p>  char chSort; //棋子的類(lèi)別</p><p>  int nWin; //贏棋的次數(shù)</p><p>  int nLose; //輸棋的次

51、數(shù)</p><p>  static int nDraw; //平局次數(shù)</p><p><b>  public:</b></p><p>  static char achBoard[19][19]; //棋盤(pán)</p><p>  static int nSize;

52、 //棋盤(pán)的尺寸nSize*nSize</p><p>  CGobang(char chsort) //構(gòu)造函數(shù),決定一方棋子的類(lèi)別</p><p><b>  {</b></p><p>  chSort=chsort;</p><p>  nWin=n

53、Lose=nDraw=0;</p><p><b>  }</b></p><p>  friend void huiqi(); //悔棋</p><p>  static void savefile(); //將棋盤(pán)保存至文件</p><p>  static void

54、 readBoard(); //從文件中讀入棋盤(pán)</p><p>  void continute(); //接著上次的游戲玩</p><p>  void PlayTurn(void); //走一步棋</p><p>  int Judge(); //

55、判斷是否連成五子,是則返回1</p><p>  void Win(void); //贏棋</p><p>  void Lose(void); //輸棋</p><p>  static void Draw(void); //平局</p><p>  void

56、PrintInfo(void); //打印總體情況</p><p>  static void PrintBoard(void); //輸出棋盤(pán)</p><p>  static int GetFull(void); //判斷棋盤(pán)是否一滿(mǎn)</p><p>  static void InitialBoard(void); //

57、初始化棋盤(pán)</p><p><b>  };</b></p><p>  char CGobang::achBoard[19][19];</p><p>  int CGobang::nSize=0;</p><p>  int CGobang::nDraw=0;</p><p>  void C

58、Gobang::Draw()</p><p><b>  {</b></p><p>  cout<<"\n\n\t\t平局!\n\n";</p><p><b>  nDraw++;</b></p><p><b>  }</b></p&

59、gt;<p>  void CGobang::InitialBoard() //初始化棋盤(pán)</p><p><b>  {</b></p><p>  for(int i=0;i<nSize;i++)</p><p>  for(int j=0;j<nSize;j++)

60、</p><p>  achBoard[i][j]=' ';</p><p><b>  } </b></p><p>  void CGobang::PrintBoard() //輸出棋盤(pán)</p><p><b>  {</b>

61、;</p><p><b>  int i,j;</b></p><p>  cout<<endl;</p><p>  cout<<setw(5)<<endl;</p><p>  for(i=1;i<=nSize;i++)</p><p><b&

62、gt;  {</b></p><p>  cout<<setw(4)<<i;</p><p><b>  }</b></p><p>  cout<<endl;</p><p>  for(i=0;i<nSize;i++)</p><p>&l

63、t;b>  {</b></p><p>  cout<<setw(3)<<endl;</p><p>  cout<<i+1;</p><p>  for(j=0;j<nSize;j++)</p><p>  cout<<achBoard[i][j]<<&qu

64、ot; | ";</p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  }</b></p><p>  int CGobang::GetFull() //判斷棋盤(pán)

65、是否一滿(mǎn),若是返回1</p><p><b>  {</b></p><p>  for(int i=0;i<nSize;i++)</p><p>  for(int j=0;j<nSize;j++)</p><p>  if(achBoard[i][j]==' ')</p>&

66、lt;p><b>  return 0;</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  void CGobang::Win() //贏棋<

67、;/p><p><b>  {</b></p><p>  cout<<"\n\n\t\t"<<chSort<<"方獲勝!\n\n";</p><p><b>  nWin++;</b></p><p><b>  }

68、</b></p><p>  void CGobang::savefile() //將棋盤(pán)保存至文件</p><p><b>  {</b></p><p>  ofstream outfile("C++.txt",ios::out);</p

69、><p>  if(!outfile)</p><p>  {cerr<<"open file error!"<<endl;</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p>

70、  for(int i=0;i<nSize;i++)</p><p>  for(int j=0;j<nSize;j++)</p><p>  outfile.write((char *) &achBoard[i][j],sizeof(achBoard[i][j]));</p><p>  outfile.close();</p>

71、<p><b>  }</b></p><p>  void CGobang::Lose() //輸棋</p><p><b>  {</b></p><p><b>  nLose++;</b></p>

72、<p><b>  }</b></p><p>  void CGobang::PlayTurn(void) //走一步棋</p><p><b>  {</b></p><p>  int nRow,nCol;</p><p&

73、gt;  char choice1,choice2;</p><p><b>  do</b></p><p><b>  {</b></p><p>  cout<<"\t現(xiàn)在該"<<chSort<<"方下棋,請(qǐng)輸入棋盤(pán)坐標(biāo)(x,y):";<

74、;/p><p>  cin>>nRow>>nCol;</p><p>  if(nRow>nSize||nCol>nSize)</p><p>  cout<<"\t輸入的坐標(biāo)越界,x與y的范圍應(yīng)小于等于"<<nSize<<",請(qǐng)重新輸入\n";</p&

75、gt;<p><b>  else</b></p><p>  if(nRow>0&&nCol>0&&achBoard[nRow-1][nCol-1]!=' ')</p><p>  cout<<"\t棋盤(pán)("<<nRow<<",

76、"<<nCol<<")處已有棋子,請(qǐng)重新輸入\n"; </p><p>  else if(nRow==-1)</p><p><b>  huiqi();</b></p><p>  else if(nRow==0&&nCol==0)</p><p&g

77、t;<b>  {</b></p><p>  cout<<"\t確認(rèn)你想結(jié)束游戲嗎(y,n)?";</p><p>  cin.get();</p><p>  cin>>choice1;</p><p>  if(choice1=='y'||choice1=

78、='Y')</p><p><b>  {</b></p><p>  cout<<"\t是否保存(y,n)?:";</p><p>  cin.get();</p><p>  cin>>choice2;</p><p>  if(ch

79、oice2=='y'||choice2=='Y')</p><p><b>  {</b></p><p>  CGobang::savefile();</p><p>  cout<<"\t保存成功,歡迎下次再玩!\n";</p><p><b>

80、;  exit(1);</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"\t游戲結(jié)束,歡迎再次使用五子棋游戲!";

81、</p><p>  cout<<endl;</p><p><b>  exit(0);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>&

82、lt;/p><p><b>  else {</b></p><p>  achBoard[nRow-1][nCol-1]=chSort;</p><p>  a[k]=nRow-1;</p><p>  b[k]=nCol-1;</p><p><b>  k++;</b>&l

83、t;/p><p><b>  break;</b></p><p><b>  }</b></p><p>  }while(1);</p><p><b>  }</b></p><p>  int CGobang::Judge()

84、 //判斷是否連成五子,是則返回1</p><p><b>  {</b></p><p><b>  int i,j;</b></p><p>  for(i=0;i<nSize;i++)</p><p>  for(j=0;j<nSize;j++)</

85、p><p><b>  {</b></p><p>  if(achBoard[i][j]==chSort)</p><p><b>  {</b></p><p>  if(j+4<nSize)</p><p><b>  {</b></p&g

86、t;<p>  if(achBoard[i][j+1]==chSort&&achBoard[i][j+2]==chSort&&achBoard[i][j+3]==chSort&&achBoard[i][j+4]==chSort)</p><p><b>  return 1;</b></p><p><

87、;b>  }</b></p><p>  if(i+4<nSize)</p><p><b>  {</b></p><p>  if(achBoard[i+1][j]==chSort&&achBoard[i+2][j]==chSort&&achBoard[i+3][j]==chSort&

88、amp;&achBoard[i+4][j]==chSort)</p><p><b>  return 1;</b></p><p><b>  }</b></p><p>  if(i+4<nSize&&j+4<nSize)</p><p><b> 

89、 {</b></p><p>  if(achBoard[i+1][j+1]==chSort&&achBoard[i+2][j+2]==chSort&&achBoard[i+3][j+3]==chSort&&achBoard[i+4][j+4]==chSort)</p><p><b>  return 1;</b

90、></p><p><b>  }</b></p><p>  if(i-4>0&&j+4<nSize)</p><p><b>  {</b></p><p>  if(achBoard[i-1][j+1]==chSort&&achBoard[i-

91、2][j+2]==chSort&&achBoard[i-3][j+3]==chSort&&achBoard[i-4][j+4]==chSort)</p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  }</

92、b></p><p><b>  }</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p>  void CGobang::PrintInfo(void)

93、 //打印總體情況</p><p><b>  {</b></p><p>  cout<<"Size"<<chSort<<"方共計(jì)贏"<<nWin<<"局,輸"<<nLose<<"局,平"

94、;<<nDraw<<"局。"<<endl;</p><p><b>  }</b></p><p>  void CGobang::readBoard() //以二進(jìn)制形式從文件中讀出棋盤(pán)</p><p><b>  {</

95、b></p><p>  ifstream infile("C++.txt",ios::in);</p><p>  if(!infile)</p><p><b>  {</b></p><p>  cerr<<"open file eror!"<<

96、endl;</p><p><b>  exit(1);</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { </b></p><p>  for(int

97、i=0;i<nSize;i++)</p><p>  for(int j=0;j<nSize;j++)</p><p>  infile.read((char *) &achBoard[i][j],sizeof(achBoard[i][j]));</p><p>  infile.close();</p><p><

98、b>  }</b></p><p><b>  }</b></p><p>  void huiqi() //悔棋 </p><p><b>  {</b></p><p><b&

99、gt;  k--;</b></p><p>  CGobang::achBoard[a[k]][b[k]]=' ';</p><p><b>  k--;</b></p><p>  CGobang::achBoard[a[k]][b[k]]=' ';</p><p>  CG

100、obang::PrintBoard();</p><p><b>  }</b></p><p>  void PrintRule(void) //打印游戲規(guī)則</p><p><b>  {</b></p><p>  cout

101、<<"\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n\n";</p><p>  cout<<"\t\t歡迎使用五子連珠游戲!"<<endl<<endl;</p><p>  cout<<"\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n\n";</p>

102、<p>  cout<<"\t游戲規(guī)則:"<<endl;</p><p>  cout<<"\t1.每1步輸入要下棋子的格子的x,y坐標(biāo),按Enter鍵\n";</p><p>  cout<<"\t2.有1方首先5個(gè)棋子連成一線(xiàn)即判獲勝\n";</p>

103、<p>  cout<<"\t3.當(dāng)旗子布滿(mǎn)棋盤(pán)但仍無(wú)獲勝方即為平局\n";</p><p>  cout<<"\t4.一局結(jié)束后,若想繼續(xù)按Y鍵,若退出則按其他鍵\n";</p><p>  cout<<"\t5.若想中途退出游戲,請(qǐng)輸入(0,0),再按照提示保存游戲\n";<

104、/p><p>  cout<<"\t6.悔棋請(qǐng)輸入(-1,0)\n";</p><p>  cout<<"\t6.X方先行\(zhòng)n";</p><p>  cout<<"\n\n\t\t請(qǐng)按任意鍵開(kāi)始下棋!\n\n";</p><p><b> 

105、 }</b></p><p>  int JudgePlay(CGobang &SideX,CGobang &SideO) //每下一步要進(jìn)行輸贏的判斷,有贏的則返回1 </p><p><b>  {</b></p><p>  if(SideX.Judge())

106、 //X方獲勝</p><p><b>  {</b></p><p>  SideX.Win();</p><p>  SideO.Lose();</p><p><b>  return 1;</b></p><p><b>

107、;  }</b></p><p>  else if(SideO.Judge()) //O方獲勝</p><p><b>  {</b></p><p>  SideO.Win();</p><p>  SideX.Lose();</p>

108、;<p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  return 0;</b></p><p><b>  }</

109、b></p><p>  void Play(CGobang &SideX,CGobang &SideO) //開(kāi)始一局游戲</p><p><b>  {</b></p><p><b>  while(1)</b></p><p><b&g

110、t;  {</b></p><p>  system("cls");</p><p>  cout<<"\t*************************************************\n";</p><p>  cout<<"\t\t※.悔棋請(qǐng)輸入(-1,0

111、)\n";</p><p>  cout<<"\t\t※.中途退出請(qǐng)輸出(0,0),并根據(jù)提示保存\n";</p><p>  cout<<"\t*************************************************\n";</p><p>  CGobang::P

112、rintBoard(); //輸出棋盤(pán)</p><p>  SideX.PlayTurn(); //X方下棋</p><p>  if(JudgePlay(SideX,SideO)) //判斷輸贏</

113、p><p><b>  break;</b></p><p>  if(CGobang::GetFull()) //判斷是否平局</p><p><b>  {</b></p><p>  CGobang::Draw();</p&g

114、t;<p><b>  break;</b></p><p><b>  }</b></p><p>  system("cls"); //清屏</p><p>  cout<<"\t

115、*************************************************\n";</p><p>  cout<<"\t\t※.悔棋請(qǐng)輸入(-1,0)\n";</p><p>  cout<<"\t\t※.中途退出請(qǐng)輸出(0,0),并根據(jù)提示保存\n";</p><p&g

116、t;  cout<<"\t*************************************************\n";</p><p>  CGobang::PrintBoard(); //輸出棋盤(pán)</p><p>  SideO.PlayTurn();

117、 //O方下棋</p><p>  if(JudgePlay(SideX,SideO)) //判斷輸贏</p><p><b>  break;</b></p><p>  if(CGobang::GetFull())

118、 //判斷是否平局</p><p><b>  {</b></p><p>  CGobang::Draw();</p><p><b>  break;</b></p><p><b>  }</b></p>

119、<p><b>  }</b></p><p><b>  }</b></p><p>  void continute() //接著上次的游戲玩</p><p><b>  { </b></p>&l

120、t;p><b>  char str;</b></p><p>  cin.get();</p><p>  cout<<"\t你是否接著玩上一次的游戲(y/n)?:";</p><p><b>  cin>>str;</b></p><p>  i

121、f(str=='Y'||str=='y')</p><p>  CGobang::readBoard();</p><p><b>  else </b></p><p>  cout<<"\t請(qǐng)玩新游戲~~~~~\n";</p><p><b&g

122、t;  }</b></p><p>  int main(void) </p><p><b>  {</b></p><p>  CGobang SideX('@'),SideO('O'); //定義兩個(gè)旗子類(lèi)對(duì)象,分別代表X方與O方</p

123、><p>  system("cls");</p><p>  PrintRule();</p><p>  cin.get();</p><p>  string strChoice;</p><p><b>  do</b></p><p><b&

124、gt;  {</b></p><p>  cout<<"請(qǐng)選擇棋盤(pán)大小(10~19):";</p><p>  cin>>CGobang::nSize;</p><p>  cout<<endl;</p><p>  if(CGobang::nSize>19||CGob

125、ang::nSize<10)</p><p><b>  {</b></p><p>  cout<<"請(qǐng)重新輸入:";</p><p>  cin>>CGobang::nSize;</p><p>  cout<<endl;</p><p

126、><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  system("PAUSE");</p><p>  system("cls");</p>

127、;<p>  CGobang::InitialBoard(); //初始化棋盤(pán)</p><p>  continute();</p><p>  Play(SideX,SideO); //開(kāi)始下一局棋</p><p>  cout<&l

128、t;"是否繼續(xù)(Y/N)? ";</p><p>  cin>>strChoice;</p><p><b>  }</b></p><p>  }while(strChoice=="Y"||strChoice=="y");</p><p>  Si

129、deX.PrintInfo();</p><p>  SideO.PrintInfo();</p><p>  cout<<"\n\n\t歡迎再次使用五子連珠游戲!"<<endl<<endl;</p><p><b>  return 0;</b></p><p>

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論