C++《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告-貪吃蛇小游戲_第1頁(yè)
C++《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告-貪吃蛇小游戲_第2頁(yè)
C++《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告-貪吃蛇小游戲_第3頁(yè)
C++《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告-貪吃蛇小游戲_第4頁(yè)
C++《程序設(shè)計(jì)綜合課程設(shè)計(jì)》報(bào)告-貪吃蛇小游戲_第5頁(yè)
已閱讀5頁(yè),還剩23頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 華科學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)程序設(shè)計(jì)綜合課程設(shè)計(jì)報(bào)告 (2011/2012學(xué)年 第一學(xué)期)學(xué)生姓名: 學(xué)生班級(jí): 學(xué)生學(xué)號(hào): 指導(dǎo)教師: 年 月 日貪吃蛇小游戲目 錄 TOC o 1-3 u 1.課程設(shè)計(jì)目的和要求 PAGEREF _Toc312817775 h 1課程設(shè)計(jì)目的 PAGEREF _Toc312817776 h 1課程設(shè)計(jì)要求 PAGEREF _Toc312817777 h 12. 課程設(shè)計(jì)任務(wù)內(nèi)容 PAGEREF _Toc312817778 h 13.詳細(xì)設(shè)計(jì) PAGEREF _Toc312817779 h 1設(shè)計(jì)要求 PAGEREF _Toc312817780 h 1設(shè)計(jì)思

2、想 PAGEREF _Toc312817781 h 2界面設(shè)計(jì): PAGEREF _Toc312817782 h 2數(shù)據(jù)結(jié)構(gòu) PAGEREF _Toc312817783 h 2函數(shù)設(shè)計(jì) PAGEREF _Toc312817784 h 4文件及函數(shù)組成 PAGEREF _Toc312817785 h 4函數(shù)的詳細(xì)設(shè)計(jì) PAGEREF _Toc312817786 h 5限制條件 PAGEREF _Toc312817787 h 73.5.流程圖 PAGEREF _Toc312817788 h 7系統(tǒng)流程圖 PAGEREF _Toc312817789 h 7函數(shù)流程圖 PAGEREF _Toc3128

3、17790 h 94. 測(cè)試 PAGEREF _Toc312817791 h 13運(yùn)行結(jié)果及程序測(cè)試 PAGEREF _Toc312817792 h 14錯(cuò)誤調(diào)試與分析 PAGEREF _Toc312817793 h 165.課程設(shè)計(jì)設(shè)計(jì)心得與體會(huì) PAGEREF _Toc312817794 h 17參考文獻(xiàn) PAGEREF _Toc312817795 h 19附錄:程序清單 PAGEREF _Toc312817796 h 201.課程設(shè)計(jì)目的和要求本課程設(shè)計(jì)是計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)重要的實(shí)踐性環(huán)節(jié)之一,是在學(xué)生學(xué)習(xí)完程序設(shè)計(jì)基礎(chǔ)(C+)課程后進(jìn)行的一次全面的綜合設(shè)計(jì)。本課程設(shè)計(jì)的目的和任務(wù):1

4、. 鞏固和加深學(xué)生對(duì)C+語(yǔ)言課程的基本知識(shí)的理解和掌握。2. 掌握C+語(yǔ)言編程和程序調(diào)試的基本技能。3. 利用C+語(yǔ)言進(jìn)行基本的軟件設(shè)計(jì)。4. 掌握書(shū)寫程序設(shè)計(jì)說(shuō)明文檔的能力。5. 提高運(yùn)用C+語(yǔ)言解決實(shí)際問(wèn)題的能力。 基本要求:分析課程設(shè)計(jì)題目的要求。對(duì)系統(tǒng)功能模塊進(jìn)行分析,寫出詳細(xì)設(shè)計(jì)說(shuō)明文檔。編寫程序代碼,代碼量要求不少于300行。調(diào)試程序使其能正確運(yùn)行。設(shè)計(jì)完成的軟件要便于操作和使用。設(shè)計(jì)完成后提交課程設(shè)計(jì)報(bào)告。2. 課程設(shè)計(jì)任務(wù)內(nèi)容程序要求游戲時(shí),一條蛇在密閉的圍墻內(nèi), 圍墻內(nèi)會(huì)隨機(jī)出現(xiàn)一個(gè)食物通過(guò)鍵盤上的4個(gè)光標(biāo)鍵控制蛇向上下左右4個(gè)方向移動(dòng),蛇頭接到食物,則表示食物被蛇吃掉,這時(shí)

