- 相關推薦
貪吃蛇實習報告
一.功能說明
1.1總體功能說明
概況: 一條蛇在密閉的圍墻內(nèi),在圍墻內(nèi)出現(xiàn)食物,通過按鍵控制蛇向上下左右四個方向移動,蛇撞到食物,則食物被吃掉,蛇的身體增加一節(jié)。如果蛇在移動的過程中,撞到墻壁或身體的交叉(蛇頭撞到自己的身體),則游戲結束。
特色:①暫停功能:能隨時通過按鍵來暫停游戲,再按一次則繼續(xù)游戲。
②速度調(diào)節(jié)功能:當分數(shù)達到某個值后,對蛇的移動速度進行一定的提升。 ③毒果:增加另一種的毒果食物,蛇吃到該種食物后gameover。
④音效功能:吃掉食物、撞墻、在游戲結束時有不同的音效。
1.2用戶界面
主要是在圍墻可以控制蛇吃到果實,同時分數(shù)就會升一分。側邊欄標出了主要的功能鍵和等級,積分。
1.3使用方法
上下左右鍵控制蛇的運動,還有任意鍵控制游戲開始,空格鍵控制暫停,當游戲的得分超過一定數(shù),蛇的速度就會加快,
二.程序設計說明2.1 總體設計框架
2.2 關鍵算法描述
算法一:
自定義函數(shù):
void movesnake(HANDLE hOutput,int snakex[],int snakey[],int len,WORD wColors[]); 移動蛇的函數(shù),參數(shù)主要是蛇的坐標
void fruit(HANDLE hOutput,int snakex[],int snakey[],int *x ,int *y,WORD wColors[]); 產(chǎn)生水果的函數(shù),參數(shù)主要是蛇的坐標,和水果的坐標。使用了數(shù)組和指針
void p_fruit(HANDLE hOutput,int snakex[],int snakey[],int *x ,int *y,WORD wColors[]); void put_fruit(int *x,int *y,int len,int snakex[],int snakey[]);
放置果實的函數(shù)
int level(HANDLE handle,int s,int p,char buf[],WORD wColors[]);
等級判斷函數(shù),傳遞了一個存放分數(shù)的數(shù)組,速度,分數(shù)參數(shù)
算法二:
系統(tǒng)函數(shù)
textout(HANDLE handle,int x,int y,WORD Wcolors[],” “)
專門用來輸出一些字符,圖案,主要參數(shù)就是字符的橫縱坐標
_kbhit()
檢測是否有按鍵按下
_getch()
獲取按鍵的值
Sleep(n)
是程序休眠n毫秒
srand( (unsigned)time( NULL ));
隨機數(shù)的種子函數(shù),以時間做參數(shù)
rand()
產(chǎn)生偽隨機數(shù)序列,后面一般會跟%n,代表取0到n的整數(shù)。
2.3 程序設計的難點和關鍵點
⑴ 蛇的圖形的輸出及蛇的移動方向。蛇頭要用一個二維數(shù)組表示,身體要隨蛇頭一起運動。移動時必須從蛇頭開始,所以蛇不能向相反的方向移動,而且轉彎的時候會出現(xiàn)斷裂。
⑵ 檢測蛇有無撞到食物、圍墻或是自己的身體。當蛇開始移動之后,需要判斷蛇頭情況,然后根據(jù)位置是空白、食物、圍墻還是蛇的身體來做出相應的反應?梢杂靡粋二維數(shù)組來表示整個場景,對不同的地方賦予不同的值。
⑶ 果實的隨機產(chǎn)生。當食物被吃掉后,要重新隨機產(chǎn)生。利用隨機函數(shù)rand產(chǎn)生隨機數(shù)并將該隨機數(shù)布置到符合場景大小的范圍中來,而且不能和蛇身重疊了,所以要判斷蛇身后在出現(xiàn)果實,以此作為食物位置的橫縱坐標。
2.4 調(diào)試的方法
問題一: 蛇頭吃到果實的表示,起初簡單認為只要果實和蛇頭初始坐標重合,就代表吃到了果實,可是忽略了任何圖形和文字在c++中橫坐標都占兩格,也就是果實和蛇頭都有兩個橫坐標,但蛇頭從果實的邊緣擦過,他也會吃了果實,但是坐標沒有重合,下一個果實也就不會出現(xiàn),然后我就想到把它們的坐標都變成偶數(shù)就可以實現(xiàn)了重合。
問題二:當撞到墻或者自己之后,蛇不會停下,而是繼續(xù)往前走,然后我就用了一個停止函數(shù)getch()。
問題三:果實出現(xiàn)的時候,不能和蛇身重合,所以需要從蛇頭一節(jié)一節(jié)的判斷之后,才可以出現(xiàn)果實。
2.5 程序性能評價
從運行效果來看,優(yōu)點主要是蛇運動順暢,屏幕初始化美觀,不足是蛇的長度,屏幕的長寬度有限,只能玩幾關就不可以玩了。
從程序設計上來說,優(yōu)點主要有簡潔,明了,音樂的設置,速度升級,毒果的設置難度,各種文字移動和色彩的閃耀,不足是沒有獎勵機制,沒有更多的功能。
三.心得體會
剛開始時,一直失敗,好多錯誤,其實就是些基本的錯誤,比如變量的定義,整型變量的范圍,結構體的運用,指針的定義,函數(shù)的調(diào)用等等,通過這些問題才發(fā)現(xiàn)自己學習的知識是那么不牢固。再有就是些更深難度的函數(shù),自己以前沒有學過,比如textout,getch(),rand()等等,都需要自己學習老師給的范例,而且我發(fā)現(xiàn)要是編寫一個稍大的程序,必須先畫一個流程圖,否則自己是不會知道怎么下手的,而且一個大程序是需要漸進編寫的,邊寫邊改的,不可能一步就能考慮周全。
當時蛇出現(xiàn)并且能動時,我的心情激動無比,雖然里面也借鑒了老師給的例子一部分,可是畢竟是自己自學,編出來的,所以沒有什么是不能做的,起初想想都覺得自己是不可能編出那么復雜的游戲,可是當自己真的編出來的時候,才會相信自己是有能力的。
而且我們這次所學的函數(shù),還有一些其它的小技巧,我想對以后的編程都會有幫助的。
【貪吃蛇實習報告】相關文章:
貪吃蛇作文(通用57篇)11-19
大學實習報告實習報告01-07
大學實習報告實習報告5篇02-17
實習報告12-06
實習的報告06-17
實習律師實習報告08-04
金工實習的實習報告09-01
社會實習實習報告12-01
頂崗實習的實習報告02-05