2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩21頁(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><b>  一、設(shè)計(jì)目的3</b></p><p><b>  二、設(shè)計(jì)要求3</b></p><p>  三、所需儀器設(shè)備3</p><p><b>  四、課題分析3</b>&

2、lt;/p><p>  五、具體設(shè)計(jì)過(guò)程4</p><p>  5.1、設(shè)計(jì)思路4</p><p>  5.2、程序設(shè)計(jì)流程圖4</p><p>  5.3、函數(shù)實(shí)現(xiàn)說(shuō)明7</p><p>  5.4、圖形庫(kù)函數(shù)介紹8</p><p>  5.5、程序源代碼及注釋9</p>

3、<p>  5.6、調(diào)試結(jié)果19</p><p>  六、設(shè)計(jì)心得體會(huì)20</p><p><b>  七、參考文獻(xiàn)21</b></p><p>  《黑白棋游戲》C語(yǔ)言課程設(shè)計(jì)</p><p><b>  一、設(shè)計(jì)目的</b></p><p>  本課程設(shè)

4、計(jì)是計(jì)算機(jī)軟件技術(shù)基礎(chǔ)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完《程序設(shè)計(jì)語(yǔ)言(C)》課程后進(jìn)行的一次全面的綜合練習(xí)。本課程設(shè)計(jì)的目的和任務(wù): </p><p> ?。?)鞏固和加深學(xué)生對(duì)C語(yǔ)言課程的基本知識(shí)的理解和掌握;</p><p> ?。?)掌握C語(yǔ)言編程和程序調(diào)試的基本技能; </p><p> ?。?)利用C語(yǔ)言進(jìn)行基本的軟件設(shè)計(jì),掌握軟件設(shè)計(jì)一般方法,了解軟

5、件設(shè)計(jì)的思路;</p><p> ?。?)掌握書(shū)寫(xiě)程序設(shè)計(jì)報(bào)告的能力;</p><p> ?。?)提高運(yùn)用C語(yǔ)言解決實(shí)際問(wèn)題的能力;</p><p>  這個(gè)程序也是對(duì)編程基本功的一個(gè)訓(xùn)練,對(duì)于初學(xué)C語(yǔ)言的人,講分支、循環(huán)、數(shù)組函數(shù)綜合應(yīng)用,而不僅限于編制獨(dú)立的小程序,能夠大大提高變成水平。</p><p><b>  二、設(shè)計(jì)要求

6、</b></p><p>  (1)收集資料,全面分析課題,分解問(wèn)題,形成中體編程思路;</p><p> ?。?)深入分析各個(gè)小問(wèn)題,編寫(xiě)個(gè)部分程序模塊;</p><p>  (3)對(duì)于設(shè)計(jì)中用到的關(guān)鍵函數(shù),要聯(lián)系實(shí)際 問(wèn)題進(jìn)行具體介紹;</p><p> ?。?)上機(jī)調(diào)試,確保程序能正確運(yùn)行;</p><p

7、> ?。?)設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告;</p><p><b>  三、所需儀器設(shè)備</b></p><p> ?。?)硬件要求能運(yùn)行Windows 2000/XP操作系統(tǒng)的微機(jī)系統(tǒng)。</p><p> ?。?)C語(yǔ)言程序設(shè)計(jì)及相應(yīng)的開(kāi)發(fā)環(huán)境。(本設(shè)計(jì)用的是Turbo C for Windows 集成實(shí)驗(yàn)與學(xué)習(xí)環(huán)境 V6.0)</

8、p><p><b>  四、課題分析</b></p><p>  編寫(xiě)一個(gè)《黑白棋游戲》的C程序,包括以下功能:</p><p>  初始狀態(tài):在一個(gè)8*8的棋盤(pán)中央交叉排放黑白棋子各兩枚,白棋先走。</p><p>  (1)每個(gè)棋手下棋時(shí),擺子的位置必須是以自己的棋子能包圍住對(duì)方一個(gè)或多個(gè)棋子,被包圍住的對(duì)方棋子將成為自

9、己的棋子。包圍的方向可以是上下左右以及斜線8個(gè)方向,只要能連成一線即可。</p><p> ?。?)當(dāng)輪到某一個(gè)棋手下子,但是他沒(méi)有可以包圍對(duì)方棋子的位置時(shí),他必須停步,讓對(duì)方走棋,直到他可以走為止。</p><p> ?。?)當(dāng)棋盤(pán)上一方的棋子為0或者下滿(mǎn)64格,游戲結(jié)束,棋子少者輸。</p><p><b>  五、具體設(shè)計(jì)過(guò)程</b>&l

10、t;/p><p><b>  5.1、設(shè)計(jì)思路</b></p><p>  程序界面應(yīng)是一個(gè)二維平面圖,所以數(shù)據(jù)的表示用二維數(shù)組,數(shù)組兩個(gè)下標(biāo)可以表示棋盤(pán)上的位置,數(shù)組元素的值代表棋格中的狀態(tài),共有三種情況,分別是空格、黑棋和白棋。這樣給數(shù)組元素的取值設(shè)定為0、1、2,其中0代表空格,1代表白色棋子,2代表黑色棋子。這樣程序的主要工作是接收棋手按鍵操作,一旦接收到回車(chē)鍵,