5、蛇的身體加長(zhǎng)一節(jié),同時(shí)計(jì)10分。接著又出現(xiàn)食物等待被蛇吃掉。如果蛇在移動(dòng)過(guò)程中,撞到墻壁或身體交叉(蛇頭撞到自己的身體),則游戲結(jié)束。3. 詳細(xì)設(shè)計(jì)貪吃蛇算法程序要求:游戲時(shí),一條蛇在密閉的圍墻內(nèi), 圍墻內(nèi)會(huì)隨機(jī)出現(xiàn)一個(gè)食物通過(guò)鍵盤上的4個(gè)光標(biāo)鍵控制蛇向上下左右4個(gè)方向移動(dòng),蛇頭接到食物,則表示食物被蛇吃掉,這時(shí)蛇的身體加長(zhǎng)一節(jié),同時(shí)計(jì)10分。接著又出現(xiàn)食物等待被蛇吃掉。如果蛇在移動(dòng)過(guò)程中,撞到墻壁或身體交叉(蛇頭撞到自己的身體),則游戲結(jié)束。3.2.1界面設(shè)計(jì):這個(gè)程序的關(guān)鍵是表示蛇的圖形以及蛇的移動(dòng)。用一個(gè)小表示蛇的一節(jié)身體,身體每長(zhǎng)一節(jié),增加一個(gè)。移動(dòng)時(shí)必須從蛇頭開(kāi)始,如果不按任何鍵,蛇

6、自行在當(dāng)前方向右前移,當(dāng)游戲者按了有效的方向鍵后,蛇頭朝著指定的方向移動(dòng),一步移動(dòng)一節(jié)身體,所以當(dāng)按了有效的方向鍵后,先確定蛇頭的位置,然后蛇身體隨著蛇頭移動(dòng),圖形的實(shí)現(xiàn)是從蛇頭的新位置開(kāi)始畫出蛇,在界面中央有個(gè)靜止不動(dòng)的食物,用戶通過(guò)鍵盤來(lái)控制蛇的走向,當(dāng)蛇吃到食物時(shí),分?jǐn)?shù)增加十分,界面開(kāi)始更新,蛇的身體增加一節(jié),食物的位置變化一次,當(dāng)蛇碰到界面時(shí),游戲自動(dòng)結(jié)束,顯示用戶最后的分?jǐn)?shù)。snack.h文件及類的設(shè)計(jì)如表3-1所示。表3-11 Cmp類的設(shè)計(jì)。class Cmp friend class Csnake; int rSign; /橫坐標(biāo) int lSign; /豎坐標(biāo) public:

7、 / friend bool isDead(const Cmp& cmp); Cmp(int r,int l)setPoint(r,l); Cmp() void setPoint(int r,int l)rSign=r;lSign=l; Cmp operator-(const Cmp &m)const return Cmp(rSign-m.rSign,lSign-m.lSign); Cmp operator+(const Cmp &m)const return Cmp(rSign+m.rSign,lSign+m.lSign); ; const int maxSize = 5; /初始蛇身長(zhǎng)度

8、2 Csnake類的設(shè)計(jì)。class Csnake Cmp firstSign; /蛇頭坐標(biāo) Cmp secondSign;/蛇頸坐標(biāo) Cmp lastSign; /蛇尾坐標(biāo) Cmp nextSign; /預(yù)備蛇頭 int row; /列數(shù) int line; /行數(shù) int count; /蛇身長(zhǎng)度 vectorvector snakeMap;/整個(gè)游戲界面 queue snakeBody; /蛇身 public: int GetDirections()const; char getSymbol(const Cmp& c)const /獲取指定坐標(biāo)點(diǎn)上的字符 return snakeMapc

