五子棋游戲程序設(shè)計報告_第1頁
五子棋游戲程序設(shè)計報告_第2頁
五子棋游戲程序設(shè)計報告_第3頁
五子棋游戲程序設(shè)計報告_第4頁
五子棋游戲程序設(shè)計報告_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 計算機學院網(wǎng)絡(luò)工程專業(yè)程序設(shè)計綜合課程設(shè)計報告 (2011/2012學年 第一學期)學生姓名: 學生班級: 網(wǎng)絡(luò)工程學生學號: 指導教師: 2011年12月30日 雙人五子棋目錄第一章 課程設(shè)計目的和要求 11.1課程設(shè)計的目的 11.2課程設(shè)計的要求 1第二章 課程設(shè)計任務(wù)內(nèi)容 22.1課程設(shè)計的主要內(nèi)容 2 2.2系統(tǒng)設(shè)計原則 2第三章 設(shè)計說明 33.1游戲分析和介紹 33.1.1游戲分析33.1.2游戲介紹33.2重點模塊說明 33.2.1棋盤界面Showboard()33.2.2下棋Play()43.2.3覆蓋棋盤Recoverboard()73.2.4游戲結(jié)束后初始化棋盤Unit

2、board() 73.2.5保存棋盤CopyB()83.3函數(shù)清單83.4接口 9第四章 軟件使用說明 104.1測試 104.2限制條件 13第五章 課程設(shè)計心得體會14附錄一 程序流程圖15附錄二 程序代碼16附錄三 參考文獻26第一章 課程設(shè)計目的和要求1.1課程設(shè)計的目 1,學習綜合運用C語言課程和其他相關(guān)課程的知識,提高分析解決實際問題的能力,進一步鞏固、加深和拓寬所學的知識,進一步加強結(jié)構(gòu)化程序設(shè)計的思想,加深對高級語言基本語言要素和控制結(jié)構(gòu)的理解。 2,全面系統(tǒng)的學習面向?qū)ο蟪绦蛟O(shè)計的基本概念、基本語法和編程方法,與同學合作設(shè)計整套程序,并且獨立完成一定工作量的程序設(shè)計. 3,掌

3、握程序設(shè)計中的常用算法和C語言的程序技巧,培養(yǎng)良好的程序設(shè)計風格。 4,運用所學的知識了解五子棋游戲的制作結(jié)構(gòu),將所學的知識運用于實踐中。1.2課程設(shè)計的要求 1,與同學合作設(shè)計、編制、調(diào)試出一款雙人五子棋游戲,并單獨完成其中一定量的函數(shù)模塊。 2,要求該游戲具有趣味性和可操作性,能夠正常運行。其中用到C+語言中的各種語句、結(jié)構(gòu)。(如其中需要注意全局變量和局部變量的申明,數(shù)組的使用等) 3,雙人五子棋要求能夠進入歡迎界面,二人對弈,當有五顆同色棋子相連時,判斷出輸贏等一系列游戲流程。第二章 課程設(shè)計任務(wù)內(nèi)容2.1課程設(shè)計的主要內(nèi)容 任務(wù)內(nèi)容就是設(shè)計一款老少皆宜、能夠鍛煉個人策略謀劃能力、較為傳

4、統(tǒng)的五子棋。棋盤為16*16,棋子放在交叉點兒上,兩人各執(zhí)一色,輪流下棋,先將橫、豎、斜線上的五個同色棋子練成不間斷的一排則勝出。2.2系統(tǒng)設(shè)計原則 1,系統(tǒng)性。系統(tǒng)作為統(tǒng)一整體而存在,因此,在設(shè)計中,要從系統(tǒng)的角度考慮。系統(tǒng)的代碼要統(tǒng)一,傳遞語言要盡可能一致。 2,可靠性??煽啃允侵赶到y(tǒng)抵御外界干擾的能力及外界干擾時的恢復能力。 3,規(guī)范性。游戲的運用以吸引玩家的樂趣為前提,一方面,系統(tǒng)設(shè)計應(yīng)盡量避免不必要的復雜化,另一方面模塊應(yīng)盡量簡潔,以縮短處理流程。第三章 設(shè)計說明3.1游戲分析和介紹3.1.1 游戲分析 該五子棋程序基本上實現(xiàn)了五子棋游戲的功能,有雙方下棋之前的歡迎界面及下棋過程中的

