



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、C語言程序設(shè)計報告題目:貪吃蛇游戲的程序設(shè)計院系:西語學(xué)院英語教育 6 班姓名:學(xué)號:1.1題目:設(shè)計貪吃蛇小游戲1.2題目的要求:玩家通過鍵盤控制蛇在地圖上尋找食物,蛇吃下食物, 可以加分, 碰到四壁游戲結(jié)束。1.3設(shè)計的步驟:分析設(shè)計題目的要求,即需求分析??傮w設(shè)計,確定所需模塊及模塊間調(diào)用關(guān)系,定義系統(tǒng)中使用的數(shù)據(jù)類型。詳細設(shè)計,確定每個模塊的功能,繪制主要函數(shù)的流程圖。編寫程序代碼, 調(diào)試程序使其能正確運行。 要求書寫規(guī)范, 注意采用縮進格式。函數(shù)名、變量名要見文曉意,注釋要簡而不失、詳而不綴。設(shè)計完成的軟件要便于操作和使用。程序測試,發(fā)現(xiàn)程序中存在的錯誤并改正。完成報告。2 詳細設(shè)計
2、說明2.1課程設(shè)計的要求:通過游戲程序設(shè)計,提高編程興趣與編程思路,鞏固C語言中所學(xué)的知識,合理的運用資料,實現(xiàn)理論與實際相結(jié)合。收集資料,分析課題,分解問題,形成總體設(shè)計思路;對于設(shè)計中用到的關(guān)鍵函數(shù), 要學(xué)會通過查資料, 弄懂其用法, 要聯(lián)系問題進行具體介紹;上機調(diào)試,查錯,逐步分析不能正常運行的原因,確保所設(shè)計的程序正確,并且能正常運行;完成課程設(shè)計報告。2.2程序的功能:貪吃蛇游戲是一個經(jīng)典小游戲,一條蛇在封閉圍墻里,圍墻里隨機出現(xiàn)一個食物,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞倒食物,則食物被吃掉,蛇身體長一節(jié),同時記 10 分,接著又出現(xiàn)食物,等待蛇來吃,如果蛇在
3、移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結(jié)束。2.3課程設(shè)計的思想 :程序關(guān)鍵在于表示蛇的圖形及蛇的移動。用一個小圓點來表示蛇的一節(jié)身體,身體每長一節(jié),增加一個圓點,蛇頭用四節(jié)來表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當(dāng)前方向上前移,如果按與蛇運動方向相反的方向鍵,此游戲就會暫停,再按想前的方向鍵才能繼續(xù)游戲,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節(jié)身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動,圖形的實現(xiàn)是從蛇頭新位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節(jié)身體,所
4、以將蛇的最后一節(jié)用背景色覆蓋。食物的出現(xiàn)與消失也是畫一個圓點和覆蓋原來的圓點。為了便于理解,定義兩個結(jié)構(gòu)體:食物與蛇。2.4設(shè)計程序中的調(diào)試過程在調(diào)試過程中,遇到了很多的問題,比如,因為使用的刷屏函數(shù),所以屏幕經(jīng)常出現(xiàn)閃爍的情況,但是通過我和我的伙伴們的共同努力和學(xué)習(xí),通過網(wǎng)上和書籍的查閱,我們也得到了很多的收獲,我們的小組也在中真正的學(xué)會了很多的東西,這次實訓(xùn)給我們帶來了很大的收獲。 可以按照程序運行的錯誤提示對原程序進行修改,在調(diào)試過程中有時也會遇到不懂的問題,我去圖書館或上網(wǎng)查閱一些資料或者是向老師請教也解決了對源程序一一修改直到運行成功。2.5設(shè)計的流程圖總程序設(shè)計圖如圖1 所示:歡迎
5、詞和游戲開始游戲初試化界面和方向鍵Y控制是否吃到NNY蛇變長,并總Y是否碰壁游戲結(jié)N圖 1程序設(shè)計流程圖方向鍵控制的設(shè)計流程圖如圖2 所示:其中 upmove函數(shù)控制蛇向上運動, downmove函數(shù)控制蛇向下運動, leftmove 函數(shù)控制蛇向左運動, rightmove 函數(shù)控制蛇向右運動。按方向按方向按方向按方向則使用函數(shù)則使用函數(shù)則使用函數(shù)則使用函數(shù)通過方向鍵圖 2 方向鍵控制方向鍵控制的設(shè)計流程圖蛇吃食物蛇身變長的設(shè)計流程圖如圖3 所示:通過控制部N是否能Y通過使用函數(shù):Count+score=(count圖 3蛇吃食物蛇身變長的設(shè)計流程圖2.6程序的總體設(shè)計思想利用人工繪圖法 ,
6、 制作美觀的游戲界面.通過隨機函數(shù)產(chǎn)生隨機數(shù), 控制游戲過程食物的出現(xiàn).定義鍵盤操作 , 控制游戲過程蛇的移動方向.畫出邊界 , 并判斷游戲是否結(jié)束.統(tǒng)計游戲過程蛇吃的食物數(shù)量, 計算并輸出游戲成績.3 軟件的使用說明3.1 建立游戲的過程說明先打開 Microssft Visual C+程序,進入Microssft Visual C+程序后打開文件菜單,點機新鍵命令按鈕,先建立一個Win32 Console Application工程,建立工程時可填寫工程名稱和你所建工成要存放的位置,點機確定按鈕, 再點機一個空工程類型的控制臺程序,再點機完成,然后點機確定按鈕,此時一個所要建立的工程就已經(jīng)
7、建立好,然后再點機文件中的新建按鈕,然后再建立一個C+ SourceFile文件,并填寫文件名稱,然后點機確定按鈕,此時所要建立的工程和文件都已建立完畢, 此時您就可以把貪吃蛇游戲的代碼復(fù)制粘貼到你剛剛建立的工程和文件里面了, 然后點機組建命令中的編譯和組建命令,最后點機執(zhí)行命令就可進入貪吃蛇游戲中了。3.2執(zhí)行游戲的過程說明進入貪吃蛇游行中后,首先彈出一個界面,上面出現(xiàn)的是歡迎詞和游戲的簡單說明,可點機任意鍵開始游戲,此游戲是由鍵盤的四個方向鍵進行控制的,吃一個點,蛇身就長長一端,總分數(shù)就加 10 分,如果碰壁或結(jié)尾游戲則結(jié)束,最后出先一個界面,上面顯示你此次游戲的總分數(shù)。希望我這個小游戲能
8、讓你玩的開心。5. 收獲及體會在設(shè)計這個程序中我主要學(xué)會了如何運用以下有關(guān)C 語言和 C+的知識:1)? 函數(shù)定義是要做到顧名思義是很重要的,它對讀程序的人正確認識程序?十分重要,在修改這個程序的過程中也能很快找到程序各模塊的作用,大大增加了程序的可讀性。2)? 分析函數(shù)先從main() 函數(shù)入手。 Main() 函數(shù)是 C+源程序編譯時的開始, ?從 main() 函數(shù)開始讀函數(shù)可將其他函數(shù)的功能理解得更透徹。3)? 在做程序的時候先列框架,將這個程序所要達到的目的(功能)分析出?來,選擇正確的數(shù)據(jù)結(jié)構(gòu)然后在將程序模塊化,按照模塊編寫函數(shù)更加簡單合理。4)? 我還了解了很多的庫函數(shù)的作用,如
9、字符串函數(shù)中有很多對字符串進行處理的函數(shù),起功能我都有所了解。5 )學(xué)會了有關(guān)頭文件的使用方法,及系統(tǒng)調(diào)配問題的解決方法等。6 )在調(diào)試過程中,遇到了很多的問題,比如,因為使用的刷屏函數(shù),所以屏幕經(jīng)常出現(xiàn)閃爍的情況,但是通過我和我的伙伴們的共同努力和學(xué)習(xí),通過網(wǎng)上和書籍的查閱,我們也得到了很多的收獲,我們的小組也在中真正的學(xué)會了很多的東西,這次實訓(xùn)給我們帶來了很大的收獲。 可以按照程序運行的錯誤提示對原程序進行修改,在調(diào)試過程中有時也會遇到不懂的問題,我去圖書館或上網(wǎng)查閱一些資料或者是向老師請教也解決了對源程序一一修改直到運行成功。附錄部分程序代碼清單#include<stdio.h&g
10、t;#include<stdlib.h>#include<conio.h>#include<time.h>#include<windows.h>#define HEAD 300#define FOOD 400#definev_sleep 100/* 改變 sleep 的大小可改變蛇的運動速度,此數(shù)值越小蛇的運動速度越快 */int score=0; /*定義了一個全局變量來在整個程序中統(tǒng)計總成績*/*-歡迎詞 -*/void welc()printf("nnnnnnttt歡迎來到【貪吃蛇】小游戲nn");printf(&quo
11、t;ttt蛇身加長一段就加10 分nn");printf("tt此游戲用鍵盤的方向鍵控制即可。若想退出請按Esc 建。 n");printf("nttt相反的方向的話是暫停。n");printf("nttt請按任意鍵進入游戲。");getch();/*-*/*-人工畫圖程序 -*/void drawpt(int a,int x,int y) /*利用人工繪圖程序來畫出蛇運動的范圍*/if(x=0)printf("tt");return ;if(y=0)printf("ttt");ret
12、urn ;if(x=16)printf("n");return ;if(y=16)printf("t");if(x>0&&x<16&&y>0&&y<16)if(a=0)printf(" ");/*用空心圓來表蛇改運動的總范圍*/else printf(" ");/*用實心圓來蛇的長度和食物的出現(xiàn)地點*/return ;void draw(int (*sna)17)int i,j;system("cls"); /*刷屏工具 *
13、/for(i=0;i<17;i+) /*區(qū)域范圍的大小 */for(j=0;j<17;j+)drawpt(snaij,j,i);printf ("ttt總成績?yōu)?%d分",score);/*-*/*-取隨機數(shù),出現(xiàn)食物用-*/int randno() /*利用這個隨機函數(shù)來控制食物的隨機出現(xiàn)*/srand(time(NULL);隨機函數(shù)出現(xiàn)食物時的范圍,防止食物出現(xiàn)在范圍之外/*-*/*-判斷游戲是否結(jié)束-*/bool judgeGO(int (*sna)17)int x,y,i=0,max=0,count=0;for(x=0,y=0;y<17;y+)if
14、(snaxy=HEAD)/*判斷頭部是否在最外層的*/return false;for(x=16,y=0;y<17;y+)if(snaxy=HEAD)return false;for(y=0,x=0;x<17;x+)if(snaxy=HEAD)return false;for(y=16,x=0;x<17;x+)if(snaxy=HEAD)return false;for(x=0;x<16;x+)for(y=0;y<16;y+)if(max<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)max=snaxy;/*這個也是求頭
15、部之后的*/for(i=0;i<max;i+)for(x=1;x<16;x+)for(y=1;y<16;y+)if(snaxy=i+1)count+;/*這個判斷想了好久的*/score=(count-3)*10;/*計算蛇的總成績 */if(count!=max)/*判斷身體部分是否連續(xù)*/return false;return true;/*-*/*-游戲結(jié)束顯示 -*/void gameover()system("cls");printf("nnnnnnnn");printf("tttt");printf(&q
16、uot;游戲結(jié)束 nn");printf("tttt");printf ("此次總成績?yōu)?%d分 nn",score);printf("tttt");printf ("請您再接再厲 nn");printf("ttt");printf("按 Esc 鍵退出,按任意鍵重新開始。n");/*-*/* 全程標記法,從尾巴開始123456.HEAD ,食物是 FOOD。*/void marksn()void downmove(int (*sna)17);/*用鍵盤的方向鍵的下
17、鍵來控制蛇向下運動*/void upmove(int (*sna)17);/*用鍵盤的方向鍵的上鍵來控制蛇向上運動*/void leftmove(int (*sna)17);/*用鍵盤的方向鍵的左鍵來控制蛇向左運動*/voidrightmove(int(*sna)17);/*用鍵盤的方向鍵的右鍵來控制蛇向右運動*/int judgeF(int (*sna)17,int keym);int snake1717=0;/*-各種東西初始化int x=1,y=7,key,key1;snake11=1;snake12=2;snake13=3;snake23=HEAD;while(snakexy!=0)-
18、*/x=randno();y=randno();snakexy=FOOD;draw(snake);/*-*/*-控制的部分 -*/while(judgeGO(snake)key=getch();switch(key)case 72:while(!kbhit()&&key1!=80&&judgeGO(snake)/*這個函數(shù) kbhit ()自己查一下吧 控制輸入很好 */if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可在呈現(xiàn)頭改變 v_sleep 的大小來控制蛇的運動速度*/c
19、ontinue;upmove(snake);/*用鍵盤的方向鍵的上鍵來控制蛇向上運動*/draw(snake);key1=key;/*這里的 key1 是就來標記上一步的方向,這樣相反的方向就暫停了 */Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可在呈現(xiàn)頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 80:while(!kbhit()&&key1!=72&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),
20、也可在呈現(xiàn)頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;downmove(snake);/*用鍵盤的方向鍵的下鍵來控制蛇向下運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可在呈現(xiàn)頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 75:while(!kbhit()&&key1!=77&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也
21、可在呈現(xiàn)頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;leftmove(snake);/*用鍵盤的方向鍵的左鍵來控制蛇向左運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可在呈現(xiàn)頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 77:while(!kbhit()&&key1!=75&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可
22、在呈現(xiàn)頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;rightmove(snake);/*用鍵盤的方向鍵的右鍵來控制蛇向右運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數(shù)在著是個延遲函數(shù),也可在呈現(xiàn)頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 27:exit(0);default:switch(key1)case 72:while(!kbhit()&&judgeGO(snake)upmove(snake);/*上鍵函數(shù)控制蛇向上運動*/draw(snake);break;ca
23、se 80:while(!kbhit()&&judgeGO(snake)downmove(snake);/*下鍵函數(shù)控制蛇向下運動*/draw(snake);break;case 75:while(!kbhit()&&judgeGO(snake)leftmove(snake);/*左鍵函數(shù)控制蛇向左運動*/draw(snake);break;case 77:while(!kbhit()&&judgeGO(snake)rightmove(snake);/*右鍵函數(shù)控制蛇蛇向右運動*/draw(snake);break;/*-*/*-是否繼續(xù)游戲-*
24、/gameover();/*判斷游戲是否繼續(xù)的函數(shù)*/exit(0);elsemarksn();getch();/*-*/*-*/*-上下左右移動神馬的-*/void downmove(int (*sna)17)/*控制蛇向下運動的函數(shù)*/int x=0,y=0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;/前面已經(jīng)說了, 12345.標記法,減去1 的話,除了頭部以外其他的就移動了。for(x=0;x<16
25、;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;/這個是求頭部之后的值。for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy=HEAD)snax+1y=HEAD;/頭部的移動,snaxy=mark+1;/頭部的賦值。return;void upmove(int (*sna)17)/*控制蛇向上運動的函數(shù)*/int x=0,y=0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(sna
26、xy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy=HEAD)snax-1y=HEAD;snaxy=mark+1;return;void leftmove(int (*sna)17)/*控制蛇向左運動的函數(shù)*/int x=0,y=
27、0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&&snaxy!=FOOD)mark=snaxy;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy=HEAD)snaxy-1=HEAD;snaxy=mark+1;return;void rightmove(int (*sna)17)/*控制蛇向右運動的函數(shù)*/int x=0,y=0,mark=0;for(x=0;x<16;x+)for(y=0;y<16;y+)if(snaxy!=0&&snaxy!=HEAD&&snaxy!=FOOD)snaxy=snaxy-1;for(x=0;x<16;x+)for(y=0;y<16;y+)if(mark<snaxy)if(snaxy!=HEAD&
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新課標學(xué)習(xí)心得體會新(16篇)
- 大專生自我評價(20篇)
- 軍訓(xùn)心得體會作文800字(17篇)
- 國際貿(mào)易合同范文錦集(16篇)
- 三年級心理健康20252026學(xué)年教學(xué)計劃范本(4篇)
- 小學(xué)五年級班務(wù)工作計劃(12篇)2
- 2025年輔導(dǎo)員工作總結(jié)(19篇)
- 車輛配件承攬加工合同(3篇)
- 線上課程直播會議協(xié)議
- 民國協(xié)議結(jié)婚協(xié)議書模板
- (二模)2025年深圳市高三年級第二次調(diào)研考試歷史試卷(含標準答案)
- 廣西《疼痛綜合評估規(guī)范》(材料)
- 2025年山東省淄博市張店區(qū)中考一模歷史試題(含答案)
- 美容師考試與法律法規(guī)相關(guān)知識及試題答案
- 推動研究生教育高質(zhì)量發(fā)展方案
- 2025-2030中國藥用活性炭行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報告
- 2025-2031年中國竹鼠養(yǎng)殖及深加工行業(yè)投資研究分析及發(fā)展前景預(yù)測報告
- 超星爾雅學(xué)習(xí)通《國際經(jīng)濟學(xué)(中國人民大學(xué))》2025章節(jié)測試附答案
- 陜西省2024年高中學(xué)業(yè)水平合格考化學(xué)試卷試題(含答案解析)
- 輸液泵/微量注射泵使用技術(shù)操作考核評分標準
- SJG 74-2020 深圳市安裝工程消耗量定額-高清現(xiàn)行
評論
0/150
提交評論