c語言課程設(shè)計貪吃蛇設(shè)計_第1頁
c語言課程設(shè)計貪吃蛇設(shè)計_第2頁
c語言課程設(shè)計貪吃蛇設(shè)計_第3頁
c語言課程設(shè)計貪吃蛇設(shè)計_第4頁
c語言課程設(shè)計貪吃蛇設(shè)計_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

年4月19日c語言課程設(shè)計貪吃蛇設(shè)計文檔僅供參考《C語言程序設(shè)計》課程設(shè)計題目:貪吃蛇游戲設(shè)計學(xué)院:信息學(xué)院專業(yè):網(wǎng)絡(luò)工程姓名:李益雙學(xué)號:班級:信息A1111班指導(dǎo)教師:羅成職稱:講師完成日期:6月

目錄前言……………3摘要…………..4項(xiàng)目背景……..5需求分析……..6概要設(shè)計……..7詳細(xì)設(shè)計與測試……………..8601定義蛇身的數(shù)據(jù)結(jié)構(gòu)……….8602算法設(shè)計與程序流程圖……..8602.1貪吃蛇算法設(shè)計……..8602.2程序流程圖…………..9603光標(biāo)移動的設(shè)計與實(shí)現(xiàn)……..10603.1顯示水平圍墻的實(shí)現(xiàn)………………..10603.2顯示分?jǐn)?shù)的實(shí)現(xiàn)……..11603.3接受玩家按鍵信息的實(shí)現(xiàn)…………..11603.4游戲結(jié)束時顯示信息的實(shí)現(xiàn)……..…11604貪吃蛇游戲主干的設(shè)計……………..……..12604.1游戲的初始化與加載的實(shí)現(xiàn)………..12604.2食物隨機(jī)產(chǎn)生的實(shí)現(xiàn)…13604.3蛇身的增長設(shè)計……..14604.4蛇身的顯示與移動的設(shè)計實(shí)現(xiàn)……..15604.5蛇的頭部與物體碰撞的而設(shè)計實(shí)現(xiàn)….16編碼…………..17結(jié)論…………..18參考文獻(xiàn)……..19致謝………….19前言C語言,是一種通用的、過程式的編程語言,廣泛用于系統(tǒng)與應(yīng)用軟件的開發(fā)。具有高效、靈活、功能豐富、表示力強(qiáng)和較高的移植性等特點(diǎn),在\o"程序員"程序員中備受青睞。C語言是由UNIX的研制者\(yùn)o"丹尼斯·里奇"丹尼斯·里奇(DennisRitchie)于1970年由\o"肯·湯普遜"肯·湯普遜(KenThompson)所研制出的\o"B語言"B語言的基礎(chǔ)上發(fā)展和完善起來的。當(dāng)前,C語言編譯器普遍存在于各種不同的操作系統(tǒng)中,例如\o"UNIX"UNIX、\o"MS-DOS"MS-DOS、\o"MicrosoftWindows"MicrosoftWindows及\o"Linux"Linux等。C語言的設(shè)計影響了許多后來的編程語言,例如C++、Objective-C、Java、C#等。1980年代,為了避免各開發(fā)廠商用的C語言語法產(chǎn)生差異,由\o"美國國家標(biāo)準(zhǔn)局"美國國家標(biāo)準(zhǔn)局(AmericanNationalStandardInstitution)為C語言訂定了一套完整的國際標(biāo)準(zhǔn)語法,稱為ANSIC,作為C語言的標(biāo)準(zhǔn)。1980年代至今的有關(guān)程式開發(fā)工具,一般都支持符合ANSIC的語法。對于一個初學(xué)者,\o"MicrosoftVisualC++"MicrosoftVisualC++是一個比較好的軟件。界面友好,功能強(qiáng)大,調(diào)試也很方便。這是微軟出的一個C語言集成開發(fā)環(huán)境(IDE),主要有:\o"VC++6.0"VC++6.0、\o"VS"VS.\o"VS"VS.\o"VS"VS等,分為企業(yè)版和學(xué)生版等。對于初學(xué)者VC++6.0是比較容易上手的,但其對標(biāo)準(zhǔn)支持的不好可能使人養(yǎng)成不良的編程習(xí)慣。

