貪吃蛇小游戲的VC++設(shè)計(jì)與實(shí)現(xiàn)_第1頁
貪吃蛇小游戲的VC++設(shè)計(jì)與實(shí)現(xiàn)_第2頁
貪吃蛇小游戲的VC++設(shè)計(jì)與實(shí)現(xiàn)_第3頁
貪吃蛇小游戲的VC++設(shè)計(jì)與實(shí)現(xiàn)_第4頁
貪吃蛇小游戲的VC++設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、貪吃蛇小游戲的vc+設(shè)計(jì)與實(shí)現(xiàn)摘 要本文首先對(duì)小游戲的發(fā)展前景進(jìn)行了展望,并對(duì)其研究現(xiàn)狀與研究目標(biāo)進(jìn)行了介紹。然后對(duì)編寫程序用到的工具軟件vc+進(jìn)行了介紹。接著進(jìn)入主題,對(duì)貪吃蛇這個(gè)游戲進(jìn)行了介紹然后又對(duì)游戲總體上進(jìn)行了設(shè)計(jì)與分析。最后詳細(xì)地介紹了游戲中各個(gè)細(xì)節(jié)的具體實(shí)現(xiàn),并進(jìn)行了細(xì)致的分析。行云流水般地將在游戲編寫過程中遇到的問題以及相應(yīng)的解決方法表述的清清楚楚。在實(shí)踐中我獲得到了許多寶貴的知識(shí)和編程的經(jīng)驗(yàn),寫在文章之中望與大家共享。關(guān)鍵詞:貪吃蛇, vc+, 小游戲abstractin this paper , at the first we saw the future of the d

2、evelopment of little game , and then we introduced the current situation and target of game research . afterwards, we provided the programming tool which is called vc+ made by microsoft . next lets get down to business .in the first place, we introduced the game greedy snake .in the second place ,we

3、 designed and analyzed the overall game.at last , we vividly provided the particular realization of game details,and analyzed those detail meticulous.in the process of game programming ,i came up against lots of troubles, but i didnt give it up,by the contrary, i overcame them one by one, and at las

4、t i met with success. i have got many precious knowledge and programming experience in the practice, and i wish to share with everyone in my paper. key words: greedy snake, vc+, little game目 錄摘 要iabstractii第一章 緒 論11.1 選題背景11.2 研究現(xiàn)狀與目標(biāo)2第二章 c+程序語言與工具的基本簡介42. 1 c+語言基礎(chǔ)42.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)52.3 vc+的介紹6第三章 貪吃蛇游戲

5、簡介與總體設(shè)計(jì)73.1 貪吃蛇簡介73.2 開發(fā)環(huán)境73.3 創(chuàng)建游戲的主框架和操作特性分析8第四章 用vc+設(shè)計(jì)貪吃蛇的具體實(shí)現(xiàn)104.1 寫在設(shè)計(jì)前的構(gòu)思104.2 算法設(shè)計(jì)與程序流程圖114.3 光標(biāo)移動(dòng)的設(shè)計(jì)與實(shí)現(xiàn)134.4 貪吃蛇游戲主干的設(shè)計(jì)15第五章 總結(jié)與展望22參考文獻(xiàn)24致 謝23附 錄2530第一章 緒 論1.1 選題背景今天不小心注意到“小游戲”這個(gè)關(guān)鍵詞一路爬上熱門搜索第一位的位置,這引起了我的興趣。查看了幾個(gè)小游戲網(wǎng)站,其實(shí)也沒有什么,只不過是些以flash為主開發(fā)的flash小游戲,確實(shí)沒有什么非同凡響的地方。但你仔細(xì)思考一下,就不難發(fā)現(xiàn),這些東西還真有一定的市場(chǎng)

6、,只是現(xiàn)在還默默地沒有被人們所關(guān)注。首先,不斷擴(kuò)大的網(wǎng)絡(luò)愛好者和電腦應(yīng)用者隊(duì)伍,帶來了很多“新手”,這些新手還會(huì)象以前我們剛接觸時(shí)一樣,對(duì)一些相對(duì)簡單,操作也方便,娛樂性強(qiáng)的東西很感興趣。源源不斷的加入者,組成了“小游戲”玩家的新主力軍。其次,“小游戲”很方便下載。如:mm小游戲,化妝小游戲,休閑小游戲,連連看小游戲,生活小游戲,等等。而且現(xiàn)在的數(shù)碼小產(chǎn)品被越來越多的青年所青睞,擁有諸如mp3/mp4,智能手機(jī),pda,或電腦單機(jī)的逐漸壯大的用戶群也正是這種網(wǎng)站的潛在用戶群體。再次,隨著電視上網(wǎng)進(jìn)程的推進(jìn),網(wǎng)絡(luò)走進(jìn)千家萬戶的時(shí)代為期不遠(yuǎn)。因?yàn)殡娨暦洲q率與內(nèi)存大小的限制,以及遙控器操作要求動(dòng)作簡

7、單,這種小游戲?qū)?huì)有一個(gè)巨大而潛在的市場(chǎng)。就拿現(xiàn)在來說網(wǎng)絡(luò)上就盛行迷你小游戲,化裝小游戲,美眉小游戲,qq小游戲,美眉化妝小游戲,黃金礦工,合金彈頭,生活小游戲等等。這些都是現(xiàn)在網(wǎng)路搜索率高,娛樂性強(qiáng)的游戲。今后小游戲的發(fā)展趨勢(shì):1.體積小,小游戲一般都占硬盤空間相當(dāng)小,方便下載傳播; 2.內(nèi)容好,體積小并不代表沒有內(nèi)容,相反小游戲的內(nèi)容還是比較豐富的; 3.耐玩,正是因?yàn)樾∮螒蛘伎臻g不大,它也是在電腦上占據(jù)時(shí)間比較長的游戲了;4.娛樂性高,小游戲玩起來還是蠻有趣的,擁有一定的娛樂性;5.無年齡層次,不分老少、不分男女小游戲面向的玩家范圍廣闊;6.有益身心健康,小游戲的操作不像大游戲那樣操作復(fù)