9、.lSignc.rSign; Csnake(int n) /初始化游戲界面大小 if(n30)line=30+2; else line=n+2; row=line*3+2; bool isDead(const Cmp& cmp) return ( getSymbol(cmp)= | cmp.rSign = row-1 | cmp.rSign= 0 | cmp.lSign = line-1 | cmp.lSign = 0 ); void InitInstance(); /初始化游戲界面 bool UpdataGame(); /更新游戲界面 void ShowGame(); /顯示游戲界面 ;文件

10、及函數(shù)的組成以及函數(shù)的功能如表3-2所示。這些函數(shù)是由兩個(gè)源文件組成,main.cpp,snack.cpp。main.cpp是總控所有的函數(shù),使得整個(gè)函數(shù)得以運(yùn)行,snack.cpp的內(nèi)容主要是snack.h的成員函數(shù)。 表中的s是Csnack類的對(duì)象。表3-21. InitInstance函數(shù)函數(shù)原型:void Csnake:InitInstance()。功能:初始化游戲界面,初始化蛇身,將方向上下左右分別用4個(gè)鍵表示。參數(shù):無(wú)。返回值:無(wú)。工作方式:根據(jù)命令,調(diào)用相應(yīng)函數(shù),建立內(nèi)存鏈表,將蛇身坐標(biāo)壓入隊(duì)列,并將蛇身作 為一個(gè)數(shù)組。要求:完成初始化,界面中給出蛇的相關(guān)信息。2. Updata

11、Game函數(shù)函數(shù)原型:bool Csnake:UpdataGame()。功能:獲取用戶按鍵信息,產(chǎn)生食物,并隨機(jī)產(chǎn)生食物的相關(guān)坐標(biāo),判斷在蛇沒(méi)有死亡的狀態(tài)下是否碰到食物,如果碰到則加10分,蛇身增長(zhǎng)一節(jié),返回值定為true,如果蛇在移動(dòng)過(guò)程中,撞到墻壁或身體交叉(蛇頭撞到自己的身體),返回值定為false,并且輸出用戶之前所得的分?jǐn)?shù)。參數(shù):蛇的橫坐標(biāo)r,蛇的列坐標(biāo)l,記錄用戶成績(jī)score,獲取用戶按鍵信息chioce。返回值:true或者是false。工作方式:獲取用戶輸入按鍵信息,并且根據(jù)用戶輸入按鍵信息作為關(guān)鍵字,進(jìn)行判斷。要求:自動(dòng)使蛇開(kāi)始運(yùn)動(dòng),并且及時(shí)獲取用戶的按鍵信息,隨時(shí)判斷是否

12、在移動(dòng)過(guò)程中碰到墻壁或者身體交叉,給出結(jié)束信息。函數(shù)原型:int main()功能:程序的入口點(diǎn),總控函數(shù)。參數(shù):沒(méi)有死亡的信息noDead。返回值:0。工作要求:依次調(diào)用初始化界面的成員函數(shù),更新游戲界面的成員函數(shù),顯示游戲界面的 成員函數(shù)。要求:調(diào)用程序信息。4.Csnake函數(shù)函數(shù)原型:Csnake(int n)功能:初始化游戲界面大小。參數(shù):int n。返回值:無(wú)。5.getSymbol函數(shù)函數(shù)原型:char getSymbol(const Cmp& c)const。功能:獲取指定坐標(biāo)點(diǎn)上的字符。參數(shù): Cmp& c。返回值:snakeMapc.lSignc.rSign。6.isDea