11、說(shuō)明棋手?jǐn)[子,先判斷是不是有效位置,也就是能不能包圍住對(duì)方棋子,如果能,便為棋子所在的位置往上下、左右、左上、左下、右上、右下8個(gè)方向?qū)ふ冶话鼑〉乃衅遄樱ū仨毷沁B續(xù)的,中間不能有空格),將這些被包圍住的對(duì)方棋子都變成自己的棋子,然后對(duì)當(dāng)前棋盤(pán)中的黑白棋個(gè)數(shù)進(jìn)行統(tǒng)計(jì)并輸出結(jié)果。如果沒(méi)有這樣的位置可以落子,則停步,讓對(duì)方走棋,重復(fù)上述步驟,直到游戲結(jié)束。如果想提前終止游戲,可以按Esc鍵。 </p><p> 

12、 5.2、程序設(shè)計(jì)流程圖</p><p> ?。?)由上述設(shè)計(jì)思路可畫(huà)出程序整體流程圖,如下圖所示:</p><p>  圖1 程序整體流程圖</p><p> ?。?)人人對(duì)戰(zhàn)模塊程序流程圖如下圖所示:</p><p>  圖2 人人對(duì)戰(zhàn)模塊流程圖</p><p>  (3) 成績(jī)輸出模塊程序流程圖如下圖所示

13、 </p><p>  圖3 成績(jī)輸出模塊程序流程圖</p><p>  5.3、函數(shù)實(shí)現(xiàn)說(shuō)明</p><p> ?。?)main()主函數(shù)</p><p>  在主函數(shù)中,首先定義使用到的常數(shù)、全局變量、函數(shù)原型說(shuō)明。盤(pán)狀態(tài)用數(shù)組a[8][8],初值為0,表示空格。函數(shù)的實(shí)體部分,開(kāi)始初始化圖形系統(tǒng),然后通過(guò)調(diào)用函數(shù)DrawQp(

14、)先畫(huà)出棋盤(pán),調(diào)用playtoplay()人人對(duì)戰(zhàn)函數(shù)開(kāi)始游戲,一旦游戲結(jié)束后,關(guān)閉圖形系統(tǒng),程序結(jié)束。</p><p>  (2)DrawQp()畫(huà)棋盤(pán)函數(shù)</p><p>  背景顏色設(shè)為藍(lán)色,從坐標(biāo)(100,100)開(kāi)始每隔40個(gè)單位用白色畫(huà)一條水平直線,一條垂直線,構(gòu)成棋盤(pán),用循環(huán)語(yǔ)句實(shí)現(xiàn)。函數(shù)setfillstyle()可以設(shè)置填充模式和填充顏色,fillellipse(int

15、x,int y,xradius,int yradius)以x和y為圓心,xradius和yradius為水平和垂直軸畫(huà)一填充橢圓,當(dāng)xradius和yradius相等時(shí),則畫(huà)出的是圓,用它表示棋子。(3)SetPlayColor()設(shè)置棋子的顏色 函數(shù)的參數(shù)為整型變量t,根據(jù)t的值來(lái)設(shè)計(jì)填充棋子的當(dāng)前顏色,值為1代表白棋,值為2代表黑棋。</p><p>  (4)MoveColor()恢復(fù)原來(lái)格子的狀

16、態(tài)</p><p>  由于棋手在走棋的時(shí)候,他的棋子總是首先出現(xiàn)在棋盤(pán)的左上角,棋手要通過(guò)移動(dòng)光標(biāo)走到要落子的位置,在經(jīng)過(guò)的路程上顯示當(dāng)前棋子,就會(huì)覆蓋原來(lái)的棋盤(pán)狀態(tài),所以一旦棋子走過(guò)后,就應(yīng)恢復(fù)原來(lái)的狀態(tài),是空格的依然顯示空格,是棋子的就顯示原來(lái)棋子的顏色。因?yàn)槠遄右苿?dòng)過(guò)程并沒(méi)有改變數(shù)組元素的值,所以可以根據(jù)數(shù)組元素的值判定原來(lái)的狀態(tài),如果值是1,就恢復(fù)白色棋子,值是2則恢復(fù)黑色棋子,否則恢復(fù)藍(lán)色空格。<

17、;/p><p> ?。?)、playtoplay()人人對(duì)戰(zhàn)函數(shù) </p><p>  這是游戲進(jìn)行的函數(shù),主要是接收棋手的按鍵消息,其處理過(guò)程如下: </p><p>  1)按Esc鍵程序可以隨時(shí)結(jié)束。 </p><p>  2)按上下左右光標(biāo)鍵,則改變棋子移動(dòng)的坐標(biāo)值。 </p><p>  3)按回車(chē)鍵后判斷: &