8、雜,它們通常就是通過幾個(gè)簡單的按鍵就可以控制游戲,甚至只用到鼠標(biāo)就行了,但是就是這幾個(gè)簡單的按鍵對(duì)于游戲的操控,可以達(dá)到手腦協(xié)調(diào)的特效,而且保持一個(gè)好的心情,有益身心。1.2 研究現(xiàn)狀與目標(biāo)1.2.1 研究現(xiàn)狀c 語言是結(jié)構(gòu)化和模塊化的語言,它是面向過程的。在處理較小規(guī)模的程序時(shí),程序員用 c 語言較得心應(yīng)手。但是當(dāng)問題比較復(fù)雜、程序的規(guī)模比較大時(shí),結(jié)構(gòu)化程序設(shè)計(jì)方法就顯出它的不足。c 程序的設(shè)計(jì)者必須細(xì)致地設(shè)計(jì)程序中的每一個(gè)細(xì)節(jié),準(zhǔn)確地考慮到程序運(yùn)行時(shí)每一時(shí)刻發(fā)生的事情,例如各個(gè)變量的值是如何變化的,什么時(shí)候應(yīng)該進(jìn)行哪些輸入,在屏幕上應(yīng)該輸出什么等。這對(duì)程序員的要求是比較高的,如果面對(duì)的是一

9、個(gè)復(fù)雜問題,程序員往往感到力不從心。當(dāng)初提出結(jié)構(gòu)化程序設(shè)計(jì)方法的目的是解決軟件設(shè)計(jì)危機(jī),但是這個(gè)目標(biāo)并未完全實(shí)現(xiàn)。為了解決軟件設(shè)計(jì)危機(jī),在 20 世紀(jì)80 年代提出了面向?qū)ο蟮某绦蛟O(shè)計(jì)(object-oriented programming,簡稱 oop),在這種形勢(shì)下,c+ 應(yīng)運(yùn)而生。c+ 是由貝爾實(shí)驗(yàn)室的 bjarne stroustrup 博士及其同事在 c 語言的基礎(chǔ)上開發(fā)成功的。c+ 保留了 c 語言原有的所有優(yōu)點(diǎn),增加了面向?qū)ο蟮臋C(jī)制。c+ 與 c 完全兼容,用 c 語言寫的程序可以不加修改地用于 c+。從 c+ 名字可以看出它是對(duì) c 的擴(kuò)充,是 c 的超集。它既可以用于結(jié)構(gòu)化程

10、序設(shè)計(jì),又可用于面向?qū)ο蟮某绦蛟O(shè)計(jì),因此它是一個(gè)功能強(qiáng)大的混合型的程序設(shè)計(jì)語言。使用 c+ 必須事先安裝 c+ 編譯系統(tǒng),在 dos 系統(tǒng)下可以使用 turbo c+ 或 borland c+ 。c 源程序的后綴一般為.c,而 c+ 的后綴一般為.cpp(為 c plus plus 的縮寫,即 c+)。在 borland c+ 開發(fā)環(huán)境中,既可以使用 c 語言,也可以使用 c+ 語言。它有兩個(gè)編譯系統(tǒng),根據(jù)源程序文件名的后綴是 c 還是 cpp 來決定使用哪個(gè)編譯系統(tǒng)。如上所述,面向?qū)ο蟪绦蛟O(shè)計(jì)方法主要是解決大型軟件的設(shè)計(jì)問題。只有編寫過大型程序的人才會(huì)體會(huì)到 c 的不足和 c+ 的優(yōu)點(diǎn)。c+

11、 是一種大型語言,其功能、概念和語法規(guī)定都比較復(fù)雜,要深入掌握到需要花較多的時(shí)間,尤其是需要有較豐富的實(shí)踐經(jīng)驗(yàn)。用 c+ 編程的主要是軟件專業(yè)人員。c+ 對(duì) c 的“增強(qiáng)”,表現(xiàn)在兩個(gè)方面:1.在原來面向過程的機(jī)制基礎(chǔ)上,對(duì) c語言的功能做了不少擴(kuò)充。2.增加了面向?qū)ο蟮臋C(jī)制。vc+是microsoft公司推出的一個(gè)基于windows系統(tǒng)平臺(tái)、可視化的集成開發(fā)環(huán)境,它的源程序按c+語言的要求編寫,并加入了微軟提供的功能強(qiáng)大的mfc(microsoft foundation class)類庫,充分體現(xiàn)了微軟公司的技術(shù)精華。mfc中封裝了大部分windows api函數(shù)和windows控件,它包含

12、的功能涉及到整個(gè)windows操作系統(tǒng)。mfc不僅給用戶提供了windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件。使用vc+提供的高度可視化的應(yīng)用程序開發(fā)工具和mfc類庫,可使應(yīng)用程序開發(fā)變得更簡單。mfc提供的類庫是高度抽象的程序設(shè)計(jì),它使得程序員的主要精力不用放在程序設(shè)計(jì)的具體細(xì)節(jié)實(shí)現(xiàn)上,而放在程序的功能擴(kuò)展上面。 1.2.2 研究目標(biāo)c+學(xué)習(xí)過程中,涉及到很多的基本知識(shí)點(diǎn),需要以練習(xí)的形式逐步深入,以達(dá)到融會(huì)貫通的目的。學(xué)習(xí)c+是一項(xiàng)交互式練習(xí),不實(shí)際編寫程序就無法學(xué)會(huì)c+,因此,要抱著一種十年方能磨一劍的心理,扎扎實(shí)實(shí)從基礎(chǔ)開始。選一些好的實(shí)例,這些實(shí)例經(jīng)過反復(fù)的挑

13、選,既有利于我們掌握有關(guān)知識(shí),又不失趣味性。不斷地寫代碼,寫有意義的代碼。這其實(shí)也是入門任何其他編程語言的必由之路。在編程的過程中,重點(diǎn)訓(xùn)練我的編程的邏輯思路和算法以及編程、調(diào)試的基本技術(shù)。因此,在作此畢業(yè)設(shè)計(jì)時(shí),以任務(wù)驅(qū)動(dòng)為前提,從提出問題入手,進(jìn)行分析和算法設(shè)計(jì),最后再歸納總結(jié),以加強(qiáng)學(xué)習(xí)的針對(duì)性和應(yīng)用性。 萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫過簡單的游戲基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的簡單的游戲,就自然成了游戲設(shè)計(jì)者的入門首選。因?yàn)槠浣缑婧唵?,操作、玩法一目了然,所以編寫起來就不?huì)很困難,而且需要考慮的問題也不用很多,就是蛇的顯示、移動(dòng)、碰撞3個(gè)游戲的主塊,攻破這3個(gè)主塊

