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

下載本文檔

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

文檔簡介

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

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

3、求······················2</p><p> ?。赫n程設(shè)計任務(wù)內(nèi)容·········

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

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

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

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

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

9、#183;····5</p><p> ?。撼绦蜻\行環(huán)境說明··························10

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

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

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

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

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

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

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

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

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

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

20、;<p>  3.2五子棋對弈系統(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 軟件中實現(xiàn)各項功能的函數(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;; //棋子的類別</p><p>  Int nWin ////贏棋的次數(shù)</p><p><b>  類的使用:</b></p><p>  class CGobang<

24、/p><p><b>  {private:</b></p><p>  char chSort; //棋子的類別</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>&

26、lt;p>  static int nSize; //棋盤的尺寸nSize*nSize</p><p>  CGobang(char chsort) //構(gòu)造函數(shù),決定一方棋子的類別</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&

28、gt;<p>  static void readBoard(); //從文件中讀入棋盤</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><p>  static int GetFull(void); //判斷棋盤是否一滿</p><p>  static vo

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

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

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

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

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.重置棋盤模塊</b></p><p>  在每局游戲開始的時候都需要調(diào)用這個函數(shù)InitialBoa

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

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

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

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

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

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

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

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

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

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

47、4、David J.Kruglinski,Scot Wingo,George Shepherd,Visual C++6.0技術(shù)內(nèi)幕(第五版),希望圖書室譯,北京:北京希望電子出版社,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 //棋子類</p><p><b>  {</b></p><p><b>

50、  private:</b></p><p>  char chSort; //棋子的類別</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><p>  static int nSize;

52、 //棋盤的尺寸nSize*nSize</p><p>  CGobang(char chsort) //構(gòu)造函數(shù),決定一方棋子的類別</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><p>  static void

54、 readBoard(); //從文件中讀入棋盤</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><p>  static int GetFull(void); //判斷棋盤是否一滿</p><p>  static void InitialBoard(void); //

57、初始化棋盤</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><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><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() //判斷棋盤

65、是否一滿,若是返回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><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<<"方下棋,請輸入棋盤坐標(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<<",請重新輸入\n";</p&

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

76、"<<nCol<<")處已有棋子,請重新輸入\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<<"方共計贏"<<nWin<<"局,輸"<<nLose<<"局,平"

94、;<<nDraw<<"局。"<<endl;</p><p><b>  }</b></p><p>  void CGobang::readBoard() //以二進(jì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個棋子連成一線即判獲勝\n";</p>

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

104、/p><p>  cout<<"\t6.悔棋請輸入(-1,0)\n";</p><p>  cout<<"\t6.X方先行\(zhòng)n";</p><p>  cout<<"\n\n\t\t請按任意鍵開始下棋!\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) //開始一局游戲</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※.悔棋請輸入(-1,0

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

112、rintBoard(); //輸出棋盤</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※.悔棋請輸入(-1,0)\n";</p><p>  cout<<"\t\t※.中途退出請輸出(0,0),并根據(jù)提示保存\n";</p><p&g

116、t;  cout<<"\t*************************************************\n";</p><p>  CGobang::PrintBoard(); //輸出棋盤</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請玩新游戲~~~~~\n";</p><p><b&g

122、t;  }</b></p><p>  int main(void) </p><p><b>  {</b></p><p>  CGobang SideX('@'),SideO('O'); //定義兩個旗子類對象,分別代表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<<"請選擇棋盤大小(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<<"請重新輸入:";</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><p>  continute();</p><p>  Play(SideX,SideO); //開始下一局棋</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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論