2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  德州學(xué)院信息管理學(xué)院</p><p><b>  課程設(shè)計(jì)報(bào)告</b></p><p>  實(shí)習(xí)名稱 自主學(xué)習(xí)能力 </p><p>  設(shè)計(jì)題目 五子棋小游戲 </p><p>  實(shí)習(xí)時(shí)間 2015.04.01--2014.04

2、.30 </p><p>  專業(yè)班級 14級計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  指導(dǎo)老師 </p><p>  教學(xué)單位 </p><p><b>  小組分工情況:</b></p

3、><p>  二〇一四年五月二十五日</p><p><b>  目 錄</b></p><p><b>  1 實(shí)習(xí)目的2</b></p><p><b>  2 需求分析2</b></p><p><b>  3 概要設(shè)計(jì)2</b&

4、gt;</p><p>  3.1 游戲背景2</p><p>  3.2 游戲玩法3</p><p>  3.3 程序需求分析3</p><p>  3.4 開發(fā)平臺3</p><p>  3.5程序流程設(shè)計(jì)4</p><p>  4 棋盤與棋子的生成5</p>&l

5、t;p><b>  4.1引言5</b></p><p>  4.2 程序語句錯(cuò)誤!未定義書簽。</p><p>  5 棋子移動與落子6</p><p><b>  5.1引言6</b></p><p><b>  5.2程序語句6</b></p>

6、<p><b>  6 勝負(fù)判斷16</b></p><p>  6.1引言錯(cuò)誤!未定義書簽。</p><p>  6.2程序設(shè)計(jì)17</p><p><b>  7 調(diào)整改進(jìn)18</b></p><p><b>  7.1引言18</b></p&

7、gt;<p>  7.2程序功能及調(diào)整18</p><p>  7.3總程序語句19</p><p><b>  8 總結(jié)28</b></p><p><b>  參考文獻(xiàn):29</b></p><p>  五子棋小游戲的設(shè)計(jì)與實(shí)現(xiàn)</p><p>&l

8、t;b>  1 實(shí)習(xí)目的</b></p><p> ?。?)熟練的運(yùn)用計(jì)算機(jī)語言,培養(yǎng)了對計(jì)算機(jī)編程的熱愛程度.</p><p>  (2)學(xué)會怎樣用c語言做一個(gè)完整的系統(tǒng)。</p><p>  (3)掌握c語言的編輯,鏈接,運(yùn)行等環(huán)節(jié)。</p><p>  (4)掌握c語言中鏈表的建立,插入,刪除,保存節(jié)點(diǎn)。</p&

9、gt;<p> ?。?)熟練掌握for while do-while循環(huán)語句的使用。</p><p> ?。?)熟練掌握函數(shù)的定義、說明、參數(shù)傳遞及嵌套和遞歸調(diào)用方法。</p><p>  (7)提高遇到困難解決困難的能力。</p><p> ?。?)提高書寫代碼的速度與正確率。</p><p> ?。?)獨(dú)立實(shí)踐,將課本上的理

10、論知識和實(shí)際有機(jī)的結(jié)合起來,鍛煉學(xué)生的分析解決實(shí)際問題的能力,提高學(xué)生適應(yīng)實(shí)際,實(shí)踐編程的能力。</p><p><b>  2 需求分析</b></p><p>  目前,隨著計(jì)算機(jī)網(wǎng)絡(luò)的的發(fā)展,PK已經(jīng)成為現(xiàn)在人生活的一部分,人們 以不同的方式通過網(wǎng)絡(luò)來娛樂,休閑。以計(jì)算機(jī)技術(shù)和網(wǎng)絡(luò)技術(shù)為核心的現(xiàn)代網(wǎng)絡(luò)技術(shù)已經(jīng)在現(xiàn)實(shí)生活和生產(chǎn)中得到了廣泛的使用,休閑類網(wǎng)絡(luò)游戲集趣

11、味性,娛樂性,互動性和益智性于一體,已經(jīng)成為多數(shù)人群的休閑方式,也為多數(shù)人所喜好。當(dāng)然,為了滿足沒有網(wǎng)絡(luò)同樣能娛樂的要求,許多小游戲做成了單機(jī)和網(wǎng)絡(luò)的雙功能。</p><p><b>  3 概要設(shè)計(jì)</b></p><p><b>  3.1 游戲背景</b></p><p>  五子棋不僅能增強(qiáng)思維能力,提高智力,而且

12、富含哲理,有助于修身養(yǎng)性。五子棋既有現(xiàn)代休閑的明顯特征“短、平、快”,又有古典哲學(xué)的高深學(xué)問“陰陽易理”;它既有簡單易學(xué)的特性,為人民群眾所喜聞樂見,又有深奧的技巧和高水平的國際性比賽;它的棋文化源淵流長,具有東方的神秘和西方的直觀;既有“場”的概念,亦有“點(diǎn)”的連接。它是中西文化的交流點(diǎn),是古今哲理的結(jié)晶。</p><p><b>  3.2 游戲玩法</b></p><