18、lt;/p><p> ?、偃缏渥拥奈恢靡呀?jīng)有棋則無(wú)效,繼續(xù)壓鍵。 </p><p> ?、谌缏渥游恢檬强崭?,可以將棋子落入格內(nèi),調(diào)用函數(shù)QpChange()判斷是否引起棋盤(pán)的變化,函數(shù)值為1有變化,為0沒(méi)變化。如果棋盤(pán)有變化,說(shuō)明將包圍的對(duì)方棋子吃掉,統(tǒng)計(jì)當(dāng)前分?jǐn)?shù),如果棋盤(pán)沒(méi)有變化,則說(shuō)明落子的位置無(wú)法包圍對(duì)方的棋子也視為無(wú)效棋,可以繼續(xù)尋找合適的位置,但開(kāi)始統(tǒng)計(jì)其落子次數(shù),一旦嘗試次數(shù)超過(guò)當(dāng)

19、前棋盤(pán)的空格數(shù),則說(shuō)明他無(wú)棋可走,則放棄此步,讓對(duì)方下棋。 </p><p> ?、廴绻遄幼兓?,格子已占滿(mǎn)64格或一方棋子為0,則游戲結(jié)束,顯示勝利方信息。按任意鍵程序結(jié)束。 </p><p> ?、苤貜?fù)上述步驟,直到游戲結(jié)束。(6)、QpChange()判斷棋盤(pán)變化當(dāng)棋手按回車(chē)鍵落子后,就要分別往8個(gè)方向判斷是否包圍住對(duì)方棋子,如果是,則改變棋盤(pán),也就是棋盤(pán)上黑白棋子的個(gè)數(shù)要發(fā)生變

20、化。如果所有方向都判斷過(guò),并且沒(méi)有引起棋盤(pán)的變化,則棋盤(pán)變化標(biāo)志值yes為0,返回yes,結(jié)束本函數(shù)。(7)、DoScore()處理分?jǐn)?shù) 根據(jù)當(dāng)前數(shù)組元素的值判斷分?jǐn)?shù),也就是各方棋子的個(gè)數(shù),如果數(shù)組元素值為1,白棋棋子數(shù)累加;如果數(shù)組元素值為2,則黑棋棋子數(shù)累加。(8)、PrintScore()輸出成績(jī) 利用設(shè)置實(shí)體填充模式填充矩形條清除掉前次的成績(jī),再利用sprintf()函數(shù)將整數(shù)轉(zhuǎn)換為字符串的形式,再利用outte

21、xtxy()函數(shù)將成績(jī)輸出。(9)、playWin()輸出勝利者結(jié)果 根據(jù)分?jǐn)?shù)值score1和score2的大小得出下棋的結(jié)果,輸出贏者信息。如果是白方勝就輸出“white win!”,黑方勝就輸出“black win!”,平局就輸出“you all win!”。</p><p>  5.4、圖形庫(kù)函數(shù)介紹</p><p>  圖形庫(kù)<graphics.h> 是TC里面

22、的圖形庫(kù),分為:像素函數(shù)、直線和線型函數(shù)、多邊形函數(shù)、填充函數(shù)等。在本程序中主要應(yīng)用到了以下功能函數(shù):</p><p> ?。?)、line() 畫(huà)線函數(shù)</p><p>  功能: 函數(shù)line()使用當(dāng)前繪圖色、線型及線寬,在給定的兩點(diǎn)間畫(huà)一直線。 </p><p>  函數(shù)原型: void line(int startx,int starty,int endx

23、,int endy); </p><p>  說(shuō)明: 參數(shù)startx,starty為起點(diǎn)坐標(biāo),endx,endy為終點(diǎn)坐標(biāo),函數(shù)調(diào)用前后,圖形狀態(tài)下屏幕光標(biāo)(一般不可見(jiàn))當(dāng)前位置不改變。 </p><p>  (2)、setcolor()圖形屏幕函數(shù) </p><p>  函數(shù)原型:void setcolor(int color) </p><

24、p>  功能:將當(dāng)前圖形屏幕的當(dāng)前筆畫(huà)顏色置為color.</p><p>  (3)、setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)</p><p>  函數(shù)原型: void far setfillstyle(int pattern, int color);</p><p>  功 能: 設(shè)置填充模式和顏色 </p><p> 

25、?。?)、fillellipse() 畫(huà)橢圓區(qū)函數(shù)</p><p>  功 能: 畫(huà)出并填充一橢圓 </p><p>  函數(shù)原型: void far fillellipse(int x, int y, int xradius, int yradius); </p><p>  說(shuō)明:填充邊框所定義的橢圓的內(nèi)部,該邊框由一對(duì)坐標(biāo)、一個(gè)寬度和一個(gè)高度指定。</p

26、><p> ?。?)、setbkcolor()</p><p>  功能:該函數(shù)用指定的顏色值來(lái)設(shè)置當(dāng)前的背景色</p><p>  函數(shù)原型:Void far SetBkColor(int Color );</p><p> ?。?)、C語(yǔ)言中的顏色表及填充模式如下兩表所示:</p><p>  5.5、程序源代碼及注釋

27、 </p><p>  #include "graphics.h" /*圖形系統(tǒng)頭文件*/</p><p>  #define LEFT 0x4b00 /*光標(biāo)左鍵值*/</p><p>  #define RIGHT 0x4d00 /*光標(biāo)右鍵值*/</p><p>  #define DOWN 0x5000 /*光