14、,程序就自然編寫出來了,不會(huì)一開始就把游戲設(shè)計(jì)初學(xué)者拒之門外。編成之后成就感就會(huì)油然而生,并使之對(duì)游戲設(shè)計(jì)產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計(jì)之路成功邁出的第一步,同時(shí)對(duì)于vc+的應(yīng)用水平也會(huì)上升,用起來會(huì)更加?jì)故?、得心?yīng)手。從易到難這是一個(gè)準(zhǔn)則,總之,貪吃蛇小游戲的研究會(huì)對(duì)增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。第二章 c+程序語言與工具的基本簡介2. 1 c+語言基礎(chǔ)c+這個(gè)詞在中國大陸通常被讀做“c加加”,而西方的程序員通常讀做“c plus plus”,“cpp”或者“dev.cpp。 它是一種使用非常廣泛的計(jì)算機(jī)編程語言。c+是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程

15、序設(shè)計(jì)語言。它支持過程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、制作圖標(biāo)等等泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。 c+的主要優(yōu)點(diǎn)在于靈活性、效率以及編譯期類型計(jì)算功能。它提供了豐富的語言特性和庫,支持多種編程范型,絕不限制程序員應(yīng)該做什么或如何做。在解決大規(guī)模程序的組織問題的同時(shí),c+還完美地繼承了c的高效性。在各種動(dòng)態(tài)語言粉墨登場(chǎng)的時(shí)代,c+堅(jiān)定地朝著另一個(gè)方向大踏步前進(jìn),不斷強(qiáng)化其靜態(tài)特性。強(qiáng)大的編譯期類型計(jì)算功能終將成為c+無與倫比的特色。c+ 是c語言的一個(gè)高級(jí)版本,支持中文,界面高級(jí),不需要啟動(dòng)母文件即可運(yùn)行程序。 美國at&t貝爾實(shí)驗(yàn)室的本賈尼斯特勞斯特盧普(bjarne stroust

16、rup)博士在20世紀(jì)80年代初期發(fā)明并實(shí)現(xiàn)了c+(最初這種語言被稱作“c with classes”)。一開始c+是作為c語言的增強(qiáng)版出現(xiàn)的,從給c語言增加類開始,不斷的增加新特性。虛函數(shù)(virtual function)、運(yùn)算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、rtti、名字空間(name space)逐漸被加入標(biāo)準(zhǔn)。1998年國際標(biāo)準(zhǔn)組織(iso)頒布了c+程序設(shè)計(jì)語言的國際標(biāo)準(zhǔn)iso/iec 14882-1998。c+是具有國際標(biāo)準(zhǔn)的編程語言,通常稱作ansi/

17、iso c+。1998年是c+標(biāo)準(zhǔn)委員會(huì)成立的第一年,以后每5年視實(shí)際需要更新一次標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新將是在2009年,目前我們一般稱該標(biāo)準(zhǔn)c+0x。遺憾的是,由于c+語言過于復(fù)雜,以及他經(jīng)歷了長年的演變,直到現(xiàn)在(2004年)只有少數(shù)幾個(gè)編譯器完全符合這個(gè)標(biāo)準(zhǔn)(這么說也是不完全正確的,事實(shí)上,至今為止沒有任何一款編譯器完全支持iso c+)。 另外,就目前學(xué)習(xí)c+而言,可以認(rèn)為他是一門獨(dú)立的語言;他并不依賴c語言,我們可以完全不學(xué)c語言,而直接學(xué)習(xí)c+。根據(jù)c+編程思想(thinking in c+)一書所評(píng)述的,c+與c的效率往往相差在正負(fù)5%之間。所以有人認(rèn)為在大多數(shù)場(chǎng)合c+ 完全可以取

18、代c語言(然而我們?cè)趩纹瑱C(jī)等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用c語言)。 根據(jù)effective c+第三版第一條款的描述,現(xiàn)在c+由以下四個(gè)“子語言”組成: 1、c子語言。c+支持c語言的幾乎全部功能,在語法上與c語言僅有極微妙的差別(如括號(hào)表達(dá)式的左右值性,具體請(qǐng)參考c+標(biāo)準(zhǔn)文獻(xiàn))。 2、面向?qū)ο蟮腸+。c+首先作為一門面向?qū)ο蟮恼Z言而聞名,這個(gè)特點(diǎn)在這里不再詳述。 3、泛型編程語言。c+強(qiáng)大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運(yùn)行期效率。 4、stl(c+標(biāo)準(zhǔn)模板庫)。隨著stl的不斷發(fā)展,它已經(jīng)逐漸成為c+程序設(shè)計(jì)中不可或缺的部分,其效率可能比一

19、般的naive代碼低些,但是其安全性與規(guī)范性使它大受歡迎。 c+語言發(fā)展大概可以分為三個(gè)階段:第一階段從80年代到1995年。這一階段c+語言基本上是傳統(tǒng)類型上的面向?qū)ο笳Z言,并且憑借著接近c(diǎn)語言的效率,在工業(yè)界使用的開發(fā)語言中占據(jù)了相當(dāng)大份額;第二階段從1995年到2000年,這一階段由于標(biāo)準(zhǔn)模板庫(stl)和后來的boost等程序庫的出現(xiàn),泛型程序設(shè)計(jì)在c+中占據(jù)了越來越多的比重性。當(dāng)然,同時(shí)由于java、c#等語言的出現(xiàn)和硬件價(jià)格的大規(guī)模下降,c+受到了一定的沖擊;第三階段從2000年至今,由于以loki、mpl等程序庫為代表的產(chǎn)生式編程和模板元編程的出現(xiàn),c+出現(xiàn)了發(fā)展歷史上又一個(gè)新的

20、高峰,這些新技術(shù)的出現(xiàn)以及和原有技術(shù)的融合,使c+已經(jīng)成為當(dāng)今主流程序設(shè)計(jì)語言中最復(fù)雜的一員。2.2 面向?qū)ο蟮某绦蛟O(shè)計(jì)面向?qū)ο蟪绦蛟O(shè)計(jì)(英語:object-oriented programming,縮寫:oop),指一種程序設(shè)計(jì)范型,同時(shí)也是一種程序開發(fā)的方法論。它將對(duì)象作為程序的基本單元,將程序和數(shù)據(jù)封裝其中,以提高軟件的重用性、靈活性和擴(kuò)展性。當(dāng)我們提到面向?qū)ο蟮臅r(shí)候,它不僅指一種程式設(shè)計(jì)方法。它更多意義上是一種程序開發(fā)方式。在這一方面,我們必須了解更多關(guān)于面向?qū)ο笙到y(tǒng)分析和面向?qū)ο笤O(shè)計(jì)(object oriented design,簡稱ood)方面的知識(shí)。面向?qū)ο蟪绦蛟O(shè)計(jì)可以被視作一種