13、;p>  五子棋是一種兩人對弈的純策略 型棋類游戲,五子棋棋子分為黑白兩色,棋盤為19×19,棋子放置于棋盤線交叉點(diǎn)上或網(wǎng)格中。兩人對局,各執(zhí)一色,輪流下一子,先將橫、豎或斜線的5個(gè)同色棋子連成不間斷的一排者為勝。</p><p><b>  3.3程序需求分析</b></p><p>  根據(jù)功能需求,將程序分為圖形顯示、玩家控制、勝負(fù)判斷和系統(tǒng)幫助

14、四個(gè)模塊,以下分析各模塊的需求。</p><p>  圖形顯示模塊:程序開始運(yùn)行時(shí),給出歡迎界面;游戲開始后要求生成19×19的棋盤圖像,并在棋盤上方提示 當(dāng)前落子方棋子顏色,游戲進(jìn)行過程中,要求實(shí)時(shí)顯示棋盤上已落下的棋子;分出勝負(fù)后,要求給出游戲結(jié)束畫面。</p><p>  玩家控制模塊:程序開始時(shí),需玩家確定而后開始游戲;游戲過程中,兩個(gè)玩家通過不同的按鍵移動光標(biāo),選擇落子

15、;游戲結(jié)束時(shí),有玩家選擇是否開始新棋局。</p><p>  勝負(fù)判斷模塊:實(shí)時(shí)監(jiān)測棋盤上棋子,一旦某一色棋子出現(xiàn)五子連線,終止游戲程序,彈出該色玩家勝出界面。</p><p>  系統(tǒng)幫助模塊:彈出窗口,窗口中 顯示幫助信息,包括棋子移動與落子按 鍵介紹,獲勝方式等。</p><p>  除以上主要模塊之外,程序中還可以添加其他輔助程序,如中途退出等。程序的關(guān)鍵在

16、于勝負(fù)判斷模塊,該模塊的設(shè)計(jì)直接關(guān)系到程序的運(yùn)行速率和運(yùn)行結(jié)果的正確與否。</p><p><b>  3.4 開發(fā)平臺</b></p><p>  系統(tǒng): Windows 7 旗艦版(64位)</p><p>  處理器: AMD A8-5545M APU with Radeon(tm) HD Graphics 1.70GHz</p&

17、gt;<p>  內(nèi)存: 4.00 GB</p><p>  程序開發(fā)軟件:Microsoft Visual C++ 6.0</p><p>  文檔編寫:Microsoft Word 2010</p><p>  3.5 程序流程設(shè)計(jì)</p><p>  根據(jù)程序需求分析結(jié)果,可以得出程序的總體結(jié)構(gòu)圖如圖1: </p

18、><p>  圖1 程序總體流程圖圖</p><p>  程序總體流程圖如圖2:</p><p>  圖2 程序總體設(shè)計(jì)圖</p><p>  4.棋盤與棋子的生成</p><p><b>  4.1引言</b></p><p>  根據(jù)五子棋的基本規(guī)則,棋盤采用19×

19、;19方格棋盤,棋子為黑白二色圓形棋子;游戲進(jìn)行過程中棋盤始終顯示,落子后棋子在落子處始終顯示;棋盤在程序結(jié)束時(shí)消失,已落下的棋子在 程序結(jié)束時(shí)或開始新游戲是消失。</p><p><b>  4.2程序語句</b></p><p>  棋盤的顯示由游戲開始與結(jié)束部分控制,棋子的顯示與保留由玩家操控部分決定。</p><p>  board(

20、) /*畫棋盤*/ </p><p>  { setfillstyle(1,6); </p><p>  bar(120,50,520,450); </p><p>  setfillstyle(1,14); </p><p>  bar(540,50,620,150); </p><p>  b

21、ar(20,50,100,150); </p><p>  for(k=0;k<19;k++) </p><p>  {moveto(140+20*k,70);linerel(0,360); </p><p>  moveto(140,70+20*k);linerel(360,0); </p><p>&l

22、t;b>  } </b></p><p>  moveto(240,170); setcolor(5); </p><p>  settextstyle(3,0,4); </p><p>  outtextxy(50,60,"P1"); </p><p>  outtextxy(5

23、60,60,"P2"); </p><p><b>  } </b></p><p>  white() /*畫白棋*/ </p><p><b>  { </b></p><p>  setcolor(7); </p><p>  setfillst

24、yle(1,7); </p><p>  circle(getx(),gety(),9); </p><p>  fill(getx(),gety(),7); </p><p><b>  } </b></p><p>  black() /*畫黑棋*/ </p><p><b>