13、d函數(shù)函數(shù)原型:bool isDead(const Cmp& cmp)。功能:判斷是否死亡。參數(shù):Cmp& cmp。返回值:getSymbol(cmp)= | cmp.rSign = row-1 | cmp.rSign= 0 | cmp.lSign = line-1 | cmp.lSign = 0。工作要求:判斷條件,從而決定返回值。限制條件 本程序由于經(jīng)常調(diào)用Invalidate()函數(shù)重繪窗口,因此在游戲過(guò)程中頻閃的非常嚴(yán)重。玩的時(shí)候可能會(huì)碰到一定的閃屏問(wèn)題。不過(guò)不會(huì)影響游戲的進(jìn)行。玩家還是可以比較正常的操作此題要求的一條蛇在密閉的圍墻內(nèi), 圍墻內(nèi)會(huì)隨機(jī)出現(xiàn)一個(gè)食物通過(guò)鍵盤上的4個(gè)光標(biāo)鍵控

14、制蛇向上下左右4個(gè)方向移動(dòng),蛇頭接到食物,則表示食物被蛇吃掉,并且蛇的身體加長(zhǎng)一節(jié)的貪吃蛇游戲。本程序經(jīng)過(guò)調(diào)試,可以在XP系統(tǒng)下編譯運(yùn)行,也可以在Vista下運(yùn)行,界面稍有不同,但不影響運(yùn)行結(jié)果。系統(tǒng)流程圖如圖3.1所示。打開(kāi)游戲時(shí),初始化游戲界面,自動(dòng)生成蛇身與食物,然后蛇開(kāi)始向右走,用戶可以通過(guò)鍵盤控制蛇的走向,此時(shí)開(kāi)始計(jì)分.通過(guò)判斷蛇頭與食物的座標(biāo)是否重合,可以決定是否生成新的食物,當(dāng)蛇頭與墻相撞時(shí),輸出成績(jī),結(jié)束游戲。InitInstance函數(shù)流程圖如圖3.2所示。打開(kāi)運(yùn)行結(jié)果后,自動(dòng)調(diào)用InitInstance函數(shù),通過(guò)調(diào)用本函數(shù),將界面生成一個(gè)二維數(shù)組,然后通過(guò)函數(shù)的調(diào)用自動(dòng)生成

15、一個(gè)蛇。 Csnack函數(shù)流程圖如圖3.3所示。首先 獲取用戶按鍵信息,通過(guò)本函數(shù)的調(diào)用,判斷用戶輸入的方向。判斷GetKeyState(VK_UP)0如果是,返回1,如果不是,如果不滿足,接著往下判斷GetKeyState(VK_DOWN)0,如果滿足返回2,如果不滿足,接著判斷GetKeyState(VK_LEFT)0,如果滿足,返回3,不滿足接著判斷GetKeyState(VK_RIGHT)0,如果滿足返回4,不滿足返回0。主函數(shù)流程圖如圖3.4所示。判斷蛇是否死亡,如果沒(méi)有死亡,調(diào)用更新游戲界面函數(shù),顯示游戲界面函數(shù)。 UpdataGame函數(shù)流程圖如圖3.5所示。首先判斷是否吃到食物

16、,如果吃到食物,然后通過(guò)do while循環(huán)再次生成一個(gè)蛇身,通過(guò)if語(yǔ)句判斷生成的是不是蛇,假如是蛇,則隨機(jī)生成一個(gè)食物,假如不是蛇,則再次通過(guò)do while循環(huán)生成一個(gè)蛇身。圖3.5 a(序圖3.5)根據(jù)用戶按鍵信息,判斷蛇的走向,如果用戶發(fā)出了向上的指令,則蛇改變方向,向上運(yùn)動(dòng),如果用戶發(fā)出了向下的指令,則蛇改變方向,向下運(yùn)動(dòng),如果用戶發(fā)出了向左的指令,則蛇改變方向,向左運(yùn)動(dòng),如果用戶發(fā)出了向右的指令,則蛇改變方向,向右運(yùn)動(dòng),如果用戶沒(méi)有發(fā)出方向指令,則還是按照原方向運(yùn)動(dòng),以上操作均可以通過(guò)如圖3.7的switch循環(huán)來(lái)實(shí)現(xiàn)。圖3.5 b(序圖3.5)InitInstance函數(shù)()流