21、在程序中包含各種獨(dú)立而又互相調(diào)用的單位和對(duì)象的思想,這與傳統(tǒng)的思想剛好相反:傳統(tǒng)的程序設(shè)計(jì)主張將程序看作一系列函數(shù)的集合,或者直接就是一系列對(duì)電腦下達(dá)的指令。面向?qū)ο蟪绦蛟O(shè)計(jì)中的每一個(gè)對(duì)象都應(yīng)該能夠接受數(shù)據(jù)、處理數(shù)據(jù)并將數(shù)據(jù)傳達(dá)給其它對(duì)象,因此它們都可以被看作一個(gè)小型的“機(jī)器”,或者說是負(fù)有責(zé)任的角色。目前已經(jīng)被證實(shí)的是,面向?qū)ο蟪绦蛟O(shè)計(jì)推廣了程序的靈活性和可維護(hù)性,并且在大型項(xiàng)目設(shè)計(jì)中廣為應(yīng)用。 此外,支持者聲稱面向?qū)ο蟪绦蛟O(shè)計(jì)要比以往的做法更加便于學(xué)習(xí),因?yàn)樗軌蜃屓藗兏唵蔚卦O(shè)計(jì)并維護(hù)程序,使得程序更加便于分析、設(shè)計(jì)、理解。反對(duì)者在某些領(lǐng)域?qū)Υ擞枰苑裾J(rèn)。.oop有三個(gè)特性: 第一個(gè)關(guān)鍵特

22、性是定義了類,封裝了表現(xiàn)和操作的抽象數(shù)據(jù)類型。在oop語言中,類是模塊、封裝和數(shù)據(jù)抽象的基礎(chǔ)。 第二個(gè)關(guān)鍵特性是繼承,從已存在的類型中繼承元素(表現(xiàn)和方法),改變或擴(kuò)展舊類型的方法。 第三個(gè)關(guān)鍵技術(shù)被稱為多態(tài)性,它允許使用類似的方法操作不同類型的對(duì)象(通常是子類對(duì)象)。它使得類的可用性進(jìn)一步提高,程序也因此更容易維護(hù)和擴(kuò)展。通常,oop被理解為一種將程序分解為封裝數(shù)據(jù)及相關(guān)操作的模塊而進(jìn)行的編程方式。有別于其它編程方式,oop中的與某數(shù)據(jù)類型相關(guān)的一系列操作都被有機(jī)地封裝到該數(shù)據(jù)類型當(dāng)中,而非散放于其外,因而oop中的數(shù)據(jù)類型不僅有著狀態(tài),還有著相關(guān)的行為。oop理論,及與之同名的oop實(shí)踐相

23、結(jié)合創(chuàng)造出了新的一個(gè)編程架構(gòu);oop思想被廣泛認(rèn)為是非常有用的,以致一套新的編程范型被創(chuàng)造了出來。2.3 vc+的介紹vc+是microsoft公司推出的一個(gè)基于windows系統(tǒng)平臺(tái)、可視化的集成開發(fā)環(huán)境,它的源程序按c+語言的要求編寫,并加入了微軟提供的功能強(qiáng)大的mfc(microsoft foundation class)類庫,充分體現(xiàn)了微軟公司的技術(shù)精華。 mfc中封裝了大部分windows api函數(shù)和windows控件,它包含的功能涉及到整個(gè)windows操作系統(tǒng)。mfc不僅給用戶提供了windows圖形環(huán)境下應(yīng)用程序的框架,而且還提供了創(chuàng)建應(yīng)用程序的組件。使用vc+提供的高度可視

24、化的應(yīng)用程序開發(fā)工具和mfc類庫,可使應(yīng)用程序開發(fā)變得更簡單。mfc提供的類庫是高度抽象的程序設(shè)計(jì),它使得程序員的主要精力不用放在程序設(shè)計(jì)的具體細(xì)節(jié)實(shí)現(xiàn)上,而放在程序的功能擴(kuò)展上面。 第三章 貪吃蛇游戲簡介與總體設(shè)計(jì)3.1 貪吃蛇簡介蛇傳說中的圣靈之物,仰頭為神、俯首為魔。蛇是月亮國膜拜的神,月亮國的子民們都認(rèn)為蛇是萬能的主宰派來保護(hù)他們的守護(hù)者。蛇在這個(gè)島嶼就像空氣一樣自然的出現(xiàn)在各個(gè)角落,有些還成為居民的寵物,陪伴孩子長大,和年輕人一起去探險(xiǎn),守護(hù)著散步的老人。 在善良的女媧神保佑下,人們的生活安寧平靜。為了答謝女媧的庇佑,每年月亮國的國民都會(huì)舉辦一個(gè)守護(hù)蛇大賽,大家都會(huì)拿出自己最強(qiáng)、最炫

25、、最快、最稀有的蛇來參加比賽,獲得第一名的人將得到國王的特別嘉獎(jiǎng)。所以國民一生都在不斷的培養(yǎng)更有威力、更長、更壯的蛇?!柏澇陨摺笔且粋€(gè)產(chǎn)生于1970年代中后期的計(jì)算機(jī)游戲,也叫貪吃蛇。該游戲在1990年代由于一些手機(jī)將其引入而一時(shí)間再度流行起來。在游戲中,玩家操控一條細(xì)長的蛇爬行于一個(gè)帶邊界的平面之上,一路拾起觸碰到之事物或其它類似的物件,并要避免觸碰到自身或者包圍著游戲區(qū)的“墻”。每次貪吃蛇吃掉一件食物,它的身體便增長一些,這讓游戲的難度漸漸變大。操控貪吃蛇時(shí),玩家操控貪吃蛇的頭部的朝向(向上、向下、向左或向右)控制貪吃蛇的進(jìn)行方向,貪吃蛇的身體將跟隨著其頭部行進(jìn)。另外,玩家不可在游戲中途停