28、標(biāo)下鍵值*/</p><p>  #define UP 0x4800 /*光標(biāo)上鍵值*/</p><p>  #define ESC 0x011b /* ESC鍵值*/</p><p>  #define ENTER 0x1c0d /* 回車(chē)鍵值*/</p><p>  int a[8][8]={0},key,score1,score2;/*

29、具體分?jǐn)?shù)以及按鍵與存放棋子的變量*/</p><p>  char playone[3],playtwo[3];/*兩個(gè)人的得分轉(zhuǎn)換成字符串輸出*/</p><p>  void playtoplay(void);/*人人對(duì)戰(zhàn)函數(shù)*/</p><p>  void DrawQp(void);/*畫(huà)棋盤(pán)函數(shù)*/</p><p>  void S

30、etPlayColor(int x);/*設(shè)置棋子第一次的顏色*/</p><p>  void MoveColor(int x,int y);/*恢復(fù)原來(lái)棋盤(pán)狀態(tài)*/</p><p>  int QpChange(int x,int y,int z);/*判斷棋盤(pán)的變化*/</p><p>  void DoScore(void);/*處理分?jǐn)?shù)*/</p&g

31、t;<p>  void PrintScore(int n);/*輸出成績(jī)*/</p><p>  void playWin(void);/*輸出勝利者信息*/</p><p>  /******主函數(shù)*********/</p><p>  void main(void)</p><p><b>  {</b&

32、gt;</p><p>  int gd=DETECT,gr;</p><p>  initgraph(&gd,&gr,"c:\\tc"); /*初始化圖形系統(tǒng)*/</p><p>  DrawQp();/*畫(huà)棋盤(pán)*/</p><p>  playtoplay();/*人人對(duì)戰(zhàn)*/</p>&

33、lt;p><b>  getch();</b></p><p>  closegraph();/*關(guān)閉圖形系統(tǒng)*/</p><p><b>  }</b></p><p>  void DrawQp()/*畫(huà)棋盤(pán)*/</p><p><b>  {</b></p&g

34、t;<p><b>  int i,j;</b></p><p>  score1=score2=0;/*棋手一開(kāi)始得分都為0*/</p><p>  setbkcolor(BLUE);</p><p>  for(i=100;i<=420;i+=40)</p><p><b>  {<

35、;/b></p><p>  line(100,i,420,i);/*畫(huà)水平線*/</p><p>  line(i,100,i,420); /*畫(huà)垂直線*/</p><p><b>  }</b></p><p>  setcolor(0);/*取消圓周?chē)囊蝗|西*/</p><p> 

36、 setfillstyle(SOLID_FILL,15);/*白色實(shí)體填充模式*/</p><p>  fillellipse(500,200,15,15); /*在顯示得分的位置畫(huà)棋*/</p><p>  setfillstyle(SOLID_FILL,8); /*黑色實(shí)體填充模式*/</p><p>  fillellipse(500,300,15,15);&

37、lt;/p><p>  a[3][3]=a[4][4]=1;/*初始兩個(gè)黑棋*/</p><p>  a[3][4]=a[4][3]=2;/*初始兩個(gè)白棋*/</p><p>  setfillstyle(SOLID_FILL,WHITE);</p><p>  fillellipse(120+3*40,120+3*40,15,15);</

38、p><p>  fillellipse(120+4*40,120+4*40,15,15);</p><p>  setfillstyle(SOLID_FILL,8);</p><p>  fillellipse(120+3*40,120+4*40,15,15);</p><p>  fillellipse(120+4*40,120+3*40,15

39、,15);</p><p>  score1=score2=2; /*有棋后改變分?jǐn)?shù)*/</p><p>  DoScore();/*輸出開(kāi)始分?jǐn)?shù)*/</p><p><b>  }</b></p><p>  void playtoplay()/*人人對(duì)戰(zhàn)*/</p><p><b>