在unix/linux操作系統(tǒng)上,學(xué)習(xí)c語言一般使用vim/emacs來編輯源文件,使用gcc來編譯源文件,使用make程序來管理編譯過程。C++學(xué)習(xí)過程中,涉及到很多的基本知識點(diǎn),需要以練習(xí)的形式逐步深入,以達(dá)到融會貫通的目的。學(xué)習(xí)C++是一項(xiàng)交互式練習(xí),不實(shí)際編寫程序就無法學(xué)會C++,因此,要抱著一種十年方能磨一劍的心理,扎扎實(shí)實(shí)從基礎(chǔ)開始。選一些好的實(shí)例,這些實(shí)例經(jīng)過重復(fù)的挑選,既有利于我們掌握有關(guān)知識,又不識趣味性。不斷地寫代碼,寫有意義的代碼。這其實(shí)也是入門任何其它編程語言的必由之路。在編程的過程中,重點(diǎn)訓(xùn)練我的編程的邏輯思路和算法以及編程、調(diào)試的基本技術(shù)。因此,在作課程設(shè)計時,以任務(wù)驅(qū)動為前提,從提出問題開始,行分析和算法設(shè)計,最后再歸納總結(jié),以加強(qiáng)學(xué)習(xí)的針對性和應(yīng)用性。萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫過簡單的游戲程序基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的小游戲程序,就自然成了游戲設(shè)計者的入門首選。因此其界面簡單,操作、玩法一目了然,因此編寫起來就不會很困難,而且需要考慮的問題也不是很多,就是蛇的顯示、移動、碰撞3個游戲的主塊,程序就自然編寫出來了,不會一開始就把游戲設(shè)計初學(xué)者拒之門外。編成之后成就感就油然而生,并使之對游戲設(shè)計產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計之路成功邁進(jìn)的第一步,同時對于VC++的應(yīng)用水平也會上升,用起來會更加熟練、得心應(yīng)手。從易到難這是一個準(zhǔn)則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、編寫程序能力等起到了意想不到的作用。摘要本文首先對小游戲的發(fā)展前景進(jìn)行了展望,并對其研究現(xiàn)狀與研究目標(biāo)進(jìn)行了介紹。然后對編寫程序用的工具軟件VC++進(jìn)行了介紹。接著進(jìn)入主題,對貪吃蛇這個游戲進(jìn)行了介紹然后又對游戲總體設(shè)計與分析。最后詳細(xì)地介紹了游戲中各個細(xì)節(jié)的具體實(shí)現(xiàn),并進(jìn)行了細(xì)致的分析。行云流水般地將在游戲編寫過程中遇到的問題以及相應(yīng)的解決方法表述的清清楚楚。在實(shí)踐中我獲得到了許多寶貴的知識和編程的經(jīng)驗(yàn)!關(guān)鍵字:貪吃蛇,VC++,小游戲。ABSTRACTInthispaper,Atthewesawthefutureofthedevelopmentoflittlegame.andthenweintroducedthesituationandtargetofgameresearch.afterwards,wepeovidedtheprogrammingtoolwhichiscalledVC++madebyMicrosoft.Nextlet’hefirstplace.weintroducedthegame—hesecondplace,wedesignedandanalyzedtheoverallgame.Atlast,wevividlyprovidedtheparticularrealizationofgamedetails,andanalyzedthosedetailmeticulous.Intheprocessofgameprogramming.Icameupagainstlotsoftrouble,butIdidn’tgiveitup,bythecontrary.Iovercamethemonebyone,andatlastImetwithsuccess,Ihavegotmanypreciousknowledgeandprogrammingexperienceinthepractice.Keywords:Greedysnake,VC++,littlegame.項(xiàng)目背景貪吃蛇簡介蛇——傳說中的圣靈之物,仰頭為神,俯首為魔。蛇是月亮國膜拜的神,月亮國的子民們都認(rèn)為蛇是萬能的主宰派來保護(hù)她們的守護(hù)者。蛇在這個島嶼就像空氣一樣自然的出現(xiàn)在各個角落,有些還成為居民的寵物,陪伴孩子長達(dá),和年輕人一起去探險,守護(hù)者散步的老人。在善良的女神女媧神保佑下,人們的生活安寧平靜。為了答謝女媧神的庇佑,每年月亮果的國民們都會舉辦一個守護(hù)蛇大賽,大人家都會拿出自己最強(qiáng)、最炫、最快、最稀有的蛇來參加比賽,獲得第一名的人將得到國王的特別嘉獎。因此國民一生都在培養(yǎng)更有威力、更長、更壯的蛇?!柏澇陨摺笔窃谝粋€產(chǎn)生于1970年代中后期的計算機(jī)游戲。也叫貪吃蛇。該游戲在1990年代由于一些手機(jī)將其引入而一時間再度流行起來。在游戲中,玩家操作一條細(xì)長的蛇爬行與一個帶邊界的平面上,一路拾起觸碰到之事或其它類似的物件,并要避免觸碰到自身或者包圍者游戲區(qū)的“墻”。每次貪吃蛇吃掉一件食物,它的身體變增長一些,這讓游戲的難度漸漸變大。操控貪吃蛇時,玩家操控貪吃蛇的頭部的朝向(上、下、左、右)操控貪吃蛇的進(jìn)行方向貪吃蛇的身體將跟隨其頭部行進(jìn)。另外,玩家不可在游戲中途停止貪吃蛇的行進(jìn)。隨著貪吃蛇的成功移植到手機(jī)系統(tǒng),貪吃蛇的操作按鍵要求與手機(jī)按鍵完美匹配,使貪吃蛇游戲風(fēng)靡起來。需求分析現(xiàn)在小游戲很是流行在手機(jī)以及互聯(lián)網(wǎng)上都是很火熱的,這引起了我的興趣。查看了而幾個小游戲網(wǎng)站,其實(shí)也沒有什么,只不過是寫以FLASH為主開發(fā)的Flash小游戲,確實(shí)沒有什么非同凡響的地方。但你仔細(xì)思考想一下,就不難發(fā)現(xiàn),這些東西還真有一定的市場,只是現(xiàn)在還默默地沒有被人們所關(guān)注。首先,不斷擴(kuò)大的網(wǎng)絡(luò)愛好者和電腦應(yīng)用者隊(duì)伍,帶來了很多“新手”,這些新手還會像以前我們剛開始接觸是一樣,對一些相對簡單,操作也方便、娛樂性強(qiáng)東西很感興趣。源源不斷的加入者,組成了“小游戲”玩家的新主力軍。其次,“小游戲”很方便下載,而且現(xiàn)在的數(shù)碼小產(chǎn)品被越來越多的青年所青睞,擁有許多超強(qiáng)功能來支持這些小游戲。再次,隨著電視上網(wǎng)絡(luò)上進(jìn)程的推進(jìn),網(wǎng)絡(luò)走進(jìn)千家萬戶的時代為期不遠(yuǎn)。因?yàn)殡娨暦直媛逝c內(nèi)存大小的限制,以及遙控器操作要求簡單,這種小游戲?qū)幸粋€巨大而潛在的市場。今后小游戲的發(fā)展趨勢:1,體積小,小游戲一般都占硬盤空間相當(dāng)小,方便下載傳播;2,內(nèi)容好,體積小并不代表沒有內(nèi)容,相反小游戲的內(nèi)容還是比較豐富的;3,耐玩,正是因?yàn)樾∮螒蛘伎臻g不大,它也是在電腦上占據(jù)比較長的游戲了;4,娛樂性高,小游戲玩起來還是蠻有趣的,擁有一定的娛樂性;5,無年齡層次,不分老少、男女小游戲面向的晚間范圍廣。概要設(shè)計貪吃蛇游戲的額基本規(guī)則:經(jīng)過鍵盤上的1、2、3、4鍵來控制蛇的運(yùn)行方向,當(dāng)蛇將食物吃到了后身體長度自動增加,當(dāng)蛇撞到墻或吃到自身則蛇死,此時將退出貪吃蛇游戲;當(dāng)蛇向左運(yùn)行時,按向右鍵將不會改變蛇的運(yùn)行方向,蛇將繼續(xù)前進(jìn);同理其它方向一樣。在編寫貪吃蛇游戲時有一下幾個技術(shù)要點(diǎn)。如何實(shí)現(xiàn)蛇在吃到食物后食物消失,這里用到的方法是采用背景色在出現(xiàn)事物的地方將食物重畫,這樣食物就消失不見了。、如何實(shí)現(xiàn)蛇的移動且在移動過程中不留下痕跡,實(shí)現(xiàn)蛇的移動也是貪吃蛇游戲最核心的技術(shù),主要方法是將蛇頭后面的每一節(jié)逐次移動到前一節(jié)的位置,然后按蛇的運(yùn)行方向不同對蛇頭的位置作出相應(yīng)調(diào)整,蛇每向前運(yùn)行一步,相應(yīng)的將其為不宜結(jié)用背景色重畫,及去掉其尾部。當(dāng)蛇向上運(yùn)行時,從鍵盤中輸入向下鍵,此時蛇的運(yùn)行方向不變,其它幾個方向以此類推,之力我是采用if….eles語句來實(shí)現(xiàn)該功能。食物出現(xiàn)的位置這里采用隨機(jī)產(chǎn)生,但這種隨機(jī)產(chǎn)生也是有一定限制條件的即食物出現(xiàn)位置的橫縱坐標(biāo)必須能被10整除,只有這樣才能保證蛇能夠吃到食物。詳細(xì)設(shè)計與測試601定義蛇身的數(shù)據(jù)結(jié)構(gòu)對于蛇身在某一瞬間的位置標(biāo)識,我們采用一個一維的數(shù)組來標(biāo)識出來,即用動態(tài)增長的數(shù)組來存儲每一節(jié)蛇身的位置(包括蛇頭和蛇尾)。也就是說,用存儲單位空間存儲當(dāng)前蛇身某部位的位置來對整個蛇身的位置進(jìn)行標(biāo)識,因此每個存儲空間的內(nèi)容就是一個點(diǎn)的坐標(biāo)值(row,col),而蛇身以從左到右的方式進(jìn)行編號,最左邊是蛇的尾部,最右邊是蛇的額頭不。如表6-1為三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)。表6-1三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)(snake[0].row,snake[0].col)(snake[1].row,snake[1].col)(snake[2].row,snake[2].col)snake[0].row和snake[0].col是第0號蛇身也就是蛇尾的橫坐標(biāo)row和縱坐標(biāo)col:以此類推,snake[2].row和snake[2].col則是第二號蛇身也就是蛇頭的橫坐標(biāo)row和縱坐標(biāo)col。602算法設(shè)計與程序流程圖602.1貪吃蛇算法設(shè)計Snakegame:1:初始化游戲,游戲界面的繪制、游戲速度的設(shè)置、食物產(chǎn)生2:while玩家不按退出鍵3:if玩家按下某方向鍵4:蛇身按照玩家按下方向移動5:eles蛇身按照默認(rèn)方向(右)移動6:endif7:if蛇頭碰到墻壁8:游戲結(jié)束9;endif10:if蛇頭碰到自身11:游戲結(jié)束12:endif13:if蛇碰到食物14:蛇身增長、分?jǐn)?shù)增加、產(chǎn)生新食物15;endif16:endwhlile17:游戲結(jié)束=============================================================602.2程序流程圖602.2程序流程圖603光標(biāo)移動的設(shè)計與實(shí)現(xiàn)在游戲過程中,對于光標(biāo)的移動相當(dāng)重要。首先,食物的產(chǎn)生是隨機(jī)產(chǎn)生的,可能出現(xiàn)在游戲界面的任何一個地方,因此生成隨機(jī)坐標(biāo)后,就要將光標(biāo)移動到該坐標(biāo),然后進(jìn)行顯示食物操作。其次,游戲界面的顯示也需要移動光標(biāo)。譬如,縱向的圍欄的顯示。再次,就是蛇身的移動了,蛇尾部要不斷清空,這樣蛇就動起來了。其中X為縱坐標(biāo),Y為橫坐標(biāo),(X,Y)對應(yīng)于屏幕上的像素點(diǎn)。COORD這個數(shù)據(jù)結(jié)構(gòu)、SetConsoleCurorPosition()、GetStdHandle()這2個函數(shù)都是位置,GetStdHandle()得到標(biāo)準(zhǔn)輸入輸出的句柄。Gotoxy()這個函數(shù)是布爾型的,返回真或假。下面將光標(biāo)移動應(yīng)用到貪吃蛇游戲中603.1顯示水平圍墻的實(shí)現(xiàn)水平圍墻就是在游戲區(qū)域中,限制蛇行動的上下界,即活動的對打邊界。這里用一系列“====”連續(xù)顯示,直到設(shè)定的最大活動范圍。水平圍墻如圖603.1所示圖603.1水平圍墻603.2顯示分?jǐn)?shù)的實(shí)現(xiàn)對于玩家的得分,是在游戲當(dāng)中,玩家控制貪吃蛇每當(dāng)吞掉一個食物,相應(yīng)的分?jǐn)?shù)就會增加一分。游戲結(jié)束時,分?jǐn)?shù)會清零,再下一盤游戲中從0分開始計數(shù)玩家的分?jǐn)?shù)顯示如圖603.2所示603.2分?jǐn)?shù)顯示圖603.3接受玩家按鍵信息的實(shí)現(xiàn)為了接受來自鍵盤的信息,之力用到了conio.h這個頭文件。經(jīng)過一個布爾函數(shù)kbhit()的真假來判斷是否有按鍵被敲擊,如果沒有,游戲正常運(yùn)行;否則通getch()得到那個char變量的按鍵信息,然后修改蛇的運(yùn)動方向。603.4游戲結(jié)束時顯示信息的實(shí)現(xiàn)當(dāng)游戲介紹時,屏幕上要顯示“Gameover”的字樣,還有“anothergame(y/n)?”的字樣來讓玩家選擇繼續(xù)游戲還是退出游戲。這里是經(jīng)過使用gotoxy()函數(shù),是上述的字樣在想要顯示的位置出現(xiàn)的。游戲結(jié)束的而顯示信息如圖603.4所示圖603.4游戲結(jié)束顯示604貪吃蛇游戲主干的設(shè)計604.1游戲的初始化與加載的實(shí)現(xiàn)游戲開始的時候,初始化蛇的長度為4節(jié),行進(jìn)方向?yàn)橛?。并定義2維數(shù)組screengrid[row][col],該數(shù)組的作用是產(chǎn)生食物用。蛇開始移動的坐標(biāo)是哦(2,2)。然后繪制圍墻橫的圍墻用一排“=”顯示,縱的圍墻用一列“||”顯示,這樣游戲的框架就出來了,初始化游戲分?jǐn)?shù),并顯示游戲的一些幫助,如按鍵設(shè)置等。游戲初始化,包括蛇的初始長度,蛇初始行進(jìn)的方向,游戲區(qū)域的顯示。游戲加載完成后,效果如圖604.1所示圖604.1貪吃蛇的初始化604.2食物隨機(jī)產(chǎn)生的實(shí)現(xiàn)對于前面提到過的一個二維數(shù)組screengrid[row][col]這里要用到。用rand()函數(shù)生成2個隨機(jī)生成的整數(shù)作為食物的橫坐標(biāo)和縱坐標(biāo),并判斷食物是否出去圍墻,如果在游戲區(qū)域外面,則對隨機(jī)生成的橫縱坐標(biāo)進(jìn)行修改。然后移動光標(biāo)到此處坐標(biāo)進(jìn)行輸入“*”操作。(用“*”代表食物)這里的c和r會在判斷蛇頭是否碰到食物用到。這里要應(yīng)用到time.h這個頭文件,用于產(chǎn)生隨機(jī)數(shù)。食物隨機(jī)產(chǎn)生,如圖602.2所示圖604.2隨機(jī)食物產(chǎn)生604.3蛇身的增長設(shè)計對于蛇身增長的設(shè)計要考慮到蛇頭的運(yùn)行方向。如果蛇頭向右行進(jìn),新增加的蛇身橫坐標(biāo)不變,縱坐標(biāo)增加1;如果蛇頭向左行進(jìn),新增加的蛇身橫坐標(biāo)不變,縱坐標(biāo)減1;如果蛇頭向上行進(jìn),新增加的蛇身縱坐標(biāo)不變橫坐標(biāo)減1;如果蛇頭向下行進(jìn),新增加的蛇身縱坐標(biāo)不變橫坐標(biāo)加1.604.4蛇身的顯示與移動的設(shè)計實(shí)現(xiàn)對于蛇身的顯示屬于本程序設(shè)計的難點(diǎn)之一,因?yàn)樯呱硎且粋€運(yùn)動的物體,每個時刻的某一節(jié)所在的位置是變化的。就像一個動畫過程,需要每隔一個固定的時間,對蛇進(jìn)行顯示一次,并將蛇尾部的一節(jié)消掉,使蛇頭向前增進(jìn)一節(jié)。這是一個動態(tài)的過程,當(dāng)然設(shè)置的固定顯示蛇身時間是能讓人眼來得及反應(yīng)的時間,也就是不能太快,否則在人看到就是頻閃的一串了。其中addsegment()這個函數(shù)是用來為蛇頭的前移賦值的。604.5蛇的頭部與物體的碰撞的設(shè)計實(shí)現(xiàn)對于蛇的頭部與物體碰撞的檢測同樣屬于本程序設(shè)計的難點(diǎn)。1、首先來關(guān)注蛇的額頭不與游戲區(qū)域圍墻的碰撞檢測。如果檢測到有碰撞,則游戲結(jié)束;否則游戲正常運(yùn)行。這個是經(jīng)過判斷蛇的頭部的橫、縱坐標(biāo)是否超過設(shè)定的額最大的界限或是低于最小的下限來判斷的如圖604.5.1所示為碰壁情況圖604.5.1為碰壁情況2、其次,考慮蛇的頭部是否與自己身體的某個部位產(chǎn)生的碰壁檢測。如果檢測到有碰壁,則游戲結(jié)束;否則游戲正常運(yùn)行。這個是經(jīng)過一個循環(huán)將蛇的頭部的橫、縱坐標(biāo)值與每節(jié)蛇身(處蛇頭外)知道蛇的尾部的橫、縱坐標(biāo)值與蛇的頭部的橫、縱值一致,則游戲結(jié)束;否則游戲正常運(yùn)行。如圖604.5.2所示為蛇碰到自身的情況,蛇頭與距蛇尾長度一致的蛇身處相撞。圖604.5.2蛇碰到自身的情況3、最后,就是蛇的頭部是否與食物碰撞的檢測了。如果檢測到?jīng)]有碰到則游戲正常運(yùn)行;否則首先將二維數(shù)組screengrid[row][col]里有食物的那個數(shù)據(jù)元素清空,以便生成下一個食物。然后在游戲區(qū)域再隨機(jī)產(chǎn)生一個食物,分?jǐn)?shù)和蛇的長度分別增加1,最后在游戲區(qū)域下方顯示分?jǐn)?shù)。這里是經(jīng)過令蛇的頭部的橫、縱坐標(biāo)與先前產(chǎn)生食物時設(shè)置的2個變量進(jìn)行比較判斷的,這2個變量分別是r,c(r表示食物的橫坐標(biāo),c表示食物的縱坐標(biāo)),如果2者分別相等,則成功吞掉食物;否則游戲繼續(xù)進(jìn)行。如圖604.5.3所示為將要碰到食物的情況,食物用“*”表示圖604.5.3蛇碰到食物的情況結(jié)論經(jīng)過理論與實(shí)踐的完美結(jié)合,我的貪吃蛇游戲成功的編制完成了。雖然所編寫的而這個游戲很簡單,又因?yàn)樽约耗芰τ邢蓿螒虍嬅嫦喈?dāng)粗糙,沒有經(jīng)過美化的界面美感就談不上了,只能用簡陋形容了。可是值得驕傲的是整個游戲的編寫是自己親手,而且依靠自己的智慧獨(dú)立完成的。在編寫游戲過程中,遇到了許多難題,例如,蛇的頭部與食物的檢測問題,蛇的移動與顯示問題,蛇的轉(zhuǎn)向問題,食物的隨機(jī)生成問題等等,這些個難題擺在面前,讓人實(shí)在有些招架不住。經(jīng)過查閱大量的文獻(xiàn)資料閱讀相關(guān)書籍,最后決定了采用分治算法的思想來對擺在面前的問題一一擊破。在解決的是蛇的移動與顯示問題的時候,經(jīng)過大量的研究、實(shí)驗(yàn)與調(diào)試,試驗(yàn)過多種移動與顯示的方法,最后決定了一種簡單易用的算法。解決難題的時候,仿佛是撥了一層云,又見一層云,可是日光也越來越閃耀了,最終看到了陽光,取得了成功。自己感覺經(jīng)過這次學(xué)習(xí)研究,自己受益匪淺。不但自己揭開了游戲程序神秘的面紗,而且在實(shí)際的程序編寫與調(diào)試過程中,自己成長了不少,實(shí)戰(zhàn)的能力提高了不少。萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫簡單的游戲基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的簡單游戲,就自然成了設(shè)計者的入門之選,因?yàn)槠浣缑婧唵?,操作、玩法一目了然,因此編寫起來就不會很困難,而且需要考慮的問題也不用太多,就是蛇的顯示、移動、碰撞3個游戲的主塊,攻破這3個主塊,程序就自然編寫出來了,不會一開始就把游戲設(shè)計初學(xué)者拒之門外。編成之后就感覺就會油然而生,并使之對游戲設(shè)計產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計之路成功邁進(jìn)的第一步,同時對于VC++的運(yùn)用水平也會上升,用起來會更加嫻熟、得心應(yīng)手。從易到難這是喲個準(zhǔn)則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。當(dāng)然,自己的程序不足之處到處都是,譬如能夠講畫面設(shè)計的美觀一點(diǎn),能夠設(shè)置一下游戲的難度,能夠令算法的執(zhí)行效率再高一點(diǎn)并不滿足編寫出來就行。字啊以后漫漫的研究學(xué)習(xí)道路上,我還有很遠(yuǎn)的璐要走,迎接我的是一個嚴(yán)峻的挑戰(zhàn)。參考文獻(xiàn)1.《C語言程序設(shè)計》.朱立華王立柱.人民郵電出版社。2.《C語言程序開發(fā)—范例寶典》.王娣安劍孫秀梅.人民郵電出版社。3.《數(shù)據(jù)結(jié)構(gòu)》.姜梅趙堅.中國水利水電出版社4.《高級語言C++程序設(shè)計》.劉璟周玉龍.高等教育出版社5.《C++實(shí)戰(zhàn)操作100例》.蔣衛(wèi)華李偉華.清華大學(xué)出版社6.《游戲設(shè)計基礎(chǔ)》.EmestAdams.機(jī)械工業(yè)出版社7.《游戲設(shè)計概論》.潛龍.科學(xué)出版社————致謝.6附錄——編碼#defineN200

