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

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計說明書</b></p><p>  課程名稱: C語言課程設(shè)計</p><p>  設(shè)計題目: 中國象棋</p><p>  專業(yè): 計算機科學(xué)與技術(shù) 班級:______</p><p>  姓名: 學(xué)號:___ </p><p> 

2、 評分: 指導(dǎo)教師: </p><p>  2012 年 6月26日</p><p><b>  目 錄</b></p><p><b> ?、?摘要</b></p><p><b>  Ⅱ 前言</b></p><p&

3、gt;<b> ?、?功能描述</b></p><p><b> ?、?配置要求</b></p><p> ?、?總體設(shè)計(個人負責(zé)模塊)</p><p><b>  一、功能模塊設(shè)計</b></p><p><b>  二、數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></

4、p><p><b>  三、函數(shù)功能描述</b></p><p><b>  四、代碼實現(xiàn)</b></p><p><b>  五、運行結(jié)果</b></p><p><b>  Ⅵ 小結(jié)</b></p><p><b> ?、?/p>

5、 摘 要</b></p><p>  中國象棋是一款很古老、很受歡迎的游戲,其開發(fā)過程有一定的技巧和方法,其中</p><p>  涉及到函數(shù)調(diào)用、二維數(shù)組、鍵盤操作等方面的知識。本游戲的開發(fā)者需要基本掌握復(fù)</p><p>  雜情況下函數(shù)的編寫以及調(diào)用能力、二維數(shù)組的運用能力、復(fù)雜算法的設(shè)計能力等。</p><p><b

6、> ?、?前 言</b></p><p>  中國象棋是一款經(jīng)典的智力游戲,具有悠久的歷史,早在戰(zhàn)國時期就有了關(guān)于中國象棋的記載,經(jīng)過幾千年的流傳,目前仍然是中國家喻戶曉的棋類游戲,頗受歡迎。因此,我們決定借這次機會通過用C語言將中國象棋實現(xiàn)出來,當(dāng)然,我們也借鑒了前人的一些技巧經(jīng)驗。有不足之處,希望老師能夠諒解,我們以后將會再接再厲。</p><p><b>

7、 ?、?功能描述</b></p><p>  本人負責(zé)棋子帥(將)、象(相)、士(仕)、卒(兵)子函數(shù)的編寫,它們的所能實現(xiàn)的功能分別是:</p><p> ?。?)帥(將):控制棋子帥(將)能符合現(xiàn)實情況下的游戲規(guī)則而行走,例如帥(將)只能在規(guī)定范圍內(nèi)向上或向左、右、下行走一格,最后返回一個行走正確或行走錯誤的數(shù)據(jù)。</p><p>  (2)象(相)

8、:控制棋子象(相)能符合現(xiàn)實情況下的游戲規(guī)則而行走,例如象(相)只能在自己領(lǐng)域內(nèi)走“田”字格,且中間不能有其他棋子阻擋,最后返回一個行走正確或行走錯誤的數(shù)據(jù)。</p><p> ?。?)士(仕):控制棋子士(仕)能符合現(xiàn)實情況下的游戲規(guī)則而行走,例如士(仕)只能在規(guī)定范圍內(nèi)斜著跨一格,然后返回一個行走正確或行走錯誤的數(shù)據(jù)。</p><p> ?。?)卒(兵):控制棋子卒(兵)能符合現(xiàn)實情況

9、下的游戲規(guī)則而行走,例如卒(兵)只能一次走一格,同時在自己領(lǐng)域內(nèi)只能向前走,而在對方領(lǐng)域內(nèi)可向前、左、右方向走一格,最后返回一個行走正確或行走錯誤的數(shù)據(jù)。</p><p><b> ?、?配置要求</b></p><p><b>  (1) 硬件配置</b></p><p>  CPU:≥Pentium III 600&l

10、t;/p><p><b>  內(nèi)存:≥64MB</b></p><p>  硬盤剩余空間:≥128MB</p><p><b>  (2) 軟件環(huán)境</b></p><p>  Visual C++6.0及其以上版本</p><p> ?、?總體設(shè)計(個人負責(zé)模塊)</p&

11、gt;<p>  本人為小組成員,負責(zé)的模塊是:棋子帥(將)、象(相)、士(仕)、卒(兵)子函數(shù)的設(shè)計與編寫。</p><p><b>  一、系統(tǒng)模塊設(shè)計</b></p><p><b>  1、系統(tǒng)模塊圖</b></p><p>  本人所負責(zé)的模塊共有四個小項目組成,分別是控制棋子正確行走的帥(將)、象

