



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、C語言程序設計報告題目:貪吃蛇游戲的程序設計院系:西語學院英語教育 6 班姓名:學號:1.1題目:設計貪吃蛇小游戲1.2題目的要求:玩家通過鍵盤控制蛇在地圖上尋找食物,蛇吃下食物, 可以加分, 碰到四壁游戲結束。1.3設計的步驟:分析設計題目的要求,即需求分析。總體設計,確定所需模塊及模塊間調用關系,定義系統中使用的數據類型。詳細設計,確定每個模塊的功能,繪制主要函數的流程圖。編寫程序代碼, 調試程序使其能正確運行。 要求書寫規范, 注意采用縮進格式。函數名、變量名要見文曉意,注釋要簡而不失、詳而不綴。設計完成的軟件要便于操作和使用。程序測試,發現程序中存在的錯誤并改正。完成報告。2 詳細設計
2、說明2.1課程設計的要求:通過游戲程序設計,提高編程興趣與編程思路,鞏固C語言中所學的知識,合理的運用資料,實現理論與實際相結合。收集資料,分析課題,分解問題,形成總體設計思路;對于設計中用到的關鍵函數, 要學會通過查資料, 弄懂其用法, 要聯系問題進行具體介紹;上機調試,查錯,逐步分析不能正常運行的原因,確保所設計的程序正確,并且能正常運行;完成課程設計報告。2.2程序的功能:貪吃蛇游戲是一個經典小游戲,一條蛇在封閉圍墻里,圍墻里隨機出現一個食物,通過按鍵盤四個光標鍵控制蛇向上下左右四個方向移動,蛇頭撞倒食物,則食物被吃掉,蛇身體長一節,同時記 10 分,接著又出現食物,等待蛇來吃,如果蛇在
3、移動中撞到墻或身體交叉蛇頭撞倒自己身體游戲結束。2.3課程設計的思想 :程序關鍵在于表示蛇的圖形及蛇的移動。用一個小圓點來表示蛇的一節身體,身體每長一節,增加一個圓點,蛇頭用四節來表示。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,如果不按任意鍵,蛇自行在當前方向上前移,如果按與蛇運動方向相反的方向鍵,此游戲就會暫停,再按想前的方向鍵才能繼續游戲,但按下有效方向鍵后,蛇頭朝著該方向移動,一步移動一節身體,所以按下有效方向鍵后,先確定蛇頭的位置,而后蛇的身體隨蛇頭移動,圖形的實現是從蛇頭新位置開始畫出蛇,這時,由于未清屏的原因,原來的蛇的位置和新蛇的位置差一個單位,所以看起來蛇多一節身體,所
4、以將蛇的最后一節用背景色覆蓋。食物的出現與消失也是畫一個圓點和覆蓋原來的圓點。為了便于理解,定義兩個結構體:食物與蛇。2.4設計程序中的調試過程在調試過程中,遇到了很多的問題,比如,因為使用的刷屏函數,所以屏幕經常出現閃爍的情況,但是通過我和我的伙伴們的共同努力和學習,通過網上和書籍的查閱,我們也得到了很多的收獲,我們的小組也在中真正的學會了很多的東西,這次實訓給我們帶來了很大的收獲。 可以按照程序運行的錯誤提示對原程序進行修改,在調試過程中有時也會遇到不懂的問題,我去圖書館或上網查閱一些資料或者是向老師請教也解決了對源程序一一修改直到運行成功。2.5設計的流程圖總程序設計圖如圖1 所示:歡迎
5、詞和游戲開始游戲初試化界面和方向鍵Y控制是否吃到NNY蛇變長,并總Y是否碰壁游戲結N圖 1程序設計流程圖方向鍵控制的設計流程圖如圖2 所示:其中 upmove函數控制蛇向上運動, downmove函數控制蛇向下運動, leftmove 函數控制蛇向左運動, rightmove 函數控制蛇向右運動。按方向按方向按方向按方向則使用函數則使用函數則使用函數則使用函數通過方向鍵圖 2 方向鍵控制方向鍵控制的設計流程圖蛇吃食物蛇身變長的設計流程圖如圖3 所示:通過控制部N是否能Y通過使用函數:Count+score=(count圖 3蛇吃食物蛇身變長的設計流程圖2.6程序的總體設計思想利用人工繪圖法 ,
6、 制作美觀的游戲界面.通過隨機函數產生隨機數, 控制游戲過程食物的出現.定義鍵盤操作 , 控制游戲過程蛇的移動方向.畫出邊界 , 并判斷游戲是否結束.統計游戲過程蛇吃的食物數量, 計算并輸出游戲成績.3 軟件的使用說明3.1 建立游戲的過程說明先打開 Microssft Visual C+程序,進入Microssft Visual C+程序后打開文件菜單,點機新鍵命令按鈕,先建立一個Win32 Console Application工程,建立工程時可填寫工程名稱和你所建工成要存放的位置,點機確定按鈕, 再點機一個空工程類型的控制臺程序,再點機完成,然后點機確定按鈕,此時一個所要建立的工程就已經
7、建立好,然后再點機文件中的新建按鈕,然后再建立一個C+ SourceFile文件,并填寫文件名稱,然后點機確定按鈕,此時所要建立的工程和文件都已建立完畢, 此時您就可以把貪吃蛇游戲的代碼復制粘貼到你剛剛建立的工程和文件里面了, 然后點機組建命令中的編譯和組建命令,最后點機執行命令就可進入貪吃蛇游戲中了。3.2執行游戲的過程說明進入貪吃蛇游行中后,首先彈出一個界面,上面出現的是歡迎詞和游戲的簡單說明,可點機任意鍵開始游戲,此游戲是由鍵盤的四個方向鍵進行控制的,吃一個點,蛇身就長長一端,總分數就加 10 分,如果碰壁或結尾游戲則結束,最后出先一個界面,上面顯示你此次游戲的總分數。希望我這個小游戲能
8、讓你玩的開心。5. 收獲及體會在設計這個程序中我主要學會了如何運用以下有關C 語言和 C+的知識:1)? 函數定義是要做到顧名思義是很重要的,它對讀程序的人正確認識程序?十分重要,在修改這個程序的過程中也能很快找到程序各模塊的作用,大大增加了程序的可讀性。2)? 分析函數先從main() 函數入手。 Main() 函數是 C+源程序編譯時的開始, ?從 main() 函數開始讀函數可將其他函數的功能理解得更透徹。3)? 在做程序的時候先列框架,將這個程序所要達到的目的(功能)分析出?來,選擇正確的數據結構然后在將程序模塊化,按照模塊編寫函數更加簡單合理。4)? 我還了解了很多的庫函數的作用,如
9、字符串函數中有很多對字符串進行處理的函數,起功能我都有所了解。5 )學會了有關頭文件的使用方法,及系統調配問題的解決方法等。6 )在調試過程中,遇到了很多的問題,比如,因為使用的刷屏函數,所以屏幕經常出現閃爍的情況,但是通過我和我的伙伴們的共同努力和學習,通過網上和書籍的查閱,我們也得到了很多的收獲,我們的小組也在中真正的學會了很多的東西,這次實訓給我們帶來了很大的收獲。 可以按照程序運行的錯誤提示對原程序進行修改,在調試過程中有時也會遇到不懂的問題,我去圖書館或上網查閱一些資料或者是向老師請教也解決了對源程序一一修改直到運行成功。附錄部分程序代碼清單#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 的大小可改變蛇的運動速度,此數值越小蛇的運動速度越快 */int score=0; /*定義了一個全局變量來在整個程序中統計總成績*/*-歡迎詞 -*/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(" ");/*用實心圓來蛇的長度和食物的出現地點*/return ;void draw(int (*sna)17)int i,j;system("cls"); /*刷屏工具 *
13、/for(i=0;i<17;i+) /*區域范圍的大小 */for(j=0;j<17;j+)drawpt(snaij,j,i);printf ("ttt總成績為 %d分",score);/*-*/*-取隨機數,出現食物用-*/int randno() /*利用這個隨機函數來控制食物的隨機出現*/srand(time(NULL);隨機函數出現食物時的范圍,防止食物出現在范圍之外/*-*/*-判斷游戲是否結束-*/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)/*判斷身體部分是否連續*/return false;return true;/*-*/*-游戲結束顯示 -*/void gameover()system("cls");printf("nnnnnnnn");printf("tttt");printf(&q
16、uot;游戲結束 nn");printf("tttt");printf ("此次總成績為 %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)/*這個函數 kbhit ()自己查一下吧 控制輸入很好 */if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可在呈現頭改變 v_sleep 的大小來控制蛇的運動速度*/c
19、ontinue;upmove(snake);/*用鍵盤的方向鍵的上鍵來控制蛇向上運動*/draw(snake);key1=key;/*這里的 key1 是就來標記上一步的方向,這樣相反的方向就暫停了 */Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可在呈現頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 80:while(!kbhit()&&key1!=72&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數在著是個延遲函數,
20、也可在呈現頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;downmove(snake);/*用鍵盤的方向鍵的下鍵來控制蛇向下運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可在呈現頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 75:while(!kbhit()&&key1!=77&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也
21、可在呈現頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;leftmove(snake);/*用鍵盤的方向鍵的左鍵來控制蛇向左運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可在呈現頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 77:while(!kbhit()&&key1!=75&&judgeGO(snake)if(judgeF(snake,key)draw(snake);Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可
22、在呈現頭改變 v_sleep 的大小來控制蛇的運動速度 */ continue;rightmove(snake);/*用鍵盤的方向鍵的右鍵來控制蛇向右運動*/draw(snake);key1=key;Sleep(v_sleep);/*Sleep函數在著是個延遲函數,也可在呈現頭改變v_sleep 的大小來控制蛇的運動速度*/break;case 27:exit(0);default:switch(key1)case 72:while(!kbhit()&&judgeGO(snake)upmove(snake);/*上鍵函數控制蛇向上運動*/draw(snake);break;ca
23、se 80:while(!kbhit()&&judgeGO(snake)downmove(snake);/*下鍵函數控制蛇向下運動*/draw(snake);break;case 75:while(!kbhit()&&judgeGO(snake)leftmove(snake);/*左鍵函數控制蛇向左運動*/draw(snake);break;case 77:while(!kbhit()&&judgeGO(snake)rightmove(snake);/*右鍵函數控制蛇蛇向右運動*/draw(snake);break;/*-*/*-是否繼續游戲-*
24、/gameover();/*判斷游戲是否繼續的函數*/exit(0);elsemarksn();getch();/*-*/*-*/*-上下左右移動神馬的-*/void downmove(int (*sna)17)/*控制蛇向下運動的函數*/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;/前面已經說了, 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)/*控制蛇向上運動的函數*/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)/*控制蛇向左運動的函數*/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)/*控制蛇向右運動的函數*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通力電梯t1試題及答案
- 教師資格證考試試題
- 疫苗的面試題及答案
- 大數據在2025年信息系統中的應用試題及答案
- 公共政策實施中的隱性成本與效益分析試題及答案
- 職業規劃中的軟件設計師考試及試題及答案建議
- 網絡工程師考試趨勢分析試題及答案
- 西方政治制度2025年發展試題及答案
- 剖析西方政治制度的變遷軌跡試題及答案
- 網絡技術與服務模型試題及答案
- 保潔協議書合同范本
- 2025餐飲服務員勞動合同模板
- 2025屆高三高考押題預測卷 物理(黑吉遼蒙卷03) 含解析
- 2025部編版語文二年級下冊第八單元測試卷(含答案)
- 教育咨詢保密協議書
- 2025年黃山旅游發展股份有限公司春季招聘75人筆試參考題庫附帶答案詳解
- 2025年安全知識競賽題庫及答案(共200題)
- 哈爾濱歷史文化課件
- 沙盤游戲培訓課件
- 建設項目管理工作總結范文
- 《汽車電氣設備構造與維修》學習課程標準
評論
0/150
提交評論