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