26、止貪吃蛇的進(jìn)行。隨著貪吃蛇的成功移植到手機(jī)系統(tǒng),貪吃蛇的操作按鍵要求與手機(jī)按鍵的完美匹配,使貪吃蛇游戲風(fēng)靡起來。3.2 開發(fā)環(huán)境3.2.1 開發(fā)工具和軟件運(yùn)行環(huán)境開發(fā)工具:inter(r)pentium(r) 4 cpu 2.90ghz ,512mb內(nèi)存,80gb硬盤microsoft(r) windows(r) xpmicrosoft(r) visual c+ 6.0軟件運(yùn)行環(huán)境:處理器無要求,32mb以上內(nèi)存,硬盤1gb以上microsoft(r) windows(r) 系列所有操作系統(tǒng)800*600或以上的屏幕分辨率3.2.2 vc+6.0集成開發(fā)環(huán)境vc+6.0集成開發(fā)環(huán)境是集程序文件

27、的輸入、編輯、編譯、連接、運(yùn)行等各種操作為一體的、具有windows窗口界面特色的環(huán)境。利用vc+6.0集成開發(fā)環(huán)境開發(fā)c+程序的步驟大致為:1. 根據(jù)實(shí)際應(yīng)用問題分析出編程思路,即程序的模塊結(jié)構(gòu)和文件結(jié)構(gòu),包含有哪些函數(shù)模塊和哪些文件,函數(shù)之間的調(diào)用關(guān)系如何;2按照c+語言的語法規(guī)則編寫出c+程序;3在vc+集成開發(fā)環(huán)境下,分別輸入、編輯每個(gè)程序文件(.cpp);4分別運(yùn)行c+系統(tǒng)中的編譯程序使每個(gè)程序文件編譯生成相應(yīng)的目標(biāo)文件(.obj);5運(yùn)行c+系統(tǒng)中的連接程序把編譯后的所有目標(biāo)文件連接生成一個(gè)可執(zhí)行的文件(.exe)6選擇菜單中的執(zhí)行程序選項(xiàng)運(yùn)行連接后生成的可執(zhí)行文件,得到處理結(jié)果。

28、3.3 創(chuàng)建游戲的主框架和操作特性分析3.3.1 創(chuàng)建游戲的主框架首先建立一個(gè)win32 console application工程,命名為snakegame,并在,選擇一個(gè)空的工程,然后單擊完成。其項(xiàng)目的架構(gòu)類視圖信息如圖3-1所示:在構(gòu)架類視圖中:snake_segment是定義的關(guān)于蛇身的數(shù)據(jù)結(jié)構(gòu),包括2個(gè)數(shù)據(jù)元素:橫坐標(biāo)row,縱坐標(biāo)col;globals是游戲中定義的所以全局變量和定義的構(gòu)造函數(shù)。圖3-1貪吃蛇的游戲類 3.3.2 操作特性分析貪吃蛇的操作是通過鍵盤中的“w”,“a”,“s”,“d”控制蛇頭部的轉(zhuǎn)向的,但是不可向相反方向按鍵,例如,假設(shè)蛇正向右方向行進(jìn)的時(shí)候,不可以按

29、向左的方向以期其反轉(zhuǎn)向行進(jìn)。在游戲進(jìn)行中當(dāng)玩家想要強(qiáng)行退出時(shí),提供了“x”這個(gè)按鍵的控制,可令玩家隨心所欲。當(dāng)游戲結(jié)束時(shí),玩家可以通過按下按鍵“y”,繼續(xù)進(jìn)行游戲;或是按下“n”,來結(jié)束游戲。3.3.3 貪吃蛇的功能描述對(duì)于貪吃蛇,其功能描述如下:一、功能描述食物一次隨機(jī)在游戲區(qū)域產(chǎn)生一個(gè),每當(dāng)被吃掉就自動(dòng)在隨機(jī)生成一個(gè)。玩家通過控制蛇的運(yùn)動(dòng),在游戲安全區(qū)域(圍墻里面屬安全區(qū))尋找食物,每吃到一個(gè)食物,蛇的長度就會(huì)增長一節(jié)。隨著蛇的成長,蛇的行進(jìn)速度也會(huì)變快,此時(shí)游戲難度隨之加大,直到蛇頭碰到圍墻或是碰到自己身體的某部分,則游戲結(jié)束。二、游戲界面描述:游戲界面簡單,有關(guān)于分?jǐn)?shù)的顯示。整個(gè)游戲是

30、在控制臺(tái)里完成的,蛇身、食物、圍墻等可以用不同的顏色顯示。蛇身用“oooo”顯示,食物用“*”顯示,圍墻用一系列“= = =”顯示。美感談不上,只有簡單。如圖3-2所示。圖3-2游戲畫面第四章 用vc+設(shè)計(jì)貪吃蛇的具體實(shí)現(xiàn)4.1 寫在設(shè)計(jì)前的構(gòu)思4.1.1 設(shè)計(jì)前的游戲分析在具體設(shè)計(jì)游戲之前,先來分析一下整個(gè)游戲的大體上的實(shí)現(xiàn)。貪吃蛇這個(gè)游戲,程序的主體可以大致分為:1.蛇的移動(dòng)2.蛇的頭部方向的改變3.食物的產(chǎn)生這3個(gè)部分。采用分治算法的思想對(duì)游戲進(jìn)行分析。第一項(xiàng)蛇的移動(dòng),就是在玩家沒有對(duì)蛇進(jìn)行操作的時(shí)候,蛇會(huì)自動(dòng)地往某個(gè)固定方向進(jìn)行移動(dòng),直至蛇頭碰到圍墻。這一項(xiàng)可采用動(dòng)畫片設(shè)計(jì)的思想,通過

31、連續(xù)切換有變化的圖片,圖片上的蛇就會(huì)動(dòng)起來了?;谶@個(gè)構(gòu)想,確定出2個(gè)時(shí)時(shí)刻刻都在變化的點(diǎn),一個(gè)是蛇的頭部,一個(gè)是蛇的尾部。蛇的頭部和尾部在時(shí)刻1的位置,到了時(shí)刻2蛇的頭部要向前伸長一節(jié),蛇的尾部也要向前伸長一節(jié),同時(shí)時(shí)刻1的尾部也要消除掉。第二項(xiàng)蛇的頭部方向的改變,就是在游戲和玩家交互的時(shí)候,當(dāng)游戲玩家按下操控改變蛇頭部的按鍵,此時(shí)蛇身會(huì)按玩家的意愿,做出相應(yīng)的動(dòng)作。要完成這一個(gè),第一要接受玩家的按鍵,第二要做出相應(yīng)的反應(yīng)。第三項(xiàng)食物的產(chǎn)生,蛇的成長是依靠不斷地吞掉食物一節(jié)一節(jié)生長的,游戲區(qū)域每吃掉一個(gè)食物,要在游戲區(qū)域自動(dòng)產(chǎn)生另一個(gè)食物,同時(shí)出現(xiàn)食物的位置是隨機(jī)的。這個(gè)可以設(shè)置隨機(jī)數(shù)生成函