5、棋盤界面,還有最終會判斷出輸贏。同時,該游戲采用了二維坐標實現(xiàn)的,明了易懂,方便玩家在游戲過程中的基本操作,使游戲更加簡便。細節(jié)方面,該程序有實時儲存功能,隨時記錄。另外考慮到游戲挺簡單的,就沒有設(shè)置悔棋的相關(guān)模塊。3.1.2 游戲介紹 該游戲是簡單的雙人五子棋,所實現(xiàn)的功能是能夠顯示歡迎界面,選擇是否進行游戲,進入游戲界面以后,玩家開始下棋。玩家輸入坐標則會在棋盤上顯示棋子,(若是輸入的坐標超出棋盤或者該位子已經(jīng)有子則會提示玩家重新輸入坐標位子),若輸入<0,0>則退出游戲。3.2重點模塊說明3.2.1 棋盤界面Showboard() 出現(xiàn)棋盤的界面,對棋盤上每一個點進行定位,并

6、在棋盤上顯示相關(guān)的信息。相關(guān)代碼如下:int Showboard()/棋盤界面system("CLS");cout << " "for(int s=1;s<=16;s+)if(s>=10) cout << s-10 << " " else cout << s << " " cout << endl;for(i=0;i<16;i+)printf("%2d",i+1);for(j=0;j<16;j+)co

7、ut << mapij;if(i=6)cout << "退出:輸入: 0 0 "if(i=8)cout << "步數(shù)(Step):" << Step;if(i=12)cout << "制作人:吳憶蕓 余迎香。" if(i=14)cout << "請輸入棋子的縱坐標、橫坐標下子!" ; cout << endl;return(1);3.2.2下棋Play() 在這個小游戲中,黑方先下棋,然后可以輪流進行。而在Play()這個函數(shù)中會調(diào)