#include<graphics.h>

#include<stdlib.h>

#include<dos.h>

#defineLEFT0x4b00

#defineRIGHT0x4d00

#defineDOWN0x5000

#defineUP0x4800

#defineESC0x011b

inti,key;

intscore=0;/*得分*/

intgamespeed=50000;/*游戲速度自己調(diào)整*/

structFood

{

intx;/*食物的橫坐標(biāo)*/

inty;/*食物的縱坐標(biāo)*/

intyes;/*判斷是否要出現(xiàn)食物的變量*/

}food;/*食物的結(jié)構(gòu)體*/

structSnake

{

intx[N];

inty[N];

intnode;/*蛇的節(jié)數(shù)*/

intdirection;/*蛇移動方向*/

intlife;/*蛇的生命,0活著,1死亡*/

}snake;

voidInit(void);/*圖形驅(qū)動*/

voidClose(void);/*圖形結(jié)束*/

voidDrawK(void);/*開始畫面*/

voidGameOver(void);/*結(jié)束游戲*/

voidGamePlay(void);/*玩游戲具體過程*/

voidPrScore(void);/*輸出成績*/

/*主函數(shù)*/

voidmain(void)

{

Init();/*圖形驅(qū)動*/

DrawK();/*開始畫面*/

GamePlay();/*玩游戲具體過程*/

Close();/*圖形結(jié)束*/

}