25、;  { </b></p><p>  setcolor(0); </p><p>  setfillstyle(1,0); </p><p>  circle(getx(),gety(),9); </p><p>  fill(getx(),gety(),0); </p><p><b> 

26、 }</b></p><p><b>  5棋子移動與落子</b></p><p><b>  5.1引言</b></p><p>  棋子的移動與落子有鍵盤上按鍵控制,本程序選取1P按鍵為W、S、A、D和空格鍵,2P按鍵為↑、↓、←、→和回車鍵,分別代表上移、下移、左移、右移光標(biāo)和落子。在光標(biāo)移動的過程中,光

27、標(biāo)按照玩家按鍵移動;在玩家按下落子按鍵后,程序自動調(diào)用棋子顯示子程序和判斷勝負(fù)子程序。1P、2P的落子后,程序會為落子處的數(shù)組元素賦一個(gè)特定值,用于判定勝負(fù)。</p><p><b>  5.2程序語句</b></p><p>  void p1move() /*玩家1的移動*/ </p><p><b>  {</b&

28、gt;</p><p>  switch(bioskey(0))</p><p><b>  {</b></p><p>  int sum=0;</p><p>  case ESC: {closegraph();</p><p>  exit(0);}/*如果按鍵為ESC就退出游戲</p

29、><p><b>  */</b></p><p>  case SP:/*落子*/</p><p>  if(a[X][Y]==6)</p><p><b>  {</b></p><p><b>  p1del();</b></p><

30、;p>  p2turn(); </p><p>  a[X][Y]=0; </p><p><b>  sum++; </b></p><p><b>  white();</b></p><p><b>  p2move();</b></p><p&

31、gt;  if(sum>=5)</p><p><b>  win();</b></p><p><b>  }</b></p><p>  else p1move();</p><p>  case A: /*向左移*/ </p><p>  if(a[

32、X][Y]==0) </p><p><b>  {</b></p><p>  if(getx()==140)</p><p>  moveto(520,gety()); </p><p>  moverel(-20,0);</p><p><b>  white();</b&g

33、t;</p><p><b>  }</b></p><p>  else if(a[X][Y]==1)</p><p><b>  { </b></p><p>  if(getx()==140) </p><p>  moveto(520,gety()); </

34、p><p>  black();moverel(-20,0);</p><p><b>  white(); </b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b

35、></p><p>  if(getx()==140) </p><p>  moveto(520,gety());</p><p>  moverel(-20,0);</p><p><b>  white();</b></p><p><b>  }</b><

36、;/p><p><b>  p1move();</b></p><p>  case D: /*向右移*/</p><p>  if(a[X][Y]==0) </p><p><b>  {</b></p><p>  if(getx()==500)</p>&

37、lt;p>  moveto(120,gety());</p><p>  moverel(20,0);</p><p><b>  white();}</b></p><p>  else if(a[X][Y]==1)</p><p><b>  { </b></p><

38、p>  if(getx()==500)</p><p>  moveto(120,gety());</p><p>  black();moverel(20,0);</p><p><b>  white(); </b></p><p>  } </p><p>

39、;<b>  else </b></p><p><b>  { </b></p><p>  if(getx()==500) </p><p>  moveto(120,gety()) ;</p><p>  moverel(20,0);</p><p><

40、b>  white(); </b></p><p><b>  } </b></p><p><b>  p1move();</b></p><p>  case W: /*向上移*/</p><p>  if(a[X][Y]==0) </p><p>

41、;<b>  {</b></p><p>  if(gety()==70)</p><p>  moveto(getx(),450);</p><p>  moverel(0,-20);</p><p><b>  white(); </b></p><p><b>

42、;  }</b></p><p>  else if(a[X][Y]==1) </p><p><b>  { </b></p><p>  if(gety()==70)</p><p>  moveto(getx(),450);</p><p>  black(); <

43、/p><p>  moverel(0,-20);</p><p><b>  white();</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b>&l

44、t;/p><p>  if(gety()==70) </p><p>  moveto(getx(),450);</p><p>  moverel(0,-20);</p><p><b>  white(); </b></p><p><b>  } </b></p>

45、;<p><b>  p1move();</b></p><p>  case S: /*向下移*/ </p><p>  if(a[X][Y]==0) </p><p><b>  { </b></p><p>  if(gety()==430) </p><p

46、>  moveto(getx(),50);</p><p>  moverel(0,20);</p><p><b>  white(); </b></p><p><b>  }</b></p><p>  else if(a[X][Y]==1)</p><p>&l

47、t;b>  { </b></p><p>  if(gety()==430)</p><p>  moveto(getx(),50);</p><p><b>  black(); </b></p><p>  moverel(0,20); </p><p><b> 

48、 white(); </b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {</b></p><p>  if(gety()==430)</p><p>  movet

49、o(getx(),50); </p><p>  moverel(0,20); </p><p><b>  white(); </b></p><p><b>  } </b></p><p><b>  p1move();</b></p><p>&

50、lt;b>  default:</b></p><p><b>  p1move();</b></p><p><b>  }</b></p><p><b>  } </b></p><p>  void p2move() /*玩家2的移動*/</p

51、><p><b>  { </b></p><p>  switch(bioskey(0)) /*如果按鍵為ESC就退出游戲*/</p><p><b>  {</b></p><p>  int sum=0;</p><p>  case ESC: {closegraph(

52、); exit(0);}</p><p>  case ENTER: /*落子*/</p><p>  if(a[X][Y]==6)</p><p><b>  {</b></p><p><b>  p2del();</b></p><p><b>  p1tu

53、rn();</b></p><p>  a[X][Y]=1;</p><p><b>  sum++; </b></p><p><b>  black(); </b></p><p><b>  p1move();</b></p><p>

54、  if(sum>=5)</p><p><b>  win();</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  p2move();</b></p><p

55、>  case LEFT: /*向左移*/</p><p>  if(a[X][Y]==1)</p><p><b>  {</b></p><p>  if(getx()==140)</p><p>  moveto(520, gety());</p><p>  moverel(-20,

56、0);</p><p><b>  black();</b></p><p><b>  }</b></p><p>  else if(a[X][Y]==0)</p><p><b>  {</b></p><p>  if(getx()==140)&

57、lt;/p><p>  moveto(520,gety());</p><p>  if(getx()==140)</p><p>  moveto(500,gety());</p><p>  white(); </p><p>  moverel(-20,0);</p><p><b&g

58、t;  black();</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(getx()==140)</p><p>  movet

59、o(520,gety());</p><p>  moverel(-20,0);</p><p><b>  black(); </b></p><p><b>  }</b></p><p><b>  p2move();</b></p><p>  

60、case RIGHT: /*向右移*/ </p><p>  if(a[X][Y]==1) </p><p><b>  {</b></p><p>  if(getx()==500)</p><p>  moveto(120,gety());</p><p>  moverel(20,0); &

61、lt;/p><p><b>  black(); </b></p><p><b>  }</b></p><p>  else if(a[X][Y]==0)</p><p><b>  {</b></p><p>  if(getx()==500)<

62、/p><p>  moveto(120,gety()); </p><p><b>  white(); </b></p><p>  moverel(20,0);</p><p><b>  black(); </b></p><p><b>  } </b&

63、gt;</p><p><b>  else </b></p><p><b>  {</b></p><p>  if(getx()==500)</p><p>  moveto(120,gety());</p><p>  moverel(20,0);</p>

64、<p><b>  black();</b></p><p><b>  }</b></p><p><b>  p2move();</b></p><p>  case UP: /*向上移*/</p><p>  if(a[X][Y]==1) </p&

65、gt;<p><b>  {</b></p><p>  if(gety()==70) </p><p>  moveto(getx(),450);</p><p>  moverel(0,-20);</p><p><b>  black(); </b></p><

66、;p><b>  }</b></p><p>  else if(a[X][Y]==0)</p><p><b>  { </b></p><p>  if(gety()==70)</p><p>  moveto(getx(),450);</p><p><b

67、>  white();</b></p><p>  moverel(0,-20); </p><p><b>  black();</b></p><p><b>  }</b></p><p><b>  else</b></p><p&

68、gt;<b>  {</b></p><p>  if(gety()==70)</p><p>  moveto(getx(),450);</p><p>  moverel(0,-20);</p><p><b>  black(); </b></p><p><b&

69、gt;  }</b></p><p>  p2move(); </p><p>  case DOWN: /*向下移*/</p><p>  if(a[X][Y]==1)</p><p><b>  { </b></p><p>  if(gety()==430)</p>

70、<p>  moveto(getx(),50);</p><p>  moverel(0,20); </p><p><b>  black();</b></p><p><b>  }</b></p><p>  else if(a[X][Y]==0)</p><

71、p><b>  { </b></p><p>  if(gety()==430)</p><p>  moveto(getx(),50);</p><p><b>  white();</b></p><p>  moverel(0,20); </p><p><

72、;b>  black();</b></p><p><b>  } </b></p><p><b>  else</b></p><p><b>  { </b></p><p>  if(gety()==430)</p><p> 

73、 moveto(getx(),50); </p><p>  moverel(0,20); </p><p><b>  black();</b></p><p><b>  } </b></p><p>  p2move(); </p><p>  default: p2

74、move();</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  6勝負(fù)判斷</b></p><p><b>  6.1引言</b></p><p>  勝負(fù)判斷模塊是程序的

75、關(guān)鍵,該模塊的設(shè)計(jì)直接關(guān)系到程序的運(yùn)行速率和運(yùn)行結(jié)果的正確與否。</p><p>  本函數(shù)根據(jù)每次落子的位置,分別向上、下、左、右、左上、左下、右上、右下八個(gè) 方向判斷是否有相同顏色的棋子連成五子,如果成立,游戲就結(jié)束,并顯示提示信息,否則繼續(xù)落子。</p><p>  以下簡析本程序流程:如表1所示,令當(dāng)前落子點(diǎn)坐標(biāo)為(X,Y),表中 i=X-4, j=Y-4,由獲勝條件可以知,通過

76、判斷(X,Y)上、下、左、右、斜上、斜下八個(gè)方向上是否有連續(xù)的5個(gè)子即可得出是否獲勝結(jié)果。在游戲開始時(shí),將棋盤初始化,即將棋盤抽象為一個(gè)19*19的數(shù)組,數(shù)組中每個(gè)元素設(shè)為某一指定初始值(如8)。1P落子時(shí),將數(shù)組內(nèi)相應(yīng)坐標(biāo)處元素賦值為0;2P落子時(shí),將數(shù)組內(nèi)相應(yīng)坐標(biāo)處元素賦值為1。當(dāng)(X,Y) 上、下、左、右、斜上、斜下八個(gè)方向某5個(gè)連續(xù)的子所對應(yīng)的數(shù)組中元素之和等于0時(shí),1P獲勝;當(dāng)(X,Y) 上、下、左、右、斜上、斜下八個(gè)方向某5

77、個(gè)連續(xù)的子所對應(yīng)的數(shù)組中元素之和等于5時(shí),2P獲勝。棋盤上的所有格子都被占滿時(shí),必有181個(gè)1P棋子和180個(gè)2P棋子,此時(shí)對應(yīng)數(shù)組中所有項(xiàng)之和為180,并且游戲過程中對應(yīng)數(shù)組中所有項(xiàng)之和只可能在這種狀況下為180,所以可以用這一條件判斷是否和棋。</p><p><b>  表1 勝負(fù)判斷表</b></p><p>  為減少程序的運(yùn)算,還可以將某些特殊情況排除在外

78、。當(dāng)落子數(shù)不大于8時(shí),既不用判斷勝負(fù),也不用判斷和棋與否,這部分功能在第二章移動與落子程序中實(shí)現(xiàn)。此外,還可以通過對落子次數(shù)的統(tǒng)計(jì)判斷是否滿足和棋條件,從而減少大量運(yùn)算,即當(dāng)判斷177次勝負(fù)后出現(xiàn)和棋。</p><p><b>  6.2程序設(shè)計(jì)</b></p><p>  void win() /*判斷輸贏*/ </p><p><b

79、>  {</b></p><p>  int sum1,sum2,sum3,sum4,sum=1,n,i,j;</p><p>  for(i=X-4,j=Y-4,n=0;i<=X,j<=Y;i++,j++,n-=2)</p><p><b>  { </b></p><p>  sum1

80、=a[i][Y]+a[i+1][Y]+a[i+2][Y]+a[i+3][Y]+a[i+4][Y];</p><p>  sum2=a[i][j]+a[i+1][j+1]+a[i+2][j+2]+a[i+3][j+3]+a[i+4][j+4];</p><p>  sum3=a[X][j]+a[X][j+1]+a[X][j+2]+a[X][j+3]+a[X][j+4];</p>

81、<p>  sum4=a[i][j+8+n]+a[i+1][j+7+n]+a[i+2][j+6+n]+a[i+3][j+5+n]+a[i+4][j+4+n];</p><p>  if(sum1==5||sum2==5||sum3==5||sum4==5)</p><p><b>  p2win(); </b></p><p>&l

82、t;b>  if</b></p><p>  (sum1==0||sum2==0||sum3==0||sum4==0)</p><p>  p1win(); } </p><p><b>  sum++ </b></p><p>  if(sum==177)</p><p>&l

83、t;b>  heqi(); </b></p><p><b>  }</b></p><p><b>  7調(diào)整改進(jìn)</b></p><p><b>  7.1引言</b></p><p>  前6章分別論述了五子棋C語言程序中的四大主要模塊,但要生成可執(zhí)行的

84、程序,則還需將這些模塊有機(jī)地結(jié)合起來。在結(jié)合的過程中,需要綜合運(yùn) 用函數(shù)調(diào)用、函數(shù)間書序傳遞和全局變量等知識。</p><p>  7.2程序功能及調(diào)整</p><p>  為滿足實(shí)際操作需求,增加程序的兼容性與穩(wěn)定性,在編寫可執(zhí)行程序的過程中,必須對原有各功能模塊進(jìn)行整合并添加或調(diào)整部分功能。</p><p>  為方便玩家使用本程序,在程序中增加了“悔棋”、“認(rèn)

85、輸”和“退出”功能,玩家可以通過在游戲構(gòu)成中輸入相關(guān)指令實(shí)現(xiàn)這些功能,具體語句見附錄。 </p><p>  為增強(qiáng)程序的兼容性和實(shí)用性,在最終的可執(zhí)行程序中還對原有模塊進(jìn)行了其他修改。</p><p>  在調(diào)試的過程中,發(fā)現(xiàn)bios.h 和graphics.h兩個(gè)頭文件只有在Turbo C的編譯環(huán)境下才能順利執(zhí)行,因此,使用bios.h和graphics.h的程序兼容性不高,因此,舍

86、棄使用這兩個(gè)頭文件的圖像顯示模塊,轉(zhuǎn)而使用具有較高兼容性的全屏打印刷新顯示塊。后者雖然在視覺效果上不如前者,然而它可以在任何Windows系統(tǒng)下工作,而這比視覺效果重要得多。 </p><p>  在調(diào)試過程中,發(fā)現(xiàn)每當(dāng)1P在最外圈落子時(shí),系統(tǒng)即可彈出1P獲勝的結(jié)果,這是由于win函數(shù)中是通過對落子點(diǎn)及其周圍的若干點(diǎn)求和來判斷是否獲勝的。當(dāng)1P在最外圈落子時(shí),棋盤外的點(diǎn)被程序當(dāng)做0處理,加上落子時(shí)被賦值為0的一

87、點(diǎn),正好滿足1P獲勝的條件,故而引發(fā)錯(cuò)誤。改進(jìn)方法:將用于判斷輸贏的數(shù)組a由原來的19*19改為21*21,并將第0、20行及第0、20列中所有元素賦值為6;再將被這四組元素包圍的一個(gè)19*19的區(qū)間對應(yīng)到棋盤上的19*19格,即可解決原有問題。 </p><p>  在調(diào)試的過程中,還發(fā)現(xiàn)原有模塊中的按鍵操作過于復(fù)雜,綜合兼容性考慮,舍棄原有的光標(biāo)操作模式,改用輸入坐標(biāo)的操作模式,這樣做從某種程度上降低了程序

88、的可操作性,但提高了程序的可實(shí)現(xiàn)性與兼容性。</p><p><b>  7.3總程序語句</b></p><p>  /*函數(shù)、變量定義*/</p><p>  #include<stdio.h> </p><p>  #include<string.h> </p><p&g

89、t;  #include<time.h> </p><p>  #include<stdlib.h> </p><p>  #define N 19 </p><p>  int win(int m, int l); </p><p>  void printState(); </p><p>

90、;<b>  p1win(); </b></p><p><b>  p2win();</b></p><p><b>  heqi(); </b></p><p>  void help(); </p><p>  int i,j,k,size=N; </p>

91、<p>  int isBlack=1; </p><p>  char state[N][N]; </p><p>  int a[N+2][N+2]; </p><p>  char x,y,temp[10]; </p><p><b>  char c; </b></p><p>

92、  int z; </p><p>  /*初始化及指令輸入*/ </p><p>  void startGame() </p><p><b>  {</b></p><p>  int m,n,w; </p><p>  for(i=0;i<size;i++)</

93、p><p><b>  { </b></p><p>  for(j=0;j<size;j++)</p><p><b>  { </b></p><p>  state[i][j]='_'; </p><p>  a[i][j]=6; </p

94、><p><b>  } </b></p><p><b>  } </b></p><p>  printState();</p><p><b>  while(1) </b></p><p><b>  { </b></p

95、><p>  printf("\n\t請%s方下子:",isBlack?"黑":"白");</p><p>  fflush(stdin);</p><p>  scanf("%s",temp);</p><p>  if(!strcmp(strupr(temp),&

96、quot;OUT")) </p><p><b>  {</b></p><p>  system("cls");</p><p><b>  return; </b></p><p><b>  } </b></p><p

97、><b>  /*悔棋 */</b></p><p>  if(!strcmp(temp,"BACK"))</p><p><b>  { </b></p><p><b>  i=x-'A';</b></p><p><b>

98、;  j=y-'A';</b></p><p>  state[i][j]='_';</p><p>  printState();</p><p>  isBlack=!isBlack;</p><p><b>  continue;</b></p><p

99、><b>  }</b></p><p>  if(!strcmp(temp,"LOSE"))</p><p><b>  /*認(rèn)輸*/</b></p><p><b>  {</b></p><p>  printf("\n\t%s方認(rèn)輸,

100、%s方勝!\n\n",isBlack?"黑":"白",isBlack?"白":"黑");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  x=temp[0];

101、 </p><p>  y=temp[1];</p><p>  /*避免下面相減的數(shù)組越界。*/ </p><p>  if(x<'A'||x>'S'||y<'A'||y>'S')</p><p><b>  {&

102、lt;/b></p><p>  printf("\t輸入有誤,請輸入屬于<A-S>或正確的口令。\n");</p><p><b>  continue;</b></p><p><b>  } </b></p><p>  i=x-'A';

103、 </p><p><b>  j=y-'A';</b></p><p>  if(state[i][j]!='_')</p><p>  { </p><p>  printf("\t提示:該位置已經(jīng)有子,請重新指定坐標(biāo)!");</p&

104、gt;<p><b>  continue;</b></p><p><b>  } </b></p><p>  c=isBlack?'1':'2';</p><p>  z=isBlack? 0:1;</p><p>  state[i][j]=c;

105、</p><p>  a[i+1][j+1]=z; </p><p><b>  m=i+1;</b></p><p>  n=j+1; </p><p>  w=win(m,n); </p><p><b>  if(!w)</b>

106、</p><p><b>  {</b></p><p>  printState();</p><p>  isBlack=!isBlack;</p><p><b>  }</b></p><p><b>  else</b></p>

107、<p><b>  { </b></p><p><b>  return;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  } </b><

108、;/p><p><b>  /*判斷輸贏*/</b></p><p>  int win(int m, int l) </p><p><b>  { </b></p><p><b>  int </b></p><p>  sum1,sum2,su

109、m3,sum4,sum=1,n,i,j,X,Y,w;</p><p><b>  w=0; </b></p><p><b>  X=m; </b></p><p><b>  Y=l; </b></p><p>  for(i=X-4,j=Y-4,n=0;i<=X,j

110、<=Y;i++,j++,n-=2) </p><p><b>  { </b></p><p>  sum1=a[i][Y]+a[i+1][Y]+a[i+2][Y]+a[i+3][Y]+a[i+4][Y];</p><p>  sum2=a[i][j]+a[i+1][j+1]+a[i+2][j+2]+a[i+3][j+3]+a[i+4]

111、[j+4];</p><p>  sum3=a[X][j]+a[X][j+1]+a[X][j+2]+a[X][j+3]+a[X][j+4];</p><p>  sum4=a[i][j+8+n]+a[i+1][j+7+n]+a[i+2][j+6+n]+a[i+3][j+5+n]+a[i+4][j+4+n];</p><p>  if(sum1==5||sum2==5

112、||sum3==5||sum4==5)</p><p><b>  {</b></p><p><b>  p2win();</b></p><p><b>  w=1;</b></p><p><b>  }</b></p><p&g

113、t;<b>  if</b></p><p>  (sum1==0||sum2==0||sum3==0||sum4==0)</p><p><b>  {</b></p><p><b>  p1win();</b></p><p><b>  w=1;</b&

114、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  sum1=0;</b></p><p><b>  sum2=0;</b></p><p><b>  s

115、um3=0;</b></p><p><b>  sum4=0;</b></p><p><b>  sum++;</b></p><p>  if(sum==177)</p><p><b>  { </b></p><p>&l

116、t;b>  heqi();</b></p><p><b>  w=1;</b></p><p><b>  }</b></p><p><b>  return w;</b></p><p><b>  }  <

117、/b></p><p><b>  /*和棋界面*/</b></p><p>  heqi()    </p><p><b>  { </b></p><p>  printf("和棋");</p><

118、p><b>  return;</b></p><p><b>  }  </b></p><p>  /*玩家1獲勝界面*/</p><p><b>  p1win()</b></p><p><b>  { </b>

119、</p><p>  printf("玩家1獲勝"); </p><p><b>  return;  </b></p><p><b>  }  </b></p><p>  /*玩家2獲勝界面*/</p><

120、;p><b>  p2win()</b></p><p><b>  { </b></p><p>  printf("玩家2獲勝"); </p><p><b>  return;  </b></p><p>

121、<b>  }</b></p><p><b>  /*幫助*/ </b></p><p>  void help()</p><p><b>  {</b></p><p>  system("cls");</p><p>  pr

122、intf("\t本程序采用19*19的游戲格式\n\n");</p><p>  printf("\t輸入格子的坐標(biāo)下子: 先橫坐標(biāo)后縱坐標(biāo)。比如輸入:GG\n\n");</p><p>  printf("\t輸入out(退回主菜單)、back(悔棋)、lose(認(rèn)輸)\n\n"); </p><p>&

123、lt;b>  }</b></p><p><b>  /*主函數(shù)*/ </b></p><p>  int main() </p><p><b>  { </b></p><p>  system("color f1");</p><p&

124、gt;<b>  while(1)</b></p><p><b>  {</b></p><p>  printf("\n\t-----C Programming Language課程作業(yè):五子棋-----\n\n");</p><p>  printf("\t\t 1.開始游戲\n&q

125、uot;);</p><p>  printf("\t\t 2.幫助\n");</p><p>  printf("\t\t 3.退出\n");</p><p>  printf("\n\t請選擇:");</p><p>  L:k=scanf("%d",&a

126、mp;i);</p><p><b>  switch(i)</b></p><p><b>  {</b></p><p>  case 1: startGame(); break; </p><p>  case 2: help(); break;</p>

127、<p>  case 3: return 0;</p><p>  default:printf("\t 無此選項(xiàng)\n");break; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }

128、 </b></p><p><b>  /*顯示、刷屏*/</b></p><p>  void printState() </p><p><b>  {</b></p><p>  char p='A';</p><p>  system(&q

129、uot;cls");</p><p>  printf("\t棋盤如下:\n\n");</p><p>  printf("\t ");</p><p>  for(i=0;i<size;i++)</p><p><b>  {</b></p>&l

130、t;p>  printf("%c ",p+i);</p><p><b>  }</b></p><p>  printf("\n\t");</p><p>  for(i=0;i<size;i++)</p><p><b>  {</b><

131、/p><p>  printf("%c ",p+i);</p><p>  for(j=0;j<size;j++)</p><p><b>  {</b></p><p>  printf("%c ",state[i][j]);</p><p><b

132、>  }</b></p><p>  printf("%c \n\t",p+i);</p><p><b>  }</b></p><p>  printf(" ");</p><p>  for(i=0;i<size;i++)</p>&l

133、t;p><b>  {</b></p><p>  printf("%c ",p+i);</p><p><b>  }</b></p><p>  printf("\n"); </p><p><b>  }</b></p&

134、gt;<p><b>  8 總結(jié)</b></p><p>  C語言課程設(shè)計(jì)時(shí)一次對我們c語言學(xué)習(xí)的綜合檢驗(yàn),它要求我們將所學(xué)的c語言代碼進(jìn)行綜合運(yùn)用,設(shè)計(jì)出一個(gè)簡單的系統(tǒng),這不僅是對我們基礎(chǔ)知識的檢驗(yàn),還考驗(yàn)我們的動手動腦以及團(tuán)隊(duì)協(xié)作能力,在這一年學(xué)習(xí)中要將這些基礎(chǔ)知識掌握已經(jīng)不容易了,在這么短的時(shí)間又要做出一個(gè)系統(tǒng)更是一次重大的挑戰(zhàn),然而只有迎難而上才能收獲成功,做出一個(gè)

135、完整的系統(tǒng)。</p><p>  回顧這次課程設(shè)計(jì),至今我感慨頗多。很多的知識只是停留在基本的應(yīng)用上,當(dāng)需要結(jié)合使用時(shí),往往出現(xiàn)無從入手的情況。在C語言課程設(shè)計(jì)的過程中,讓我深深體會到了這點(diǎn)。一些細(xì)節(jié)的地方?jīng)]有看清楚,或者思考妥當(dāng),就無法讓系統(tǒng)運(yùn)行,而當(dāng)一系列調(diào)試后,程序能夠運(yùn)行。</p><p>  通過對各子程序的設(shè)計(jì)與優(yōu)化,本程序完成了五子棋軟件的主體的設(shè)計(jì)與制作,基本達(dá)到了使用五子

136、棋軟件的核 心要求。然而程序還有一些不足之處,首先,程序在判斷勝負(fù)后無法顯示第五枚棋子,輸入五子連環(huán)的第五個(gè)棋子坐標(biāo)之后直接跳出了重新開始的界面,這是由程序的顯示原理造成的;其次,程序的界面過于簡陋,而且坐標(biāo)輸入操作也不利于玩家使用。</p><p>  對于這次課程設(shè)計(jì)我很不滿意,沒有達(dá)到自己想要的效果,系統(tǒng)中還存在著許多的漏洞,在本次課程設(shè)計(jì)過程中我也發(fā)現(xiàn)了自己的很多缺點(diǎn),比如做事不認(rèn)真,粗心大意,考慮問題不

137、夠全面等。最后,謝謝老師的教導(dǎo)。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 五 子 棋 [EB]. </p><p>  http://baike.baidu.com/view/2697.htm.</p><p>  [2] C語言制作五子棋[EB]. </p>

138、<p>  http://www.vcworld.net/news/200905/022217.html </p><p>  [3] C語言五棋源代碼 設(shè)計(jì)報(bào)告[EB]. </p><p>  http://wenku.baidu.com/view/e253a2c66137ee06eff91859.html </p><p>  [4] C語言五

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論