版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國象棋棋譜設(shè)計java課程設(shè)計
- java課程設(shè)計---中國象棋對弈系統(tǒng)
- java課程設(shè)計---中國象棋對弈系統(tǒng)程序
- 中國象棋游戲的設(shè)計與實現(xiàn)課程設(shè)計
- 中國象棋(設(shè)計)
- 中國象棋入門課程綱要
- 中國象棋
- 中國象棋游戲設(shè)計
- c語言課程設(shè)計 (2)
- 中國象棋教案
- 中國象棋教案
- 中國象棋殘局大全
- 中國象棋入門教案
- 校本教材中國象棋
- 中國象棋入門教案
- 【課程設(shè)計】c語言課程設(shè)計
- 中國象棋博弈系統(tǒng)畢業(yè)設(shè)計
- c語言進制轉(zhuǎn)換課程設(shè)計 (2)
- 中國象棋博弈系統(tǒng)畢業(yè)設(shè)計
- vc中國象棋算法設(shè)計與實現(xiàn)
評論
0/150
提交評論