32、數(shù),注意到屏幕上的點(diǎn)是和矩陣聯(lián)系在一起的,因此每個(gè)點(diǎn)都是有橫縱坐標(biāo)的,想要在屏幕上的某個(gè)點(diǎn)顯示什么這就變的很容易了。最后游戲的退出設(shè)計(jì)可以通過設(shè)置循環(huán)來完成。這里,先分析游戲的特點(diǎn),把整個(gè)游戲的核心數(shù)據(jù)結(jié)構(gòu)提取出來,再根據(jù)數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)提取核心功能模塊的關(guān)聯(lián),然后對(duì)這些功能一一進(jìn)行細(xì)化,從而完成整個(gè)游戲的設(shè)計(jì)。4.1.2 定義蛇身的數(shù)據(jù)結(jié)構(gòu)對(duì)于蛇身在某一瞬間的位置標(biāo)識(shí),我們采用一個(gè)一維的數(shù)組來標(biāo)識(shí)出來,即用動(dòng)態(tài)增長的數(shù)組來存儲(chǔ)每一節(jié)蛇身的位置(包括蛇頭和蛇尾),也就是說,用存儲(chǔ)單位空間存儲(chǔ)當(dāng)前蛇身某部位的位置來對(duì)整個(gè)蛇身的位置進(jìn)行標(biāo)識(shí),因此每個(gè)存儲(chǔ)空間的內(nèi)容就是一個(gè)點(diǎn)的坐標(biāo)值(row,col)

33、,而蛇身以從左到右的方式進(jìn)行編號(hào),最左邊是蛇的尾部,最右邊是蛇的頭部。如表4-1為三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)。表4-1三節(jié)蛇的數(shù)據(jù)結(jié)構(gòu)(snake0.row, snake0.col)(snake1.row, snake1.col)(snake2.row, snake2.col)snake0.row和snake0.col是第0號(hào)蛇身也就是蛇尾的橫坐標(biāo)row和縱坐標(biāo)col ;依此類推,snake2.row和snake2.col則是第2號(hào)蛇身也就是蛇頭的橫坐標(biāo)row和縱坐標(biāo)col。4.2 算法設(shè)計(jì)與程序流程圖4.2.1 貪吃蛇算法設(shè)計(jì)snake game:=1:初始化游戲,游戲界面的繪制、游戲速度的設(shè)置、食物

34、產(chǎn)生2:while 玩家不按退出鍵3: if 玩家按下某方向鍵4: 蛇身按照玩家按下方向移動(dòng)5: else 蛇身按照默認(rèn)方向(右)移動(dòng)6: end if7: if 蛇頭碰到墻壁8: 游戲結(jié)束9: end if10: if 蛇頭碰到自身11: 游戲結(jié)束12: end if13: if 蛇頭碰到食物14: 蛇身增長、分?jǐn)?shù)增加、產(chǎn)生新食物15: end if16:end while17:游戲結(jié)束4.2.2 程序流程圖游戲初始化界面繪制、產(chǎn)生食物方向鍵按下蛇行進(jìn)方向?yàn)榘聪路较蜴I蛇正常移動(dòng)碰壁撞到自己碰到食物蛇身增長、分?jǐn)?shù)增加、再產(chǎn)生食物玩家沒有按退出鍵游戲結(jié)束圖4-1程序流程圖4.3 光標(biāo)移動(dòng)的設(shè)計(jì)與

35、實(shí)現(xiàn)在游戲過程中,對(duì)于光標(biāo)的移動(dòng)相當(dāng)重要。首先,食物的產(chǎn)生是隨機(jī)的,可能出現(xiàn)在游戲界面的任何一個(gè)地方,因此生成隨機(jī)坐標(biāo)后,就要將光標(biāo)移動(dòng)到該坐標(biāo),然后進(jìn)行顯示食物操作。其次,游戲界面的顯示也需要移動(dòng)光標(biāo)。譬如,縱向的圍欄的顯示。再次,就是蛇身的移動(dòng)了,蛇尾部要不斷清空,這樣蛇就動(dòng)起來了。其中x為縱坐標(biāo),y是橫坐標(biāo),(x,y)對(duì)應(yīng)于屏幕上的像素點(diǎn)。coord 這個(gè)數(shù)據(jù)結(jié)構(gòu)、setconsolecursorposition()、getstdhandle()這2個(gè)函數(shù)都是頭文件windows.h里的。其中setconsolecursorposition()將光標(biāo)位置設(shè)為指定位置,getstdhand

36、le()得到標(biāo)準(zhǔn)輸入輸出的句柄。gotoxy()這個(gè)函數(shù)是布爾型的,返回真或假。bool gotoxy( short x, short y ) /移動(dòng)光標(biāo)coord coord = x, y ;if( !setconsolecursorposition( getstdhandle( std_output_handle ), coord ) ) return false;if( !setconsolecursorposition( getstdhandle( std_error_handle ), coord ) ) return false;return true;下面將光標(biāo)移動(dòng)應(yīng)用到貪吃蛇游

37、戲中。4.3.1 顯示水平圍墻的實(shí)現(xiàn)水平圍墻就是在游戲區(qū)域中,限制蛇行動(dòng)的上下界,即活動(dòng)的最大邊界。這里用一系列“= = =”連續(xù)顯示,直到設(shè)定的最大活動(dòng)范圍。void drawline(int col, int row)gotoxy(col,row); for (int i=0;imaxcol+2;i+) cout=;水平圍墻如圖4-2所示。 圖4-2水平圍墻4.3.2 顯示分?jǐn)?shù)的實(shí)現(xiàn)對(duì)于玩家的得分,是在游戲當(dāng)中,玩家控制貪吃蛇每當(dāng)吞掉一個(gè)食物,相應(yīng)的分?jǐn)?shù)就會(huì)增加一分。游戲結(jié)束時(shí),分?jǐn)?shù)會(huì)清零,再下一盤游戲中從0分開始計(jì)數(shù)。void showscore()gotoxy(20,maxrow+3)

