貪吃蛇游戲
貪吃蛇游戲
貪吃蛇游戲是一款經(jīng)典的游戲,在使用Visual C++6.0控制臺(tái),調(diào)用基本的C語(yǔ)言語(yǔ)句,盡可能少的使用控制臺(tái)函數(shù)和系統(tǒng)函數(shù)的情況下,編寫了本章的貪吃蛇游戲。為了便于讀者的理解,本游戲只實(shí)現(xiàn)貪吃蛇的核心功能,讀者可自行開發(fā)完善。
一、需求分析
為了把貪吃蛇游戲的核心功能分析透徹,把游戲功能分解成以下幾個(gè)方面逐一講述和實(shí)現(xiàn):
(1)構(gòu)建蛇結(jié)構(gòu)和食物數(shù)據(jù)結(jié)構(gòu);
(2)蛇身如何移動(dòng);
(3)食物如何隨機(jī)出現(xiàn);
(4)吃到食物,蛇身變長(zhǎng);
(5)蛇死亡,游戲結(jié)束判讀;
(6)繪制場(chǎng)景、蛇和食物。
二、總體設(shè)計(jì)
考慮到存儲(chǔ)蛇和控制蛇的實(shí)現(xiàn)方便性,建立如下數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)蛇結(jié)點(diǎn)如下:
描述一個(gè)蛇結(jié)點(diǎn),僅僅知道結(jié)點(diǎn)位置顯然是不夠的,需要建立該結(jié)點(diǎn)與前驅(qū)和后繼的關(guān)系才行,這樣移動(dòng)蛇身才變成了可能。為了使用方便,使用該結(jié)構(gòu)分別建立蛇頭結(jié)點(diǎn)、蛇身結(jié)點(diǎn)和蛇尾結(jié)點(diǎn)。
食物有位置、不同的外觀和分值(這一點(diǎn)代碼中沒(méi)有涉及),所建立食物結(jié)構(gòu)如下:
三、功能模塊實(shí)現(xiàn)
下面將分別講解蛇身移動(dòng)方法、食物如何隨機(jī)出現(xiàn)、吃到食物、蛇身加長(zhǎng)和蛇的死亡判斷,最后給出題目源代碼。
(1)蛇身移動(dòng)方法
舉一個(gè)簡(jiǎn)單的例子,有兩個(gè)數(shù)分別是a和b,如果要把a(bǔ)變?yōu)閜,把b變?yōu)閍,偽代碼該如何實(shí)現(xiàn)呢?
應(yīng)該這樣寫:b=a;a=p;從后至前依次賦值,才能得到正確結(jié)果。這和移動(dòng)蛇身的道理是一樣的,循環(huán)遍歷需要從蛇尾至蛇頭,最后移動(dòng)蛇頭至下一個(gè)位置。
(2)食物隨機(jī)出現(xiàn)
出現(xiàn)的食物要滿足兩個(gè)要求:①食物的位置是隨機(jī)的,可以是場(chǎng)景中的任何位置;②食物不允許出現(xiàn)在蛇身中。
要實(shí)現(xiàn)第一個(gè)要求,需要使用隨機(jī)函數(shù)發(fā)生器產(chǎn)生食物的垂直和水平位置,和食物的價(jià)值;要實(shí)現(xiàn)第二個(gè)要求,需要在生成一組位置值后,判斷和蛇身位置的關(guān)系,如果存在相同的情況,就需要重新生成食物位置,直到不相同為止。
這里需要注意的是,如果蛇身太長(zhǎng),判斷的次數(shù)就會(huì)很多,游戲就可能消耗了很多時(shí)間仍無(wú)法找到滿足要求的位置值,此時(shí)可以根據(jù)蛇頭的位置,直接指定它周圍空閑的位置為食物出現(xiàn)的位置(如果蛇頭周圍不存在任何一個(gè)空閑位置,這種情況蛇肯定死亡了,游戲也要結(jié)束了)。
(3)吃到食物和蛇身增長(zhǎng)
判斷蛇吃到食物的方法是比較蛇頭和食物的位置是否重合。如果吃到了食物,簡(jiǎn)單處理的話,就可以增長(zhǎng)一次蛇身,新增的結(jié)點(diǎn)追加到蛇尾,再隨機(jī)生成一個(gè)新食物。
(4)蛇的死亡判斷
判斷蛇是否死亡的方法是檢查蛇頭和蛇身其他結(jié)點(diǎn)是否重合,如果有重合,就標(biāo)志著蛇死亡。
四、源代碼
基于上面的講解,下面代碼詳細(xì)注釋了函數(shù)和語(yǔ)句的功能,能夠讓讀者更好的領(lǐng)會(huì)貪吃蛇游戲的具體實(shí)現(xiàn)方法。
五、系統(tǒng)運(yùn)行
單擊【調(diào)試】工具欄中的編譯按鈕、鏈接按鈕和運(yùn)行按鈕即可運(yùn)行該游戲,下面是游戲運(yùn)行中的截圖。
六、小結(jié)
本章所給出的貪吃蛇游戲代碼是使用鏈表實(shí)現(xiàn)的,功能還很不完善,讀者可以在分析并理解后,編寫功能更加完善的貪吃蛇游戲代碼。
免責(zé)聲明:以上內(nèi)容源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。