12、(相)、士(仕)、卒(兵)子函數(shù)。</p><p><b> ?。?)帥(將)</b></p><p>  該子函數(shù)主要負責(zé)控制維持棋子帥(將)的正確行走,返回正確或錯誤的數(shù)據(jù)信息。</p><p><b>  (2)象(相)</b></p><p>  該子函數(shù)主要負責(zé)控制維持棋子象(相)的正確行

13、走,返回正確或錯誤的數(shù)據(jù)信息。</p><p><b> ?。?)士(仕)</b></p><p>  該子函數(shù)主要負責(zé)控制維持棋子士(仕)的正確行走,返回正確或錯誤的數(shù)據(jù)信息。</p><p><b> ?。?)卒(兵)</b></p><p>  該子函數(shù)主要負責(zé)控制維持棋子卒(兵)的正確行走,

14、返回正確或錯誤的數(shù)據(jù)信息。</p><p><b>  調(diào)調(diào)</b></p><p><b>  用調(diào)調(diào)調(diào)用</b></p><p><b>  用用用</b></p><p><b>  圖1. 系統(tǒng)模塊圖</b></p>&

15、lt;p><b>  2、任務(wù)執(zhí)行流程圖</b></p><p>  在玩家進行游戲移動棋子帥(將)、象(相)、士(仕)、卒(兵)的時候,主函數(shù)調(diào)用這幾個子函數(shù)的執(zhí)行流程圖均為:</p><p>  圖2. 任務(wù)執(zhí)行流程圖</p><p><b>  二、數(shù)據(jù)結(jié)構(gòu)設(shè)計</b></p><p>

16、  四個子函數(shù)均定義了局部變量x1,x2,y1,y2,table[][10],通過主函數(shù)調(diào)用將玩家從鍵盤輸入的值傳遞給x1,x2,y1,y2. table[][10]是在主函數(shù)中定義的一個二維數(shù)組,在子函數(shù)中同樣控制棋盤的輸出。</p><p><b>  三、函數(shù)功能描述</b></p><p>  1.chekshuai ( )</p><p&

17、gt;  函數(shù)原型:int checkshuai(int x1,int y1,int x2,int y2,int table[][10])</p><p>  checkshuai( )函數(shù)控制棋子帥(將)的正確行走,通過主函數(shù)將初始位置的坐標(biāo)x1,y1與目標(biāo)位置的坐標(biāo)x2,y2傳遞給該子函數(shù),從而判別帥(將)的行走是否符合規(guī)則。</p><p>  2.checkxiang ( )<

18、;/p><p>  函數(shù)原型:int checkxiang(int x1,int y1,int x2,int y2,int table[][10])</p><p>  checkxiang( )函數(shù)控制棋子象(相)的正確行走,通過主函數(shù)將初始位置的坐標(biāo)x1,y1與目標(biāo)位置的坐標(biāo)x2,y2傳遞給該子函數(shù),從而判別象(相)的行走是否符合規(guī)則。</p><p>  3.ch

19、eckshi ( )</p><p>  函數(shù)原型:int checkshi(int x1,int y1,int x2,int y2,int table[][10])</p><p>  checkshi( )函數(shù)控制棋子士(仕)的正確行走,通過主函數(shù)將初始位置的坐標(biāo)x1,y1與目標(biāo)位置的坐標(biāo)x2,y2傳遞給該子函數(shù),從而判別士(仕)的行走是否符合規(guī)則。</p><p&

20、gt;  4.checkbing ( )</p><p>  函數(shù)原型:int checkbing(int x1,int y1,int x2,int y2,int table[][10])</p><p>  checkbing( )函數(shù)控制棋子士(仕)的正確行走,通過主函數(shù)將初始位置的坐標(biāo)x1,y1與目標(biāo)位置的坐標(biāo)x2,y2傳遞給該子函數(shù),從而判別士(仕)的行走是否符合規(guī)則。</p

21、><p><b>  四、代碼實現(xiàn)</b></p><p><b>  1. 帥(將)</b></p><p>  int checkshuai(int x1,int y1,int x2,int y2,int table[][10])</p><p><b>  {</b><

22、/p><p>  if ((x2<8 || x2>10 || y2<4 ||y2>6)&&(x2<1 || x2>3 || y2<4|| y2>6)) </p><p>  // 控制棋子的行走范圍是在自己領(lǐng)域的九宮格內(nèi)</p><p><b>  {</b></p>&

23、lt;p>  printf("\n將或者帥是不能移出九宮區(qū)域的,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if ((abs(x2-x1)==1)&&(a

24、bs(y2-y1)==1))</p><p>  // 控制棋子的行走只能是直線</p><p><b>  {</b></p><p>  printf("\n將或者帥是不能走斜線的哦,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0