38、;coutscore: score;玩家的分?jǐn)?shù)顯示如圖4-3所示,初始分?jǐn)?shù)為0。 圖4-3分?jǐn)?shù)的顯示4.3.3 接收玩家按鍵信息的實(shí)現(xiàn)為了接收來自鍵盤的信息,這里用到了conio.h這個(gè)頭文件。通過一個(gè)布爾函數(shù)kbhit()的真假來判斷是否有按鍵被敲擊,如果沒有,游戲正常運(yùn)行;否則通過getch()得到那個(gè)char變量的按鍵信息,然后修改蛇的運(yùn)動(dòng)方向。4.3.4 游戲結(jié)束時(shí)顯示信息的實(shí)現(xiàn)當(dāng)游戲介紹時(shí),屏幕上要顯示“game over”的字樣,還有another game (y/n)? 的字樣來讓玩家選擇繼續(xù)游戲還是退出游戲。這里是通過使用gotoxy()函數(shù),使上述的字樣在想要顯示的位置出現(xiàn)的

39、。游戲結(jié)束的顯示信息如圖4-4所示。圖4-4游戲結(jié)束的顯示4.4 貪吃蛇游戲主干的設(shè)計(jì)4.4.1 游戲的初始化與加載的實(shí)現(xiàn)游戲開始的時(shí)候,初始化蛇的長度為4節(jié),行進(jìn)方向?yàn)橄蛴摇2⒍x一個(gè)2維數(shù)組screengridrowcol,該數(shù)組的作用是產(chǎn)生食物用。蛇開始移動(dòng)的坐標(biāo)是(2,2)。然后繪制圍墻橫的圍墻用一排“=”顯示,縱的圍墻用一列“|”顯示,這樣游戲的框架就出來了。初始化游戲分?jǐn)?shù),并顯示游戲的一些幫助,如按鍵設(shè)置等。游戲初始化,包括蛇的初始長度,蛇初始行進(jìn)的方向,游戲區(qū)域的顯示。void loadgame()int row,col;snake_length=4;/蛇的初始長度directi

40、on = right_key;/蛇初始行進(jìn)的方向for(row=0;rowmaxrow;row+)/定義screengridrowcol這個(gè)2維數(shù)組for(col=0;colmaxcol;col+)screengridrowcol= ;for(int i=0;isnake_length;i+)/初始化蛇身每節(jié)的橫、縱坐標(biāo)值snakei.row=snake_start_row;snakei.col=snake_start_col+i;/畫游戲框架drawline(1,1);for(row=0;rowmaxrow;row+)gotoxy(1,row+2);cout|;for(col=0;colma

41、xcol;col+)coutscreengridrowcol;cout|;drawline(1,maxrow+2);showscore();/顯示分?jǐn)?shù)gotoxy(2,maxrow+5);cout snake game left:left_key right:right_key up:up_key down:down_key exit: x.;/顯示游戲的幫助信息:按鍵設(shè)置游戲加載完成后,效果如圖4-5所示。圖4-5貪吃蛇的初始化4.4.2 食物隨機(jī)產(chǎn)生的實(shí)現(xiàn)對(duì)于前面提到過的一個(gè)2維數(shù)組screengridrowcol這里要用到。用rand()函數(shù)生成2個(gè)隨機(jī)生成的整數(shù)作為食物的橫坐標(biāo)和縱坐標(biāo)

42、,并判斷食物是否出去圍墻,如果在游戲區(qū)域外面,則對(duì)隨機(jī)生成的橫縱坐標(biāo)進(jìn)行修改。然后移動(dòng)光標(biāo)到此坐標(biāo)處進(jìn)行輸出“*”操作。(用“*”代表食物)這里的c和r會(huì)在判斷蛇頭是否碰到食物用到。這里要應(yīng)用到time.h這個(gè)頭文件,用于產(chǎn)生隨機(jī)數(shù)。void creatfood()int col,row;row= rand()%maxrow;/生成隨機(jī)的橫坐標(biāo) col= rand()%maxcol;/ 生成隨機(jī)的縱坐標(biāo)if(row3)/判讀橫坐標(biāo)出界row+=3;if(col3)/判讀縱坐標(biāo)出界col+=3;c=col;r=row; screengridrowcol=*;gotoxy(col,row); co

43、utscreengridrowcol;/在游戲區(qū)域顯示食物食物隨機(jī)產(chǎn)生,如圖4-6所示。圖4-6食物的隨機(jī)產(chǎn)生4.4.3 蛇身的增長設(shè)計(jì)實(shí)現(xiàn)對(duì)于蛇身增長的設(shè)計(jì)要考慮到蛇頭的運(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。void addsegment()switch(direction)/判斷蛇身的運(yùn)行方向case(right_key): /蛇身向右方向行進(jìn)snakesnake_length.row=snake

44、snake_length-1.row;snakesnake_length.col=snakesnake_length-1.col+1;break;case(left_key) : /蛇身向左方向行進(jìn)snakesnake_length.row=snakesnake_length-1.row;snakesnake_length.col=snakesnake_length-1.col-1;break;case(up_key) : /蛇身向上方向行進(jìn)snakesnake_length.row=snakesnake_length-1.row-1;snakesnake_length.col=snakesn

45、ake_length-1.col;break;case(down_key) : /蛇身向下方向行進(jìn)snakesnake_length.row=snakesnake_length-1.row+1;snakesnake_length.col=snakesnake_length-1.col;break;default:/默認(rèn)設(shè)置break;4.4.4 蛇身的顯示與移動(dòng)的設(shè)計(jì)實(shí)現(xiàn)對(duì)于蛇身的顯示屬于本程序設(shè)計(jì)的難點(diǎn)之一,因?yàn)樯呱硎且粋€(gè)運(yùn)動(dòng)的物體,每個(gè)時(shí)刻蛇的某一節(jié)所在的位置是變化的。就像一個(gè)動(dòng)畫過程,需要每隔一個(gè)固定的時(shí)間,對(duì)蛇進(jìn)行顯示一次,并將蛇尾部的一節(jié)消掉,使蛇頭向前增進(jìn)一節(jié)。這是一個(gè)動(dòng)態(tài)的過程,