17、程圖如圖3.6所示。4. 測(cè)試 程序開(kāi)始,初始化界面,調(diào)用函數(shù)自動(dòng)生成蛇和食物之后,蛇自動(dòng)向右走。通過(guò)方向鍵來(lái)控制蛇的走向。游戲結(jié)束輸出最終成績(jī)。本程序由于經(jīng)常調(diào)用Invalidate()函數(shù)重繪窗口,因此在游戲過(guò)程中頻閃的非常嚴(yán)重。查閱了很多資料,雙緩沖技術(shù)可以解決這個(gè)問(wèn)題,但是如果采用雙緩沖技術(shù),暫時(shí)還不能克服背景的問(wèn)題,因?yàn)樵陔p緩沖技術(shù)的應(yīng)用中,背景是被強(qiáng)制默認(rèn)為顏色,而不是圖片。我嘗試改變了一下,但是沒(méi)有成功,所以這個(gè)問(wèn)題還沒(méi)有解決。希望大家多多給予意見(jiàn)。問(wèn)題1:速度太快。解決方法:循環(huán)delay。 for(d=0;d4;d+) delay(GAME_SPEED);問(wèn)題 2:食物可能出

18、現(xiàn)在蛇身上。解決方法:依次判斷,若重疊則重新生成食物。 void createFood() int i; label: food.position.x=left+10*(int)rand()%11); food.position.y=top+10*(int)rand()%11); for(i=0;i=snake.length-1;i+) if(snake.nodesi.x=food.position.x&snake.nodesi.y=food.position.y) goto label; 貪吃蛇是家喻戶曉的益智類小游戲,選擇這個(gè)題目一是為了將自己的所學(xué)知識(shí)加以運(yùn)用,二是一直以來(lái)貪吃蛇這個(gè)游戲

19、就深深地吸引著我,它的制作方法對(duì)于以前的我而言都是很神秘的。這次編程我通過(guò)自己的所學(xué)知識(shí)把它剖析開(kāi)來(lái),真真正正的了解它的本質(zhì)和精髓。雖然我的編程能力不是很強(qiáng),但是我有信心,在這次學(xué)習(xí)中我將從實(shí)踐和實(shí)際的項(xiàng)目中提高自己的編程能力。 這個(gè)題目的選定是來(lái)源我學(xué)習(xí)生活的一個(gè)例子,從程序的選定到程序的構(gòu)思,再到程序的編寫都花了我很長(zhǎng)的時(shí)間,幾乎每天都熬夜,真得很辛苦,但完成后又有一種很踏實(shí)的感覺(jué)。編寫程序很辛苦,尤其是基礎(chǔ)不好的。不過(guò)三人行,必有我?guī)煟壕幊瘫容^好的同學(xué)、編寫其他程序的同學(xué)、老師都是我們相互學(xué)習(xí)的對(duì)象。感謝他們給了我很多意見(jiàn),幫助了我很多,真正體會(huì)到合作的愉快。 通過(guò)這次的C+程序課程設(shè)計(jì)

20、,熟練地掌握C+語(yǔ)言的知識(shí)點(diǎn),熟悉當(dāng)前常用的軟件開(kāi)發(fā)環(huán)境(Visual C+),解決實(shí)際問(wèn)題的能力的強(qiáng)化訓(xùn)練,正確理解掌握C+面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特性:類、對(duì)象、繼承與派生、多態(tài)、虛函數(shù)、模板、流類庫(kù)等。但因?yàn)闀r(shí)間關(guān)系,只能把這次作為基點(diǎn),有待改進(jìn),以后編程的話就不會(huì)產(chǎn)生恐懼心理,平時(shí)編程太少了。尤其是更熟悉文件的操作了,對(duì)C+語(yǔ)言也更熟悉了,也能夠自己改程序中的錯(cuò)誤,真的讓我體會(huì)到編程是痛并快樂(lè)著。 下面是我的幾點(diǎn)收獲: 其一,進(jìn)一步掌握和全面系統(tǒng)的學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念、基本語(yǔ)法和編程方法。正確理解掌握C+面向?qū)ο蟪绦蛟O(shè)計(jì)的基本特性:類、對(duì)象、繼承與派生、多態(tài)、虛函數(shù)、模板、流類