/*圖形驅(qū)動*/

voidInit(void)

{

intgd=DETECT,gm;

initgraph(&gd,&gm,"c:\\tc");

cleardevice();

}

/*開始畫面,左上角坐標(biāo)為(50,40),右下角坐標(biāo)為(610,460)的圍墻*/

voidDrawK(void)

{

/*setbkcolor(LIGHTGREEN);*/

setcolor(11);

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*設(shè)置線型*/

for(i=50;i<=600;i+=10)/*畫圍墻*/

{

rectangle(i,40,i+10,49);/*上邊*/

rectangle(i,451,i+10,460);/*下邊*/

}

for(i=40;i<=450;i+=10)

{

rectangle(50,i,59,i+10);/*左邊*/

rectangle(601,i,610,i+10);/*右邊*/

}

}

/*玩游戲具體過程*/

voidGamePlay(void)

{

randomize();/*隨機(jī)數(shù)發(fā)生器*/

food.yes=1;/*1表示需要出現(xiàn)新食物,0表示已經(jīng)存在食物*/

snake.life=0;/*活著*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇頭*/

snake.x[1]=110;snake.y[1]=100;

snake.node=2;/*節(jié)數(shù)*/

PrScore();/*輸出得分*/

while(1)/*能夠重復(fù)玩游戲,壓ESC鍵結(jié)束*/

{

while(!kbhit())/*在沒有按鍵的情況下,蛇自己移動身體*/

{

if(food.yes==1)/*需要出現(xiàn)新食物*/

{

food.x=rand()%400+60;

food.y=rand()%350+60;

while(food.x%10!=0)/*食物隨機(jī)出現(xiàn)后必須讓食物能夠在整格內(nèi),這樣才能夠讓蛇吃到*/

food.x++;

while(food.y%10!=0)

food.y++;

food.yes=0;/*畫面上有食物了*/

}

if(food.yes==0)/*畫面上有食物了就要顯示*/

{

setcolor(GREEN);

rectangle(food.x,food.y,food.x+10,food.y-10);

}

for(i=snake.node-1;i>0;i--)/*蛇的每個環(huán)節(jié)往前移動,也就是貪吃蛇的關(guān)鍵算法*/

{

snake.x[i]=snake.x[i-1];

snake.y[i]=snake.y[i-1];

}

/*1,2,3,4表示右,左,上,下四個方向,經(jīng)過這個判斷來移動蛇頭*/

switch(snake.di

溫馨提示

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

評論

0/150

提交評論