46、當(dāng)然設(shè)置的固定顯示蛇身時(shí)間是能讓人眼來得及反應(yīng)的時(shí)間,也就是不能太快,否則在人看來就是頻閃的一串了。其中addsegment()這個(gè)函數(shù)是用來為蛇頭的前移賦值的。void snakemove() addsegment();/為蛇頭前進(jìn)賦值gotoxy(snake0.col,snake0.row);cout ;/暫時(shí)消除蛇尾for (int i=1;i=snake_length;i+)/在數(shù)組snakei中刪除snake0的值,重新賦值snakei-1=snakei; for (i=0;isnake_length;i+)/顯示蛇身的各個(gè)部分gotoxy(snakei.col,snakei.row

47、);couto;for ( i = 0;i maxrow+1)|(snakesnake_length-1.rowmaxcol+1)|(snakesnake_length-1.col=1)keypress=x; /退出游戲如圖4-7所示為碰壁情況。圖4-7 蛇的碰壁情況2.其次,考慮蛇的頭部是否與自己身體的某個(gè)部位產(chǎn)生的碰撞檢測(cè)。如果檢測(cè)到有碰撞,則游戲結(jié)束;否則游戲正常進(jìn)行。這個(gè)是通過一個(gè)循環(huán)將蛇的頭部的橫、縱坐標(biāo)值與每節(jié)蛇身(除了蛇頭外)直到蛇的尾部的橫、縱坐標(biāo)值進(jìn)行比對(duì),一旦發(fā)現(xiàn)蛇身某部位的橫、縱坐標(biāo)值與蛇的頭部的橫、縱坐標(biāo)值一致,則游戲結(jié)束;否則游戲正常進(jìn)行。/檢測(cè)碰到蛇身for (i=

48、0;isnake_length-1;i+)if ( (snakesnake_length-1.row)=(snakei.row) &(snakesnake_length-1.col)=(snakei.col)keypress=x; /退出游戲break; /無需再進(jìn)行比較如圖4-8所示為蛇碰到自身的情況,蛇頭與距蛇尾長度一的蛇身處相撞。圖4-8 蛇碰到自身的情況3.最后,就是蛇的頭部是否與食物產(chǎn)生碰撞的檢測(cè)了。如果檢測(cè)到?jīng)]有碰撞,則游戲正常進(jìn)行;否則首先將2維數(shù)組screengridrowcol里有食物的那個(gè)數(shù)據(jù)元素清空,以便生成下一個(gè)食物。然后在游戲區(qū)域再隨機(jī)產(chǎn)生一個(gè)食物,分?jǐn)?shù)和蛇的長度分別

49、增加1,最后在游戲區(qū)域下方顯示分?jǐn)?shù)。這里是通過令蛇的頭部的橫、縱坐標(biāo)與先前產(chǎn)生食物時(shí)設(shè)置的2個(gè)變量進(jìn)行比較判斷的,這2個(gè)變量分別是r,c(r表示食物的橫坐標(biāo),c表示食物的縱坐標(biāo)),如果2者分別相等,則成功吞掉食物;否則游戲繼續(xù)進(jìn)行。/檢測(cè)吃到食物if(snakesnake_length-1.col=c&snakesnake_length-1.row=r)screengridsnakesnake_length-1.rowsnakesnake_length-1.col= ;creatfood();score+;snake_length+; showscore();如圖4-9所示為將要碰到食物的情況

50、,食物用“*”表示。圖4-9 蛇碰到食物的情況第五章 總結(jié)與展望通過理論與實(shí)踐的完美結(jié)合,我的貪吃蛇游戲成功的編制完成了。雖然所編寫的這個(gè)游戲很簡單,又因自己的能力有限,游戲畫面相當(dāng)粗糙,沒有經(jīng)過美化的界面美感就談不上了,只能用簡陋形容了。但是值得驕傲的是整個(gè)游戲的編寫是自己親手,并且依靠自己的智慧獨(dú)立完成的。在編寫游戲過程中,遇到了許多難題,例如,蛇的頭部與食物的檢測(cè)問題,蛇的移動(dòng)與顯示問題,蛇的轉(zhuǎn)向問題,食物的隨機(jī)生成問題等等,這些個(gè)難題擺在面前,讓人實(shí)在有些招架不住。經(jīng)過查閱大量的文獻(xiàn)資料閱讀相關(guān)的書籍,最后就決定了采用分治算法的思想來對(duì)擺在面前的問題一一擊破。在解決的是蛇的移動(dòng)與顯示問

51、題的時(shí)候,通過大量的研究、實(shí)驗(yàn)與調(diào)試,試驗(yàn)過多種移動(dòng)與顯示的方式,最后選定了一種簡單易用的算法。解決難題的時(shí)候,仿佛是撥了一層云,又見一層云,但是日光也越來越閃耀了,最終看到了太陽,取得了成功。自己感覺通過這次學(xué)習(xí)研究,自己受益匪淺。不僅自己揭開了游戲程序神秘的面紗,而且在實(shí)際的程序編寫與調(diào)試過程中,自己成長了不少,實(shí)戰(zhàn)的能力提高了很多。萬丈高樓平地起,能夠編寫復(fù)雜的游戲都是在編寫過簡單的游戲基礎(chǔ)上演變過來的能力。然而像貪吃蛇這樣的簡單的游戲,就自然成了游戲設(shè)計(jì)者的入門首選。因?yàn)槠浣缑婧唵危僮?、玩法一目了然,所以編寫起來就不?huì)很困難,而且需要考慮的問題也不用很多,就是蛇的顯示、移動(dòng)、碰撞3個(gè)游戲的主塊,攻破這3個(gè)主塊,程序就自然編寫出來了,不會(huì)一開始就把游戲設(shè)計(jì)初學(xué)者拒之門外。編成之后成就感就會(huì)油然而生,并使之對(duì)游戲設(shè)計(jì)產(chǎn)生強(qiáng)烈的興趣。成為向游戲設(shè)計(jì)之路成功邁出的第一步,同時(shí)對(duì)于vc+的應(yīng)用水平也會(huì)上升,用起來會(huì)更加?jì)故臁⒌眯膽?yīng)手。從易到難這是一個(gè)準(zhǔn)則,總之,貪吃蛇小游戲的研究會(huì)對(duì)增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。當(dāng)然,自己的程序不足之處到處都是,譬如可以將畫面設(shè)計(jì)的美觀一點(diǎn),可以設(shè)置一下游戲的難度,可以令算法的執(zhí)行效率再高一點(diǎn)并不滿足于編寫出來就行。在以后漫漫的研究學(xué)習(xí)道路

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論