21、庫(kù)等。遵循軟件過(guò)程的各個(gè)環(huán)節(jié)進(jìn)行系統(tǒng)分析、設(shè)計(jì)、實(shí)現(xiàn)、集成、測(cè)試,并相應(yīng)給出軟件規(guī)格說(shuō)明書(shū)等。了解當(dāng)前常用的軟件開(kāi)發(fā)環(huán)境(Visual C+),培養(yǎng)了解決實(shí)際問(wèn)題的能力。理解和運(yùn)用了結(jié)構(gòu)化程設(shè)計(jì)的思想和方法。 其二,我初步掌握開(kāi)發(fā)一個(gè)小型實(shí)用系統(tǒng)的基本方法:就是:首先,按要求設(shè)計(jì)算法,寫出流程圖;接著,根據(jù)流程圖,按照C+的語(yǔ)法規(guī)則,編寫程序;而后,就是上機(jī)進(jìn)行調(diào)試,調(diào)試是一個(gè)必備的步驟,通過(guò)調(diào)試將程序中的錯(cuò)誤排除,并看看是否能實(shí)現(xiàn)要求的所有功能;搞完這部分以后就是寫報(bào)告了,將必要的解釋寫進(jìn)去。 其三,由于這個(gè)程序較長(zhǎng),故在進(jìn)行調(diào)試的過(guò)程中又學(xué)會(huì)了調(diào)試一個(gè)較長(zhǎng)程序的基本方法,真正了解到實(shí)踐可以

22、讓我們學(xué)到更多的知識(shí)。 其四,通過(guò)寫程序的流程圖,學(xué)會(huì)了利用流程圖來(lái)表示算法,自頂向下、逐步細(xì)化、模塊化設(shè)計(jì)、結(jié)構(gòu)化編碼的結(jié)構(gòu)化程序設(shè)計(jì)方法,使程序更清晰化、條理化,有助于我們?cè)诰幊袒蛘咭院蟮能浖_(kāi)發(fā)方向發(fā)展的成長(zhǎng)。 其五,通過(guò)這次C+程序課程設(shè)計(jì),學(xué)會(huì)了隊(duì)友之間的相互合作的精神,和體會(huì)到集體的力量,“唱獨(dú)角戲是沒(méi)有人欣賞的”,這是課程設(shè)計(jì)最大的收獲。 最后,通過(guò)寫這次C+程序課程設(shè)計(jì)報(bào)告,掌握和培養(yǎng)了書(shū)寫程設(shè)(軟件)計(jì)開(kāi)發(fā)文檔的能力,雖然很累,但其中的快樂(lè)卻是以前無(wú)法想象的。參考文獻(xiàn)1譚浩強(qiáng)著.C+程序設(shè)計(jì)(第二版)北京:清華大學(xué)出版社,2004。2劉燕君,劉振安,張一葉著.C+程序設(shè)計(jì)綜合

23、課程設(shè)計(jì)(第二版).北京:機(jī)械工業(yè)出版社,2009。3譚浩強(qiáng)主編.C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第二版).北京:清華大學(xué)出版社,1999。4張引著.C+大學(xué)教程(第五版).北京:電子工業(yè)出版社,2007。5許兆元著.VisualC+從入門到精通.北京:化學(xué)工業(yè)出版社,2011。附錄:程序清單#include #include snake.h #include using namespace std; int main() Csnake s(20); s.InitInstance(); /s.ShowGame(); int noDead; do s.ShowGame(); noDead=s.Upda

