版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、目錄 TOC o 1-5 h z HYPERLINK l bookmark4 o Current Document 第一章:課程設(shè)計目的和要求2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的目的2數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實現(xiàn)的要求2 HYPERLINK l bookmark6 o Current Document 第二章:課程設(shè)計任務(wù)內(nèi)容32.1五子棋對弈系統(tǒng)3 HYPERLINK l bookmark8 o Current Document 第三章:詳細設(shè)計說明4功能設(shè)計4 HYPERLINK l bookmark10 o Current Document 五子棋對弈系統(tǒng)流程圖4 HYPERLINK l bookmark12
2、o Current Document 軟件中實現(xiàn)各項功能的函數(shù)與程序代碼 5 HYPERLINK l bookmark14 o Current Document 第四章:程序運行環(huán)境說明10 HYPERLINK l bookmark16 o Current Document 程序運行環(huán)境說明及出現(xiàn)的問題10運行結(jié)果10 HYPERLINK l bookmark21 o Current Document 第五章:課程設(shè)計心得與體會14附錄15 HYPERLINK l bookmark25 o Current Document 源程序:16五子棋第一章 課程設(shè)計目的和要求數(shù)據(jù)結(jié)構(gòu)課程設(shè)計的目的進一
3、步培養(yǎng)結(jié)構(gòu)化程序設(shè)計的思想,加深對高級系統(tǒng)語言基本語言要素和控制結(jié)構(gòu)的理解,針對數(shù)據(jù)結(jié)構(gòu)中的重點和難點內(nèi)容進行訓練,獨立完成有一定工作量的程序設(shè)計任務(wù),同時強調(diào)好的程序設(shè)計風格。此課程設(shè)計著眼于知識的運用,把平常學的知識運用到課程實踐中來,本身就是考察我們知識運用能力。要求熟悉運用一些編程軟件,對我們所學的理論知識進一步的深化。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計實現(xiàn)的要求使用C+語言編寫一個基于控制臺的簡單程序,使學生掌握簡單的程序設(shè)計技巧。同時設(shè)計一個簡單的五子棋對弈系統(tǒng),可以實現(xiàn)五子棋的基本功能,是一款娛樂用的小型程序。第二章 課程設(shè)計任務(wù)內(nèi)容2.1 五子棋對弈系統(tǒng)設(shè)計一個五子棋系統(tǒng)程序,實現(xiàn)對五子棋進行運
4、行?;疽螅何遄悠迨怯袃蓚€人在一盤棋上進行對抗的競技活動。在對局開始時,先由用戶選擇哪方開局,先開局一方將一枚棋子落在一點上,然后由另一方在對方棋周圍交叉點上落子,如此輪流落子,知道某一方首先在棋盤的直線、橫線或斜線上形成連續(xù)的五子則該方程就算獲勝。此時算法結(jié)束,當有任何一方退時出,都可在算法中實現(xiàn)。第三章詳細設(shè)計說明功能設(shè)計1)由兩個玩家分別下棋,當某一玩家五子相連,則贏。(2)界面要求:初始狀態(tài)顯示棋盤,并顯示兩個玩家的操作鍵及初始玩家名稱;游戲進行狀態(tài)一一動態(tài)顯示棋盤,不同玩家的棋子用不同符號顯示,屏幕 上顯示當前玩家號,結(jié)束時顯示贏家名稱。白(黑)子在水平 方向是否大于4五子棋對弈系
5、統(tǒng)流程圖子在垂直方向是否白(黑)子在正對角線方向是否大于 4白(黑)方獲勝白(黑)方獲勝進入 選擇 是否 重新 開局 框判斷該位是軟件中實現(xiàn)各項功能的函數(shù)與程序代碼主要函數(shù)、結(jié)構(gòu)體和鏈表Inta;/紀錄坐標位置Intb;/紀錄坐標位置CharachBoardij , /用于在【a】【b】處落子chSort; /棋子的類別IntnWin/贏棋的次數(shù)類的使用:classCGobangprivate:charchSort;/其子的類另1JintnWin;/贏棋的次數(shù)intnLose;/輸棋的次數(shù)staticintnDraw;/平局次數(shù)public:staticcharachBoard1919;/fi
6、盤staticintnSize;/R盤的尺寸 nSize*nSizeCGobang(charchsort)/構(gòu)造函數(shù),決定一方棋子的類別 chSort=chsort;nWin=nLose=nDraw=0;friendvoidhuiqi();/ 悔棋staticvoidsavefile();/將棋盤保存至文件 staticvoidreadBoard();/R 文件中讀入棋盤 voidcontinute();/接著上次的游戲玩 voidPlayTurn(void);走一步棋intJudge();/判斷是否連成五子,是則返回1voidWin(void);/ 贏棋voidLose(void);/輸棋s
7、taticvoidDraw(void);/ 平局voidPrintlnfo(void);/ 打印總體情況staticvoidPrintBoard(void);/輸出棋盤staticintGetFull(void);判斷棋盤是否一滿staticvoidlnitialBoard(void);/ 初始化棋盤;本次程序設(shè)計主要設(shè)計了五個模塊.繪制棋盤模塊當游戲初始化時,和每當落子消息觸發(fā)時,都需要對棋盤進行重繪。這里用特殊符 號“o” ”分別來描繪白子、黑子。這個函數(shù)主要完成了以下工作:裝載棋盤二位數(shù)組并進行繪制。根據(jù)棋盤數(shù)據(jù)繪制棋子。繪制最后落子指示規(guī)矩。繪制棋牌;定義變量 i, ji=0 ; i+
8、inSize 退出循 環(huán)YesinSize 退出循環(huán)輸出YesNo“輸出”“輸出”No判斷:achBoardij=0完成掃描1行;輸出換行符棋盤繪制結(jié)束圖3-3.鍵盤操作控制模塊此模塊主要用于處理與用戶的交互過程。即完成落子判斷過程此模塊主要完成以下工作:和移動是否超出棋盤范圍判斷是否在棋盤內(nèi)按落子鍵,判斷落子點是否已有棋子。.判斷勝負模塊這是游戲中一個極其重要的算法,用來判斷當前棋盤的形勢是哪一方獲勝。五子棋的勝負,在于判斷棋盤上是否有一個點,從這個點開始的右、下、右下、左下四個方向是否有連續(xù)的五個同色棋子出現(xiàn),如圖:圖3-5判斷勝負方向這個算法是本系統(tǒng)里的nWin成員函數(shù)。需要它接受一個棋
9、子顏色的參數(shù),然后返回 一個布爾佰,這個值指示是否勝利。.橫向判斷流程圖“一一”將achBoardNN中每一個落子位都置為無子狀態(tài)(0)。默認的先手順序是黑子先手,置 player=1 。5.游戲結(jié)束模塊這一模塊主要用于釋放內(nèi)存,用輸出流語句輸出結(jié)束信息,并控制循環(huán)退出程序第四章程序運行環(huán)境說明程序運行環(huán)境說明及出現(xiàn)的問題該程序可以實現(xiàn)對學生信息的錄入和顯示,可以采用 Dev-c 或者 VisualC+運行,可以實現(xiàn)簡單的界面化,使程序方便使用和修改。運行結(jié)果軟件使用結(jié)果.進入游戲-主界面圖 4-1.點擊1 f開始游戲圖 4-2.繼續(xù)點擊1或2f游戲過程中圖 4-3. 判斷勝負圖 4-4.在主
10、界面中點擊0f退出游戲圖 4-6第五章課程設(shè)計心得與體會課程設(shè)計是培養(yǎng)學生綜合運用所學知識 , 發(fā)現(xiàn) , 提出 , 分析和解決實際問題 , 鍛煉實踐能力的重要環(huán)節(jié) , 是對我們的實際工作能力的具體訓練和考察過程. 隨著科學技術(shù)發(fā)展的日新月異,當今計算機應(yīng)用在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握程序開發(fā)技術(shù)是十分重要的,而C+胡言又是最常見,功能最強大的一種高級語言,因此做好C+郵言課程設(shè)計是十分必要的。通過幾周的課程設(shè)計使我們懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務(wù),從而提高自己
11、的實際動手能力和獨立思考的能力。在設(shè)計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做這么長的程序設(shè)計,難免會遇到過各種各樣的問題,同時在設(shè)計的過程中發(fā)現(xiàn)了自己的不足之處,對一些前面學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次課程設(shè)計之后,我們把前面所學過的知識又重新溫故了一遍。我做的是五子棋設(shè)計,雖然是很簡單的一個小的程序,但對我來說卻是一個很大的困難。更加是第一次做課程設(shè)計,所以做了一個下午卻絲毫沒有進展,最主要是不知從何開始,這個時候才知道上課老師們不厭其煩的教導是多么的寶貴,這個時候才后悔上課的時候沒有認真的聽講??墒乾F(xiàn)在一切都晚了,還好時間還算是充裕,只好拿出書本重新復習一
12、下。開始的時候真的感覺編程是一件很無聊的事情,不過當一個程序運行成功的時候那種喜悅是無法言語的,那種成就感是無法比擬的。又經(jīng)過幾天的努力,終于把程序完成了,盡管程序還是有很多功能上的欠缺和漏洞,可我還是很高興的。無論如何是自己的勞動成果,是自己經(jīng)過努力得到的成績,同時也是學習C+郵言的一次實踐作業(yè),自己進步的證明。在課程設(shè)計過程中,收獲知識,提高能力的同時,我也學到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學習的過程中,我一定會把課程設(shè)計的精神帶到生活中,不畏艱難,勇往直前!附錄 1:參考文獻1、譚浩強著.
13、C+程序設(shè)計教程.清華大學出版社2、陳維興林小茶編著.C+面向?qū)ο蟪绦蛟O(shè)計.中國鐵道出版社3、田淑清 ,C 語言程序設(shè)計, 北京:高等教育出版社,2006 年 1 月4、 DavidJ.Kruglinski,ScotWingo,GeorgeShepherd,VisualC+6.0 技術(shù)內(nèi)幕 (第五版 ), 希望圖書室譯, 北京:北京希望電子出版社,2001 年 1 月源程序:#include#include#include#include inta90,b90;/ 定義全局數(shù)組intk=0;usingnamespacestd;classCGobang/ 棋子類private:charchSor
14、t;/ 棋子的類別intnWin;/ 贏棋的次數(shù)intnLose;/ 輸棋的次數(shù) staticintnDraw;/ 平局次數(shù) public:staticcharachBoard1919;/ 棋盤 staticintnSize;/ 棋盤的尺寸 nSize*nSizeCGobang(charchsort)/ 構(gòu)造函數(shù),決定一方棋子的類別 chSort=chsort;nWin=nLose=nDraw=0;friendvoidhuiqi();/ 悔棋 staticvoidsavefile();/ 將棋盤保存至文件 staticvoidreadBoard();/ 從文件中讀入棋盤 voidcontinu
15、te();/ 接著上次的游戲玩 voidPlayTurn(void);/ 走一步棋intJudge();/ 判斷是否連成五子,是則返回 1voidWin(void);/ 贏棋 voidLose(void);/ 輸棋staticvoidDraw(void);/ 平局 voidPrintInfo(void);/ 打印總體情況 staticvoidPrintBoard(void);/ 輸出棋盤 staticintGetFull(void);/ 判斷棋盤是否一滿 staticvoidInitialBoard(void);/ 初始化棋盤;charCGobang:achBoard1919;intCGoba
16、ng:nSize=0;intCGobang:nDraw=0; voidCGobang:Draw()coutnntt 平局 !nn;nDraw+;)voidCGobang:lnitialBoard()/初始化棋盤( for(inti=0;inSize;i+)for(intj=0;jnSize;j+) achBoardij=; )voidCGobang:PrintBoard()/ 輸出棋盤 ( intij;coutendl;coutsetw(5)endl;for(i=1 ;i=nSize;i+) ( coutsetw(4)i;)coutendl;for(i=0;inSize;i+) ( couts
17、etw(3)endl; couti+1;for(j=0;jnSize;j+)coutachBoardij|; coutendl;)intCGobang:GetFull()/判斷棋盤是否一滿,若是返回1(for(inti=0;inSize;i+)for(intj=0;jnSize;j+) if(achBoardij=) returnO; returnl;)voidCGobang:Win()/ 贏棋(coutnnttchSort 方獲勝! nn;nWin+;)voidCGobang:savefile()/將棋盤保存至文件(ofstreamoutfile(C+.txt,ios:out); if(!o
18、utfile)cerropenfileerror!endl;exit(1);for(inti=0;inSize;i+)for(intj=0;jnSize;j+)outfile.write(char*)&achBoardij,sizeof(achBoardij);outfile.close();voidCGobang:Lose()/ 輸棋nLose+;voidCGobang:PlayTurn(void)/ 走一步棋intnRow,nCol;charchoice1,choice2; docoutt 現(xiàn)在該 chSortnRownCol;if(nRownSize|nColnSize)coutt輸入的
19、坐標越界,x與y的范圍應(yīng)小于等于nSize0&nCol0&achBoardnRow-1nCol-1!=)coutt 棋盤 (nRow,nCol) 處已有棋子,請重新輸入n;elseif(nRow=-1)huiqi();elseif(nRow=0&nCol=0)coutchoice1;if(choice1=y|choice1=Y)coutchoice2;if(choice2=y|choice2=Y)CGobang:savefile();coutt 保存成功,歡迎下次再玩!n;exit(1);elsecoutt 游戲結(jié)束,歡迎再次使用五子棋游戲!;coutendl;exit(0);elseachB
20、oardnRow-1nCol-1=chSort;ak=nRow-1;bk=nCol-1;k+;break;while(1);intCGobang:Judge()/ 判斷是否連成五子,是則返回 1inti,j;for(i=0;inSize;i+)for(j=0;jnSize;j+)if(achBoardij=chSort)if(j+4nSize)if(achBoardij+1=chSort&achBoardij+2=chSort&achBoardij+ 3=chSort&achBoardij+4=chSort) return1;if(i+4nSize)if(achBoardi+1j=chSort
21、&achBoardi+2j=chSort&achBoardi+3 j=chSort&achBoardi+4j=chSort) return1;if(i+4nSize&j+40&j+4nSize)(if(achBoardi-1j+1=chSort&achBoardi-2j+2=chSort&achBoardi-3j+3=chSort&achBoardi-4j+4=chSort)return1;return0;voidCGobang二PrintInfo(void)/打印總體情況(coutSizechSort 方共計贏nWin局,輸nLose局,平 nDraw局。endl;voidCGobang:r
22、eadBoard()/以二進制形式從文件中讀出棋盤(ifstreaminfile(C+.txt,ios:in);if(!infile)(cerropenfileeror!endl;exit(1); else(for(inti=0;inSize;i+)for(intj=0;jnSize;j+)infile.read(char*)&achBoardij,sizeof(achBoardij);infile.close();voidhuiqi()/ 悔棋(k-;CGobang二achBoardakbk=;k-;CGobang二achBoardakbk=;CGobang二PrintBoard();voi
23、dPrintRule(void)/打印游戲規(guī)則(t nn;couttt歡迎使用五子連珠游戲!endlendl;t nn;coutt 游戲規(guī)則 :endl;coutt1.每1步輸入要下棋子的格子的 x,y坐標,按Enter鍵n; TOC o 1-5 h z coutt2. 有 1 方首先 5 個棋子連成一線即判獲勝n;coutt3. 當旗子布滿棋盤但仍無獲勝方即為平局n;coutt4. 一局結(jié)束后,若想繼續(xù)按 Y鍵,若退出則按其他鍵n”;coutt5. 若想中途退出游戲,請輸入(0,0) ,再按照提示保存游戲n;coutt6. 悔棋請輸入(-1,0)n;coutt6.X 方先行 n;coutnn
24、tt 請按任意鍵開始下棋! nn;intJudgePlay(CGobang&SideX,CGobang&SideO)/ 每下一步要進行輸贏的判斷,有贏的則返回 1if(SideX.Judge()/X 方獲勝SideX.Win();SideO.Lose();return1;elseif(SideO.Judge()/O 方獲勝SideO.Win();SideX.Lose();return1;else return0;voidPlay(CGobang&SideX,CGobang&SideO)/ 開始一局游戲while(1)system(cls);coutt*n;t.悔棋請輸入(-1,0)n;t . 中途退出請輸出 (0,0), 并根據(jù)提示保存n;coutt*n;CGobang:PrintBoard();/ 輸出棋盤SideX.PlayTurn(
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年限公司間長期合作協(xié)議樣式
- 齊魯工業(yè)大學《Python程序設(shè)計》2022-2023學年期末試卷
- 信用證貿(mào)易融資合同
- 實驗室安全應(yīng)知應(yīng)會600題及答案
- 橡膠制品行業(yè)的產(chǎn)值與銷售額分析考核試卷
- 橡膠零件的耐酸堿性能探討考核試卷
- 建筑裝飾與綠色建筑評價考核試卷
- 建筑裝飾色彩與情感共鳴表達考核試卷
- 木材在化工與制藥中的應(yīng)用考核試卷
- 污水廢棄資源的綜合利用與產(chǎn)業(yè)化考核試卷
- 拼音復習-拼音轉(zhuǎn)盤課件
- 項目進度管理培訓(-)課件
- 高考語文 如何讀懂詩歌 課件(32張PPT)
- 中壓交聯(lián)電纜電纜正、負和零序計算
- 3C戰(zhàn)略三角模型
- 高標準農(nóng)田建設(shè)示范工程質(zhì)量管理體系與措施
- 學生頂崗實習安全教育課件
- 公司組織架構(gòu)圖模板課件
- 遼寧省葫蘆島市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 植物種子的傳播方式課件
- 電纜敷設(shè)施工方案及安全措施
評論
0/150
提交評論