8、用各個函數(shù),如最初的歡迎界面Interface(),每顆棋子的保存CopyB(),判斷棋子的位子是否合法bool legal() bool Overflow(),判斷同色五顆棋子是否連成一條線judgewin() 相關(guān)代碼如下:int Play()char a03=""char a13=""Showboard();cout << "黑方下:"<<endl;while(cout<<"輸入縱坐標:",cin >> x,cout<<"輸入橫坐標:&qu

9、ot;,cin >> y)if(x=0&&y=0)Recoverboard();Interface();break;if(Overflow()continue;if(legal() x-;y-;if(flag=1)/輸入的是白棋mapxy0=a00;mapxy1=a01;Step+;Showboard();if(judgewin()cout << "n綠方勝利了!n" ; cout << "游戲結(jié)束了! -是否重來?(y/n)"cin >> Switch;if(Switch!='n&

10、#39;)unitboard();Play();else return 1;cout << "黑方下:"<<endl;flag=0;elsemapxy0=a10;mapxy1=a11;Step+;Showboard();if(judgewin()cout << "n黑方勝利了!" << endl;cout << "游戲結(jié)束了! -是否重來?(y/n)"cin >> Switch;if(Switch!='n')unitboard();Play();

11、else return 1;cout << "綠方下:"<<endl;flag=1;else cout << "It already have a chessman!Please Reenter:n此位置已有子!請重新輸入:"3.2.3 覆蓋棋盤Recoverboard() 當一盤棋下完選擇重來的時候,會出現(xiàn)一個最初的棋盤界面覆蓋掉目前存在的棋盤,從而使棋盤達到清屏的效果,但是卻能夠保存所下的棋的步數(shù)。 相關(guān)代碼如下:void Recoverboard()/覆蓋棋盤,使棋盤恢復到原始狀態(tài)Step=0;for(i=0;i

12、<16;i+)for(j=0;j<16;j+)mapij0=copymapij0; mapij1=copymapij1;3.2.4 游戲結(jié)束后初始化棋盤Unitboard() 相關(guān)代碼如下:int unitboard()/游戲結(jié)束后界面初始化for(int i=0;i<16;i+)for(int j=0;j<16;j+)mapij0=copymapij0;mapij1=copymapij1;return 1;3.2.5 保存棋盤CopyB() 這個函數(shù)看起來貌似可以沒有,但是,卻是不可缺少的。它所實現(xiàn)的是對棋盤的保存,若是沒有這個函數(shù),最終將判斷不出勝負。 相關(guān)代碼如下

13、:void CopyB()/調(diào)用字符數(shù)組保存原始棋盤for(i=0;i<16;i+)for(j=0;j<16;j+)copymapij0=mapij0;copymapij1=mapij1;3.3函數(shù)清單char map16168/繪制16*16的棋盤copymap16168/在重新玩一局游戲的時候顯示最初的空棋盤Showboard()/棋盤界面棋盤界面/最初的歡迎界面unitboard()/游戲結(jié)束后棋盤初始化judgewin()/判斷輸贏Play()/下棋Recoverboard()/覆蓋棋盤legal()/判斷棋子是否合法Overflow()/判斷棋子是否在棋盤內(nèi)部3.4函數(shù)接

14、口Int mainSystem titleSystem color()Systemmode()CopyB()Interface()Overflow歡迎界面RecoverboardPlay()JudgewinSnowboardLegal圖3-1第四章 軟件使用說明4.1測試 如下所示,是運行過程中的各種界面顯示: 1,如圖所示是五子棋的歡迎界面圖4-1 2,選擇“1”時則出現(xiàn)如下棋盤界面圖4-2 3,選擇“2”時,出現(xiàn)如下界面圖4-3 4,進入棋盤界面下棋,當該位子已經(jīng)有子的時候,界面顯示如下圖4-4 5,進入棋盤界面下棋,當輸入的坐標超出棋盤時,界面顯示如下:圖4-5 6,當五顆同色的棋子相連

15、的時候,界面顯示如下:圖4-6 7,選擇“y”時,回到空棋盤,顯示如下:圖4-7 8,當選擇“n”時,會出現(xiàn)如下界面:圖4-84.2 限制條件 這個游戲由于比較小,而且是雙人對戰(zhàn),所以沒有設(shè)計悔棋這一步驟。這是一個相當大的限制。另外,只能是人人對戰(zhàn),而實現(xiàn)不了人機對戰(zhàn)。第五章 課程設(shè)計心得體會 在本次課程設(shè)計中,不僅讓我認識到自己學習上的不足,也通過請教其他同學何老師學會了修改并運行程序,還讓自己復習了編程的知識,對遇見的眾多問題,通過思考,耐心動手解決問題,在課程設(shè)計期間我也學到了課本中學不到的知識,明白了只有通過自己不斷地動手實踐才能找出不足、找出問題和提高自己的能力,發(fā)現(xiàn)課程設(shè)計是我學習

16、和掌握專業(yè)知識的好方法,讓自己變得活躍,也會看明白程序問題,本次受益匪淺。 最后,感謝王艷老師的悉心指導,交給我的程序設(shè)計的思想和知識。這次課程設(shè)計要感謝老師和同學為我提出了很多的寶貴意見,給我講解了我很多不懂得知識及應(yīng)用方法,為我更好的完成報告付出了辛勤的勞動。附錄一 程序流程圖附錄二 程序代碼#include<iostream>#include<conio.h> #include<stdlib.h> #include<time.h> #include<dos.h> #include<windows.h> using n

17、amespace std;int x,y,Step=0;bool flag=0;int i,j;char Switch;char map16168="","","","","","","","","","","","","","","","","","

18、;","","","","","","","","","","","","","","","","","","","","","","","

19、","","","","","","","","","","","","","","","","","","","","","","","&

20、quot;,"","","","","","","","","","","","","","","","","","","","","","","&q

21、uot;,"","","","","","","","","","","","","","","","","","","","","","","&qu

22、ot;,"","","","","","","","","","","","","","","","","","","","","","","&quo

23、t;,"","","","","","","","","","","","","","","","","","","","","","",""

24、;,"","","","","","","","","","","","","","","","","","","","","","",""

25、,"","","","","","","","","","","","","","","","","","","","","","","",

26、"","","","","","","","","","","","","","","","","","","","","","","",&

27、quot;","","","","","","","","","","","","","","","","","","","","","","",&q

28、uot;","","","","","","",""char copymap16168;/保存棋盤初始狀態(tài),恢復初始狀態(tài)int Showboard(),Interface(),unitboard(),judgewin(),Play();/棋盤界面,最初的歡迎界面,游戲結(jié)束后初始化棋盤,判斷輸贏,下棋void Recoverboard(); /覆蓋棋盤bool legal(),Overflow();/判斷位子是否合法,判斷位子是否在棋盤內(nèi)部int

29、Interface()char a;cout << "nn 五子棋游戲n ttntt n"cout << "" << endl;cout << " " << endl;cout << " 1:Two Person Games " << endl;cout << " (人人對戰(zhàn)) " << endl;cout << " " << endl;cout

30、 << " 2: Exit " << endl;cout << " (退出) " << endl;cout << " " << endl;cout << "" << endl;cout << "nPlease select(請選擇):"cin >> a;if(a='1')Play();else cout << "nn(謝謝使用?。﹏&quo

31、t; cout << "按任意鍵退出!"getch();return 0;return 1;void Recoverboard()/恢復到棋盤原始狀態(tài)Step=0;for(i=0;i<16;i+)for(j=0;j<16;j+)mapij0=copymapij0; mapij1=copymapij1;void CopyB()/調(diào)用字符數(shù)組保存原始棋盤for(i=0;i<16;i+)for(j=0;j<16;j+)copymapij0=mapij0;copymapij1=mapij1;int unitboard()/游戲結(jié)束后界面初始化fo

32、r(int i=0;i<16;i+)for(int j=0;j<16;j+)mapij0=copymapij0;mapij1=copymapij1;return 1;int judgewin()/判斷輸贏,每次向兩個方向檢查,兩個方向間距大于5就返回1,否則返回0int cx,cy,dx,dy;char a,a03="",a13=""if(flag=1)a=a01;elsea=a11;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx-;cy-;/向左上檢測if(cx<0|cy<0)break;whil

33、e(mapdxdy1=a)dx+;dy+;/向右下檢測if(dx>15|dy>15)break;if(dx>=(cx+6)|dy>=(cy+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx-;/向上豎直檢測if(cx<0)break;while(mapdxdy1=a)dx+;/豎直向下檢測if(dx>15)break;if(dx>=(cx+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cy-;/水平向左檢測if(cy<0)break;while(

34、mapdxdy1=a)dy+;/水平向右檢測if(dy>15)break;if(dy>=(cy+6)return 1;cx=x;cy=y;dx=x;dy=y;while(mapcxcy1=a)cx+;cy-;/向左下方檢測if(cx>15|cy<0)break;while(mapdxdy1=a)dx-;dy+;/向右上方檢測if(dx<0|dy>15)break;if(cx>=(dx+6)|dy>=(cy+6)return 1;return 0;int Showboard()/棋盤界面system("CLS");cout &l

35、t;< " "for(int s=1;s<=16;s+)if(s>=10) cout << s-10 << " " else cout << s << " " cout << endl;for(i=0;i<16;i+)printf("%2d",i+1);for(j=0;j<16;j+)cout << mapij;if(i=6)cout << "退出:輸入: 0 0 "if(i=8)c

36、out << "步數(shù)(Step):" << Step;if(i=12)cout << "制作人:吳憶蕓 余迎香。" if(i=14)cout << "請輸入棋子的縱坐標、橫坐標下子!" ; cout << endl;return(1);bool legal()/判斷位置是否合法char a03=""char a13=""if(mapx-1y-11=a01)|(mapx-1y-11=a11)return 0;else return 1; bool Overflow()/判斷棋子位子是否在棋盤內(nèi)if(x>16|x<1|y>16|y<1)cout << "此位置不合法!請重新輸入:"<<endl;return 1; else return 0;int Play()char a03=""char a13=""Showboard();cout << "黑方下:&qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論