24、taGame(); while (noDead); system(pause); return 0; #include #include #include #include snake.h using namespace std; /測(cè)試成功 void Csnake:InitInstance() snakeMap.resize(line); / snakeMap豎坐標(biāo)橫坐標(biāo) for(int i=0;iline;i+) snakeMapi.resize(row); for(int j=0;jrow;j+) snakeMapij= ; 1; for(int m=1;mmaxSize+1;m+) /

25、初始蛇身 snakeMapline/2m=; /將蛇身坐標(biāo)壓入隊(duì)列 snakeBody.push(Cmp(m,(line/2); /snakeBody橫坐標(biāo)豎坐標(biāo) /鏈表頭尾 firstSign=snakeBody.back(); secondSign.setPoint(maxSize-1,line/2); /測(cè)試成功 int Csnake:GetDirections()const if(GetKeyState(VK_UP)0) return 1; /1表示按下上鍵 if(GetKeyState(VK_DOWN)0) return 2; /2表示按下下鍵 if(GetKeyState(VK_L

26、EFT)0) return 3; /3表示按下左鍵 if(GetKeyState(VK_RIGHT)0)return 4; /4表示按下右鍵 return 0; bool Csnake:UpdataGame() / /初始化得分0 static int score=0; /獲取用戶按鍵信息 int choice; choice=GetDirections(); coutTotal score: scoreendl; /隨機(jī)產(chǎn)生食物所在坐標(biāo) int r,l; /開(kāi)始初始已經(jīng)吃食,產(chǎn)生一個(gè)食物 static bool eatFood=true; /如果吃了一個(gè),才再出現(xiàn)第2個(gè)食物 if(eatFo

27、od) do /坐標(biāo)范圍限制在(1,1)到(line-2,row-2)對(duì)點(diǎn)矩型之間 srand(time(0); r=(rand()%(row-2)+1; /橫坐標(biāo) l=(rand()%(line-2)+1;/豎坐標(biāo) /如果隨機(jī)產(chǎn)生的坐標(biāo)不是蛇身,則可行 /否則重新產(chǎn)生坐標(biāo) if(snakeMaplr!=) snakeMaplr=*; while (snakeMaplr=); switch (choice) case 1:/向上 /如果蛇頭和社頸的橫坐標(biāo)不相同,執(zhí)行下面操作 if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(first

28、Sign.rSign,firstSign.lSign-1); /否則,如下在原本方向上繼續(xù)移動(dòng) else nextSign=firstSign+(firstSign-secondSign); break; case 2:/向下 if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign+1); else nextSign=firstSign+(firstSign-secondSign); break; case 3:/向左 if(firstSign.lSign!=secondSig

29、n.lSign)nextSign=firstSign+(firstSign-secondSign); else nextSign=firstSign+(firstSign-secondSign); break; case 4:/向右 if(firstSign.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign+1,firstSign.lSign); else nextSign=firstSign+(firstSign-secondSign); break; default: nextSign=firstSign+(firstSig

30、n-secondSign); / if(getSymbol(nextSign)!=* & !isDead(nextSign) /如果沒(méi)有碰到食物(且沒(méi)有死亡的情況下),刪除蛇尾,壓入新的蛇頭 /刪除蛇尾 lastSign=snakeBody.front(); snakeMaplastSign.lSignlastSign.rSign= ; snakeBody.pop(); /更新蛇頭 secondSign=firstSign; /壓入蛇頭 snakeBody.push(nextSign); firstSign=snakeBody.back(); snakeMapfirstSign.lSignfi

31、rstSign.rSign=; /沒(méi)有吃食 eatFood=false; return true; /吃食 else if(getSymbol(nextSign)=* & !isDead(nextSign) secondSign=firstSign; snakeMapnextSign.lSignnextSign.rSign=; /只壓入蛇頭 snakeBody.push(nextSign); firstSign=snakeBody.back(); eatFood=true; /加分 score+=10; return true; /死亡 else coutDeadendl;coutYour last total score is scoreendl; return false; void Csnake:ShowGame() for(int i=0;iline;i+) for(int j=0;jrow;j+) coutsnakeMapij; coutendl; Sleep(1); syste

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論