25、進行重新輸入</p><p><b>  }</b></p><p>  else if (table[x2][y2]*table[x1][y1]>0)</p><p>  // 控制棋子只能覆蓋對方棋子以分清敵我</p><p><b>  {</b></p><p>

26、;  printf("\n自己不能吃掉自己呀,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2)

27、)</p><p>  // 控制棋子每次只能跨越一格</p><p><b>  {</b></p><p>  printf("\n將或者帥不能一次走多格呀,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p>

28、;<p><b>  }</b></p><p>  else return 1; // 若未遇到錯誤則返回1繼續(xù)進行游戲</p><p><b>  }</b></p><p><b>  2. 象(相)</b></p><p>  int checkxia

29、ng(int x1,int y1,int x2,int y2,int table[][10])</p><p><b>  {</b></p><p>  if ((abs(x2-x1))!=2 || (abs(y2-y1))!=2)</p><p>  // 控制棋子的行走路線為田字格對角線</p><p><b

30、>  {</b></p><p>  printf("\n相(象)只能走田字呀,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if ((

31、table[x1][y1]>0 &&x2>5)||(table[x1][y1]<0 &&x2<5))</p><p>  // 控制棋子只能在自己領(lǐng)域內(nèi)移動</p><p><b>  {</b></p><p>  printf("\n相(象)不能渡過楚河漢界呀,重新輸入吧!\

32、n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if (table[(x1+x2)/2][(y1+y2)/2]!=0)</p><p>  // 當(dāng)棋子移動路徑上有其他棋子阻擋時棋

33、子不能移動</p><p><b>  {</b></p><p>  printf("\n您要移動的路徑上有其他棋擋著呢,不能移動,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }<

34、;/b></p><p>  else if (table[x2][y2]*table[x1][y1]>0)</p><p>  // 控制棋子只能覆蓋對方棋子以分清敵我</p><p><b>  {</b></p><p>  printf("\n自己不能吃掉自己呀,重新輸入吧!\n"

35、);</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else return 1; // 若未遇到錯誤則返回1繼續(xù)進行游戲</p><p><b>  }</b></p>

36、<p><b>  3. 士(仕)</b></p><p>  int checkshi(int x1,int y1,int x2,int y2,int table[][10])</p><p><b>  {</b></p><p>  if ((x2<8 || x2>10 || y2<4 |

37、|y2>6)&&(x2<1 || x2>3 || y2<4|| y2>6))</p><p>  // 控制棋子的行走范圍是在自己領(lǐng)域的九宮格內(nèi)</p><p><b>  {</b></p><p>  printf("\n士或者仕是不能移出九宮區(qū)域的,重新輸入吧!\n");&

38、lt;/p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if (table[x2][y2]*table[x1][y1]>0)</p><p>  // 控制棋子只能覆蓋對方棋子以分清敵我</p>

39、;<p><b>  {</b></p><p>  printf("\n自己不能吃掉自己呀,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p

40、>  else if ((abs(x2-x1)>=2)||(abs(y2-y1)>=2))</p><p>  // 控制棋子每次只能跨越一格</p><p><b>  {</b></p><p>  printf("\n士或者仕不能一次走多格呀,重新輸入吧!\n");</p><p&

41、gt;  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p>  else if (!((abs(x2-x1)==1)&&(abs(y2-y1)==1)))</p><p>  // 控制棋子行走路徑只能是沿著一格的對角線</p>

42、<p><b>  {</b></p><p>  printf("\n士或者仕只能斜著走呀,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p&g

43、t;  else return 1; // 若未遇到錯誤則返回1繼續(xù)進行游戲</p><p><b>  }</b></p><p><b>  4. 卒(兵)</b></p><p>  int checkbing(int x1,int y1,int x2,int y2, int table[][10])</

44、p><p><b>  {</b></p><p>  if(table[x1][y1]>0)</p><p>  // 兵(卒)是否是甲方棋子(在上方)</p><p><b>  {</b></p><p>  if(table[x2][y2]>0)</p&

45、gt;<p>  // 控制棋子只能覆蓋對方棋子以分清敵我</p><p><b>  {</b></p><p>  printf("\n拜托,不能自己吃自己!!!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p&

46、gt;<b>  }</b></p><p><b>  if(x1<6)</b></p><p>  // 此時兵(卒)沒過河</p><p><b>  {</b></p><p>  if((y1==y2)&&(x2-x1==1))</p>

47、;<p>  // 控制棋子只能向前走</p><p><b>  {</b></p><p>  return 1; // 若符合規(guī)則則繼續(xù)游戲</p><p><b>  }</b></p><p><b>  else</b></p>

48、<p><b>  {</b></p><p>  printf("\n兵(卒)過河前只能向前走,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p

49、><b>  }</b></p><p><b>  else</b></p><p>  // 若此時兵(卒)已過河</p><p><b>  {</b></p><p>  if(((y1==y2)&&(x2-x1==1))||((y1-y2==1)

50、&&(x2==x1))||((y2-y1==1)&&(x2==x1)))</p><p>  // 控制棋子過河后只能向前或者向左、右移動</p><p><b>  {</b></p><p>  return 1; // 若符合規(guī)則則繼續(xù)游戲</p><p><b>

51、  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  printf("\n兵(卒)過河后只能向前走或者平移,不能后退,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則

52、錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  //

53、 判斷兵是否在乙方(在下方)</p><p><b>  {</b></p><p>  if(table[x2][y2]<0)</p><p>  // 控制棋子只能覆蓋對方棋子以分清敵我</p><p><b>  {</b></p><p>  printf(&q

54、uot;\n拜托,自己不能吃自己!!!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b></p><p><b>  if(x1>5)</b></p><p>  // 如果兵(卒)沒

55、過河</p><p><b>  {</b></p><p>  if((y1==y2)&&(x1-x2==1))</p><p>  // 控制棋子只能向前走</p><p>  return 1; // 若符合規(guī)則則繼續(xù)游戲</p><p><b>  els

56、e</b></p><p><b>  {</b></p><p>  printf("\n兵(卒)過河前只能向前走,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }<

57、/b></p><p><b>  }</b></p><p><b>  else</b></p><p>  // 如果兵(卒)已過河</p><p><b>  {</b></p><p>  if(((y1==y2)&&(x

58、1-x2==1))||((y1-y2==1)&&(x2==x1))||((y2-y1==1)&&(x2==x1))) </p><p>  // 控制棋子過河后只能向前或者向左、右移動</p><p>  return 1; // 若符合規(guī)則則繼續(xù)游戲</p><p><b>  else</b><

59、;/p><p><b>  {</b></p><p>  printf("\n兵(卒)過河后只能向前走或者平移,不能后退,重新輸入吧!\n");</p><p>  return 0; // 規(guī)則錯誤后出現(xiàn)提示信息并且返回0進行重新輸入</p><p><b>  }</b&

60、gt;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  五、運行結(jié)果</b></p><p>  1、游戲進入初始界面</p&

61、gt;<p>  進入游戲后顯示的初始界面截圖如下圖:</p><p>  圖3. 游戲初始界面</p><p>  2、游戲進行中的界面</p><p>  如下顯示了游戲進行中的界面截圖:</p><p>  圖4. 游戲進行過程中界面</p><p><b>  3、游戲結(jié)束</b&

62、gt;</p><p>  完成游戲后結(jié)束的界面截圖:</p><p><b>  圖5.游戲結(jié)束界面</b></p><p><b>  Ⅵ 小結(jié)</b></p><p>  兩周的課程設(shè)計結(jié)束了,這次的課程設(shè)計不僅檢驗了我們所學(xué)的知識,同時也培養(yǎng)了大家如何去把一件事情認認真真的做好。在整個設(shè)計過

63、程中,我們互相討論、互相學(xué)習(xí)、互相監(jiān)督。</p><p>  C語言程序設(shè)計是一門基礎(chǔ)性極強的計算機語言,它具有功能豐富、表達能力強、使用靈活方便、應(yīng)用面廣、目標(biāo)程序效率高、可移植性好,既具有高級語言的優(yōu)點,又具有低級語言的許多特點,既適于編寫系統(tǒng)軟件,又能方便的用來編寫應(yīng)用軟件。因此作為理工科院校的大學(xué)生,學(xué)好、用好C語言這個工具是一項最基本的要求,也是為日后的工作打下良好的基礎(chǔ)。</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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論