40、  {</b></p><p>  int x,y,t=1,i,j,cc=0;</p><p>  while(1)/*換棋手走棋*/</p><p><b>  {</b></p><p>  x=120,y=80;/*每次棋子一開(kāi)始出來(lái)的坐標(biāo),x為行坐標(biāo),y為列坐標(biāo)*/</p><p&

41、gt;  while(1) /*具體一個(gè)棋手走棋的過(guò)程*/</p><p><b>  {</b></p><p>  PrintScore(1);/*輸出棋手1的成績(jī)*/</p><p>  PrintScore(2);/*輸出棋手2的成績(jī)*/</p><p>  SetPlayColor(t);/*t變量是用來(lái)判斷棋

42、手所執(zhí)棋子的顏色*/</p><p>  fillellipse(x,y,15,15);</p><p>  key=bioskey(0);/*接收按鍵*/</p><p>  if(key==ESC)/*跳出游戲*/</p><p><b>  break;</b></p><p><b&

43、gt;  else</b></p><p>  if(key==ENTER)/*如果按鍵確定就可以跳出循環(huán)*/</p><p><b>  {</b></p><p>  if(y!=80&&a[(x-120)/40][(y-120)/40]!=1</p><p>  &&a[

44、(x-120)/40][(y-120)/40]!=2)/*如果落子位置沒(méi)有棋子*/</p><p><b>  {</b></p><p>  if(t%2==1)/*如果是棋手1移動(dòng)*/</p><p>  a[(x-120)/40][(y-120)/40]=1;</p><p>  else/*否則棋手2移動(dòng)*/&l

45、t;/p><p>  a[(x-120)/40][(y-120)/40]=2;</p><p>  if(!QpChange(x,y,t))/*落子后判斷棋盤(pán)的變化*/</p><p><b>  {</b></p><p>  a[(x-120)/40][(y-120)/40]=0;/*恢復(fù)空格狀態(tài)*/</p>

46、<p>  cc++;/*開(kāi)始統(tǒng)計(jì)嘗試次數(shù)*/</p><p>  if(cc>=64-score1-score2) /*如果嘗試超過(guò)空格數(shù)則停步*/</p><p><b>  {</b></p><p>  MoveColor(x,y);</p><p>  fillellipse(x,y,15,

47、15);</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  continue;/*如果按鍵無(wú)效*/</p><p><b>  }<

48、/b></p><p>  DoScore();/*分?jǐn)?shù)的改變*/</p><p>  break;/*棋盤(pán)變化了,則輪對(duì)方走棋*/</p><p><b>  }</b></p><p>  else/*已經(jīng)有棋子就繼續(xù)按鍵*/</p><p><b>  continue;&l

49、t;/b></p><p><b>  }</b></p><p>  else /*四個(gè)方向按鍵的判斷*/</p><p>  if(key==LEFT&&x>120)/*左方向鍵*/</p><p><b>  {</b></p><p>  

50、MoveColor(x,y);</p><p>  fillellipse(x,y,15,15);</p><p>  SetPlayColor(t);</p><p><b>  x-=40;</b></p><p>  fillellipse(x,y,15,15);</p><p><b

51、>  }</b></p><p><b>  else</b></p><p>  if(key==RIGHT&&x<400&&y>80)/*右方向鍵*/</p><p><b>  {</b></p><p>  MoveColor(x

52、,y);</p><p>  fillellipse(x,y,15,15);</p><p>  SetPlayColor(t);</p><p><b>  x+=40;</b></p><p>  fillellipse(x,y,15,15);</p><p><b>  }<

53、/b></p><p><b>  else</b></p><p>  if(key==UP&&y>120)/*上方向鍵*/</p><p><b>  {</b></p><p>  MoveColor(x,y);</p><p>  fill

54、ellipse(x,y,15,15);</p><p>  SetPlayColor(t);</p><p><b>  y-=40;</b></p><p>  fillellipse(x,y,15,15);</p><p><b>  }</b></p><p><

55、b>  else</b></p><p>  if(key==DOWN&&y<400)/*下方向鍵*/</p><p><b>  {</b></p><p>  MoveColor(x,y);</p><p>  fillellipse(x,y,15,15);</p>

56、<p>  SetPlayColor(t);</p><p><b>  y+=40;</b></p><p>  fillellipse(x,y,15,15);</p><p><b>  }</b></p><p><b>  }</b></p>

57、<p>  if(key==ESC)/*結(jié)束游戲*/</p><p><b>  break;</b></p><p>  if((score1+score2)==64||score1==0||score2==0)/*格子已經(jīng)占滿(mǎn)或一方棋子為0判斷勝負(fù)*/</p><p><b>  {</b></p&g

58、t;<p>  playWin();/*輸出最后結(jié)果*/</p><p><b>  break;</b></p><p><b>  }</b></p><p>  t=t%2+1; /*一方走后,改變棋子顏色即輪對(duì)方走*/</p><p>  cc=0; /*計(jì)數(shù)值恢復(fù)為0*/&

59、lt;/p><p>  } /*endwhile*/</p><p><b>  }</b></p><p>  void SetPlayColor(int t)/*設(shè)置棋子顏色*/</p><p><b>  {</b></p><p>  if(t%2==1)</p&g

60、t;<p>  setfillstyle(SOLID_FILL,15);/*白色*/</p><p><b>  else</b></p><p>  setfillstyle(SOLID_FILL,8);/*灰色*/</p><p><b>  }</b></p><p>  voi

61、d MoveColor(int x,int y)/*走了一步后恢復(fù)原來(lái)格子的狀態(tài)*/</p><p><b>  {</b></p><p>  if(y<100)/*如果是從起點(diǎn)出發(fā)就恢復(fù)藍(lán)色*/</p><p>  setfillstyle(SOLID_FILL,BLUE);</p><p>  else/*其

62、他情況如果是1就恢復(fù)白色棋子,2恢復(fù)黑色棋子,或恢復(fù)藍(lán)色棋盤(pán)*/</p><p>  switch(a[(x-120)/40][(y-120)/40])</p><p><b>  {</b></p><p><b>  case 1:</b></p><p>  setfillstyle(SOLI

63、D_FILL,15);break; /*白色*/</p><p><b>  case 2:</b></p><p>  setfillstyle(SOLID_FILL,8);break; /*黑色*/</p><p><b>  default:</b></p><p>  setfillstyl

64、e(SOLID_FILL,BLUE); /*藍(lán)色*/</p><p><b>  }</b></p><p><b>  }</b></p><p>  int QpChange(int x,int y,int t)/*判斷棋盤(pán)的變化*/</p><p><b>  {</b>

65、</p><p>  int i,j,k,kk,ii,jj,yes;</p><p><b>  yes=0;</b></p><p>  i=(x-120)/40; /*計(jì)算數(shù)組元素的行下標(biāo)*/</p><p>  j=(y-120)/40; /*計(jì)算數(shù)組元素的列下標(biāo)*/</p><p>  S

66、etPlayColor(t);/*設(shè)置棋子變化的顏色*/</p><p>  /*開(kāi)始往8個(gè)方向判斷變化*/</p><p>  if(j<6)/*往右邊*/</p><p><b>  {</b></p><p>  for(k=j+1;k<8;k++)</p><p>  if(a

67、[i][k]==a[i][j]||a[i][k]==0)/*遇到自己的棋子或空格結(jié)束*/</p><p><b>  break;</b></p><p>  if(a[i][k]!=0&&k<8)</p><p><b>  {</b></p><p>  for(kk=j+

68、1;kk<k&&k<8;kk++)/*判斷右邊*/</p><p><b>  {</b></p><p>  a[i][kk]=a[i][j]; /*改變棋子顏色*/</p><p>  fillellipse(120+i*40,120+kk*40,15,15);</p><p><b

69、>  }</b></p><p>  if(kk!=j+1) /*條件成立則有棋子改變過(guò)顏色*/</p><p><b>  yes=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p

70、>  if(j>1)/*判斷左邊*/</p><p><b>  {</b></p><p>  for(k=j-1;k>=0;k--)</p><p>  if(a[i][k]==a[i][j]||!a[i][k])</p><p><b>  break;</b></p&

71、gt;<p>  if(a[i][k]!=0&&k>=0)</p><p><b>  {</b></p><p>  for(kk=j-1;kk>k&&k>=0;kk--)</p><p><b>  {</b></p><p>  

72、a[i][kk]=a[i][j];</p><p>  fillellipse(120+i*40,120+kk*40,15,15);</p><p><b>  }</b></p><p>  if(kk!=j-1)</p><p><b>  yes=1;</b></p><p

73、><b>  }</b></p><p><b>  }</b></p><p>  if(i<6)/*判斷下邊*/</p><p><b>  {</b></p><p>  for(k=i+1;k<8;k++)</p><p>  

74、if(a[k][j]==a[i][j]||!a[k][j])</p><p><b>  break;</b></p><p>  if(a[k][j]!=0&&k<8)</p><p><b>  {</b></p><p>  for(kk=i+1;kk<k&

75、&k<8;kk++)</p><p><b>  {</b></p><p>  a[kk][j]=a[i][j];</p><p>  fillellipse(120+kk*40,120+j*40,15,15);</p><p><b>  }</b></p><

76、p>  if(kk!=i+1)</p><p><b>  yes=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(i>1)/*判斷上邊*/</p><p><b&

77、gt;  {</b></p><p>  for(k=i-1;k>=0;k--)</p><p>  if(a[k][j]==a[i][j]||!a[k][j])</p><p><b>  break;</b></p><p>  if(a[k][j]!=0&&k>=0)<

78、/p><p><b>  {</b></p><p>  for(kk=i-1;kk>k&&k>=0;kk--)</p><p><b>  {</b></p><p>  a[kk][j]=a[i][j];</p><p>  fillellipse

79、(120+kk*40,120+j*40,15,15);</p><p><b>  }</b></p><p>  if(kk!=i-1)</p><p><b>  yes=1;</b></p><p><b>  }</b></p><p><

80、b>  }</b></p><p>  if(i>1&&j<6)/*右上*/</p><p><b>  {</b></p><p>  for(k=i-1,kk=j+1;k>=0&&kk<8;k--,kk++)</p><p>  if(a[k]

81、[kk]==a[i][j]||!a[k][kk])</p><p><b>  break;</b></p><p>  if(a[k][kk]&&k>=0&&kk<8)</p><p><b>  {</b></p><p>  for(ii=i-1,j

82、j=j+1;ii>k&&k>=0;ii--,jj++)</p><p><b>  {</b></p><p>  a[ii][jj]=a[i][j];</p><p>  fillellipse(120+ii*40,120+jj*40,15,15);</p><p><b>  }

83、</b></p><p>  if(ii!=i-1)</p><p><b>  yes=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(i<6&&

84、j>1)/*左下*/</p><p><b>  {</b></p><p>  for(k=i+1,kk=j-1;k<8&&kk>=0;k++,kk--)</p><p>  if(a[k][kk]==a[i][j]||!a[k][kk])</p><p><b>  bre

85、ak;</b></p><p>  if(a[k][kk]!=0&&k<8&&kk>=0)</p><p><b>  {</b></p><p>  for(ii=i+1,jj=j-1;ii<k&&k<8;ii++,jj--)</p><p

86、><b>  {</b></p><p>  a[ii][jj]=a[i][j];</p><p>  fillellipse(120+ii*40,120+jj*40,15,15);</p><p><b>  }</b></p><p>  if(ii!=i+1)</p>&l

87、t;p><b>  yes=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  if(i>1&&j>1)/*左上*/</p><p><b>  {</b>&l

88、t;/p><p>  for(k=i-1,kk=j-1;k>=0&&kk>=0;k--,kk--)</p><p>  if(a[k][kk]==a[i][j]||!a[k][kk])</p><p><b>  break;</b></p><p>  if(a[k][kk]!=0&&a

89、mp;k>=0&&kk>=0)</p><p><b>  {</b></p><p>  for(ii=i-1,jj=j-1;ii>k&&k>=0;ii--,jj--)</p><p><b>  {</b></p><p>  a[ii][

90、jj]=a[i][j];</p><p>  fillellipse(120+ii*40,120+jj*40,15,15);</p><p><b>  }</b></p><p>  if(ii!=i-1)</p><p><b>  yes=1;</b></p><p>

91、<b>  }</b></p><p><b>  }</b></p><p>  if(i<6&&j<6)/* 右下*/</p><p><b>  {</b></p><p>  for(k=i+1,kk=j+1;kk<8&&

92、;kk<8;k++,kk++)</p><p>  if(a[k][kk]==a[i][j]||!a[k][kk])</p><p><b>  break;</b></p><p>  if(a[k][kk]!=0&&kk<8&&k<8)</p><p><b&g

93、t;  {</b></p><p>  for(ii=i+1,jj=j+1;ii<k&&k<8;ii++,jj++)</p><p><b>  {</b></p><p>  a[ii][jj]=a[i][j];</p><p>  fillellipse(120+ii*40,1

94、20+jj*40,15,15);</p><p><b>  }</b></p><p>  if(ii!=i+1)</p><p><b>  yes=1;</b></p><p><b>  }</b></p><p><b>  }<

95、;/b></p><p>  return yes;/*返回是否改變過(guò)棋子顏色的標(biāo)記*/</p><p><b>  }</b></p><p>  void DoScore()/*處理分?jǐn)?shù)*/</p><p><b>  {</b></p><p><b>

96、  int i,j;</b></p><p>  score1=score2=0;/*重新開(kāi)始計(jì)分?jǐn)?shù)*/</p><p>  for(i=0;i<8;i++)</p><p>  for(j=0;j<8;j++)</p><p>  if(a[i][j]==1)/*分別統(tǒng)計(jì)兩個(gè)人的分?jǐn)?shù)*/</p><

97、;p><b>  score1++;</b></p><p><b>  else</b></p><p>  if(a[i][j]==2)</p><p><b>  score2++;</b></p><p><b>  }</b></p&

98、gt;<p>  void PrintScore(int playnum)/*輸出成績(jī)*/</p><p><b>  {</b></p><p>  if(playnum==1)/*清除以前的成績(jī)*/</p><p><b>  {</b></p><p>  setfillstyl

99、e(SOLID_FILL,BLUE);</p><p>  bar(550,100,640,400);</p><p><b>  }</b></p><p>  setcolor(RED);</p><p>  settextstyle(0,0,4);/*設(shè)置文本輸出樣式*/</p><p> 

100、 if(playnum==1)/*判斷輸出哪個(gè)棋手的分,在不同的位置輸出*/</p><p><b>  {</b></p><p>  sprintf(playone,"%d",score1);</p><p>  outtextxy(550,200,playone);</p><p><b&

101、gt;  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  sprintf(playtwo,"%d",score2);</p><p>  outtextxy(550,300,playtwo);<

102、;/p><p><b>  }</b></p><p>  setcolor(0);</p><p><b>  }</b></p><p>  void playWin()/*輸出最后的勝利者結(jié)果*/</p><p><b>  {</b></p&g

103、t;<p>  settextstyle(0,0,4);</p><p>  setcolor(12);</p><p>  if(score2>score1)/*開(kāi)始判斷最后的結(jié)果*/</p><p>  outtextxy(100,50,"black win!");</p><p><b>

104、;  else</b></p><p>  if(score2<score1)</p><p>  outtextxy(100,50,"white win!");</p><p><b>  else</b></p><p>  outtextxy(60,50,"you a

105、ll win!");</p><p><b>  }</b></p><p><b>  5.6、調(diào)試結(jié)果</b></p><p>  (1)本程序是在Turbo C for Windows 集成實(shí)驗(yàn)與學(xué)習(xí)環(huán)境 V6.0環(huán)境下運(yùn)行的。運(yùn)行程序后,會(huì)得到如下圖4所示初始界面,初始棋盤(pán)上黑白雙方各有兩粒棋子,白棋先走

106、。然后雙方交替找棋,同時(shí)顯示比分,直到把棋盤(pán)走滿(mǎn),最后看看黑白雙方誰(shuí)的棋子多, 輸出勝利者息。如圖5所示。</p><p>  圖4 游戲初始界面 </p><p>  圖5 白方勝利的界面</p><p>  (2) 程序運(yùn)行所遇問(wèn)題:程序能夠正常運(yùn)行,但在DOS全屏環(huán)境下無(wú)法截屏,我嘗試過(guò)用printscreen鍵和QQ截圖等很多方法,但都不行。所以,最后只

107、能用相機(jī)把運(yùn)行結(jié)果拍下來(lái),如上兩圖所示,截圖有點(diǎn)斜,就是這個(gè)原因。</p><p><b>  六、設(shè)計(jì)心得體會(huì) </b></p><p>  以前也做過(guò)一次c語(yǔ)言課程設(shè)計(jì),但那時(shí)候?qū)語(yǔ)言基本的知識(shí)點(diǎn)都不是很懂,更別說(shuō)要我們編出那種圖形界面的程序來(lái)。所以感覺(jué)C語(yǔ)言很枯燥,也總認(rèn)為c語(yǔ)言只能編出那種黑底白字的程序。但經(jīng)過(guò)這次計(jì)算機(jī)軟件技術(shù)課程設(shè)計(jì),真正使我對(duì)計(jì)算機(jī)編程

108、培養(yǎng)了濃厚的興趣。當(dāng)我看到了用C語(yǔ)言做出的《黑白棋游戲系統(tǒng)》后,我才真正感受到了C程序設(shè)計(jì)的強(qiáng)大和神奇。原來(lái)C語(yǔ)言一樣也能做出那種很漂亮的圖形界面來(lái)。這讓我真正認(rèn)識(shí)到了學(xué)習(xí)編程的必要性。</p><p>  在大一的時(shí)候我就過(guò)了國(guó)二,但說(shuō)實(shí)話(huà),那基本上只是對(duì)C語(yǔ)言基礎(chǔ)知識(shí)點(diǎn)的考查,要我們編出這樣的程序來(lái)還有很遠(yuǎn)距離。雖然說(shuō)這《黑白棋游戲系統(tǒng)》程序不是我自己編寫(xiě)出來(lái)的,但在老師的指導(dǎo)下,我自己查了很多資料,認(rèn)認(rèn)真真

109、地讀了程序,也仔細(xì)分析程序的邏輯思路。使我對(duì)C語(yǔ)言編程有了更深入更真切的了解,具體如下:</p><p> ?。?)、模塊化思想。雖然平常上課老聽(tīng)老師說(shuō)要有模塊化思想,但自己在編寫(xiě)實(shí)例中具體如何模塊化就不是很清楚了。通過(guò)這次課程設(shè)計(jì),使我切實(shí)理解了模塊化思想,比如在《黑白棋游戲系統(tǒng)》中就可以分為畫(huà)棋盤(pán)模塊、人人對(duì)戰(zhàn)模塊、分?jǐn)?shù)處理模塊等,要實(shí)現(xiàn)哪個(gè)功能就直接讀和修改對(duì)應(yīng)的哪個(gè)模塊,這樣就大大提高了程序的可讀性和易修

110、改性。</p><p> ?。?)、分析程序先從主函數(shù)main()入手。Main()函數(shù)是C源程序編譯時(shí)的開(kāi)始,從main()函數(shù)開(kāi)始讀函數(shù)可將其他函數(shù)的功能理解得更透徹。</p><p> ?。?)、本次課程設(shè)計(jì)我收獲最大的就是對(duì)圖形庫(kù)<graphics.h>的認(rèn)識(shí)和了解,平時(shí)我們編程很少用到也不知道怎么用這圖形庫(kù)<graphics.h>,所以一直認(rèn)為C語(yǔ)言編不出

111、那種很漂亮的圖形界面。通過(guò)本次課設(shè),我學(xué)會(huì)了如何調(diào)用圖形庫(kù)里面的功能函數(shù),比如調(diào)用line() 畫(huà)線函數(shù)、setfillstyle() 設(shè)置填充圖樣和顏色函數(shù)、fillellipse() 畫(huà)橢圓區(qū)函數(shù)、setbkcolor()設(shè)置背景顏色函數(shù)等等,對(duì)這些函數(shù)的原型和功能都有所了解。</p><p>  (4)、除此之外,我還學(xué)會(huì)了如何對(duì)文檔的整體排版和報(bào)告格式的書(shū)寫(xiě)等等很多處理文檔的能力,是對(duì)我們以后撰寫(xiě)論文的一

112、次很好的鍛煉。</p><p>  總而言之,通過(guò)本次課程設(shè)計(jì),無(wú)論是在學(xué)習(xí)上還是其他方面,都使我受益匪淺。</p><p><b>  七、參考文獻(xiàn)</b></p><p>  [1] 譚浩強(qiáng),《C程序設(shè)計(jì)(第三版)》,清華大學(xué)出版社,2005.7</p><p>  [2] 郭翠英,《C語(yǔ)言課程設(shè)計(jì)案例精編》, 中國(guó)

溫馨提示

  • 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)論