




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、貪吃蛇小游戲的vc+設計與實現摘 要本文首先對小游戲的發展前景進行了展望,并對其研究現狀與研究目標進行了介紹。然后對編寫程序用到的工具軟件vc+進行了介紹。接著進入主題,對貪吃蛇這個游戲進行了介紹然后又對游戲總體上進行了設計與分析。最后詳細地介紹了游戲中各個細節的具體實現,并進行了細致的分析。行云流水般地將在游戲編寫過程中遇到的問題以及相應的解決方法表述的清清楚楚。在實踐中我獲得到了許多寶貴的知識和編程的經驗,寫在文章之中望與大家共享。關鍵詞:貪吃蛇, 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 研究現狀與目標2第二章 c+程序語言與工具的基本簡介42. 1 c+語言基礎42.2 面向對象的程序設計52.3 vc+的介紹6第三章 貪吃蛇游戲
5、簡介與總體設計73.1 貪吃蛇簡介73.2 開發環境73.3 創建游戲的主框架和操作特性分析8第四章 用vc+設計貪吃蛇的具體實現104.1 寫在設計前的構思104.2 算法設計與程序流程圖114.3 光標移動的設計與實現134.4 貪吃蛇游戲主干的設計15第五章 總結與展望22參考文獻24致 謝23附 錄2530第一章 緒 論1.1 選題背景今天不小心注意到“小游戲”這個關鍵詞一路爬上熱門搜索第一位的位置,這引起了我的興趣。查看了幾個小游戲網站,其實也沒有什么,只不過是些以flash為主開發的flash小游戲,確實沒有什么非同凡響的地方。但你仔細思考一下,就不難發現,這些東西還真有一定的市場
6、,只是現在還默默地沒有被人們所關注。首先,不斷擴大的網絡愛好者和電腦應用者隊伍,帶來了很多“新手”,這些新手還會象以前我們剛接觸時一樣,對一些相對簡單,操作也方便,娛樂性強的東西很感興趣。源源不斷的加入者,組成了“小游戲”玩家的新主力軍。其次,“小游戲”很方便下載。如:mm小游戲,化妝小游戲,休閑小游戲,連連看小游戲,生活小游戲,等等。而且現在的數碼小產品被越來越多的青年所青睞,擁有諸如mp3/mp4,智能手機,pda,或電腦單機的逐漸壯大的用戶群也正是這種網站的潛在用戶群體。再次,隨著電視上網進程的推進,網絡走進千家萬戶的時代為期不遠。因為電視分辯率與內存大小的限制,以及遙控器操作要求動作簡
7、單,這種小游戲將會有一個巨大而潛在的市場。就拿現在來說網絡上就盛行迷你小游戲,化裝小游戲,美眉小游戲,qq小游戲,美眉化妝小游戲,黃金礦工,合金彈頭,生活小游戲等等。這些都是現在網路搜索率高,娛樂性強的游戲。今后小游戲的發展趨勢:1.體積小,小游戲一般都占硬盤空間相當小,方便下載傳播; 2.內容好,體積小并不代表沒有內容,相反小游戲的內容還是比較豐富的; 3.耐玩,正是因為小游戲占空間不大,它也是在電腦上占據時間比較長的游戲了;4.娛樂性高,小游戲玩起來還是蠻有趣的,擁有一定的娛樂性;5.無年齡層次,不分老少、不分男女小游戲面向的玩家范圍廣闊;6.有益身心健康,小游戲的操作不像大游戲那樣操作復
8、雜,它們通常就是通過幾個簡單的按鍵就可以控制游戲,甚至只用到鼠標就行了,但是就是這幾個簡單的按鍵對于游戲的操控,可以達到手腦協調的特效,而且保持一個好的心情,有益身心。1.2 研究現狀與目標1.2.1 研究現狀c 語言是結構化和模塊化的語言,它是面向過程的。在處理較小規模的程序時,程序員用 c 語言較得心應手。但是當問題比較復雜、程序的規模比較大時,結構化程序設計方法就顯出它的不足。c 程序的設計者必須細致地設計程序中的每一個細節,準確地考慮到程序運行時每一時刻發生的事情,例如各個變量的值是如何變化的,什么時候應該進行哪些輸入,在屏幕上應該輸出什么等。這對程序員的要求是比較高的,如果面對的是一
9、個復雜問題,程序員往往感到力不從心。當初提出結構化程序設計方法的目的是解決軟件設計危機,但是這個目標并未完全實現。為了解決軟件設計危機,在 20 世紀80 年代提出了面向對象的程序設計(object-oriented programming,簡稱 oop),在這種形勢下,c+ 應運而生。c+ 是由貝爾實驗室的 bjarne stroustrup 博士及其同事在 c 語言的基礎上開發成功的。c+ 保留了 c 語言原有的所有優點,增加了面向對象的機制。c+ 與 c 完全兼容,用 c 語言寫的程序可以不加修改地用于 c+。從 c+ 名字可以看出它是對 c 的擴充,是 c 的超集。它既可以用于結構化程
10、序設計,又可用于面向對象的程序設計,因此它是一個功能強大的混合型的程序設計語言。使用 c+ 必須事先安裝 c+ 編譯系統,在 dos 系統下可以使用 turbo c+ 或 borland c+ 。c 源程序的后綴一般為.c,而 c+ 的后綴一般為.cpp(為 c plus plus 的縮寫,即 c+)。在 borland c+ 開發環境中,既可以使用 c 語言,也可以使用 c+ 語言。它有兩個編譯系統,根據源程序文件名的后綴是 c 還是 cpp 來決定使用哪個編譯系統。如上所述,面向對象程序設計方法主要是解決大型軟件的設計問題。只有編寫過大型程序的人才會體會到 c 的不足和 c+ 的優點。c+
11、 是一種大型語言,其功能、概念和語法規定都比較復雜,要深入掌握到需要花較多的時間,尤其是需要有較豐富的實踐經驗。用 c+ 編程的主要是軟件專業人員。c+ 對 c 的“增強”,表現在兩個方面:1.在原來面向過程的機制基礎上,對 c語言的功能做了不少擴充。2.增加了面向對象的機制。vc+是microsoft公司推出的一個基于windows系統平臺、可視化的集成開發環境,它的源程序按c+語言的要求編寫,并加入了微軟提供的功能強大的mfc(microsoft foundation class)類庫,充分體現了微軟公司的技術精華。mfc中封裝了大部分windows api函數和windows控件,它包含
12、的功能涉及到整個windows操作系統。mfc不僅給用戶提供了windows圖形環境下應用程序的框架,而且還提供了創建應用程序的組件。使用vc+提供的高度可視化的應用程序開發工具和mfc類庫,可使應用程序開發變得更簡單。mfc提供的類庫是高度抽象的程序設計,它使得程序員的主要精力不用放在程序設計的具體細節實現上,而放在程序的功能擴展上面。 1.2.2 研究目標c+學習過程中,涉及到很多的基本知識點,需要以練習的形式逐步深入,以達到融會貫通的目的。學習c+是一項交互式練習,不實際編寫程序就無法學會c+,因此,要抱著一種十年方能磨一劍的心理,扎扎實實從基礎開始。選一些好的實例,這些實例經過反復的挑
13、選,既有利于我們掌握有關知識,又不失趣味性。不斷地寫代碼,寫有意義的代碼。這其實也是入門任何其他編程語言的必由之路。在編程的過程中,重點訓練我的編程的邏輯思路和算法以及編程、調試的基本技術。因此,在作此畢業設計時,以任務驅動為前提,從提出問題入手,進行分析和算法設計,最后再歸納總結,以加強學習的針對性和應用性。 萬丈高樓平地起,能夠編寫復雜的游戲都是在編寫過簡單的游戲基礎上演變過來的能力。然而像貪吃蛇這樣的簡單的游戲,就自然成了游戲設計者的入門首選。因為其界面簡單,操作、玩法一目了然,所以編寫起來就不會很困難,而且需要考慮的問題也不用很多,就是蛇的顯示、移動、碰撞3個游戲的主塊,攻破這3個主塊
14、,程序就自然編寫出來了,不會一開始就把游戲設計初學者拒之門外。編成之后成就感就會油然而生,并使之對游戲設計產生強烈的興趣。成為向游戲設計之路成功邁出的第一步,同時對于vc+的應用水平也會上升,用起來會更加嫻熟、得心應手。從易到難這是一個準則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。第二章 c+程序語言與工具的基本簡介2. 1 c+語言基礎c+這個詞在中國大陸通常被讀做“c加加”,而西方的程序員通常讀做“c plus plus”,“cpp”或者“dev.cpp。 它是一種使用非常廣泛的計算機編程語言。c+是一種靜態數據類型檢查的,支持多重編程范式的通用程
15、序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、制作圖標等等泛型程序設計等多種程序設計風格。 c+的主要優點在于靈活性、效率以及編譯期類型計算功能。它提供了豐富的語言特性和庫,支持多種編程范型,絕不限制程序員應該做什么或如何做。在解決大規模程序的組織問題的同時,c+還完美地繼承了c的高效性。在各種動態語言粉墨登場的時代,c+堅定地朝著另一個方向大踏步前進,不斷強化其靜態特性。強大的編譯期類型計算功能終將成為c+無與倫比的特色。c+ 是c語言的一個高級版本,支持中文,界面高級,不需要啟動母文件即可運行程序。 美國at&t貝爾實驗室的本賈尼斯特勞斯特盧普(bjarne stroust
16、rup)博士在20世紀80年代初期發明并實現了c+(最初這種語言被稱作“c with classes”)。一開始c+是作為c語言的增強版出現的,從給c語言增加類開始,不斷的增加新特性。虛函數(virtual function)、運算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、rtti、名字空間(name space)逐漸被加入標準。1998年國際標準組織(iso)頒布了c+程序設計語言的國際標準iso/iec 14882-1998。c+是具有國際標準的編程語言,通常稱作ansi/
17、iso c+。1998年是c+標準委員會成立的第一年,以后每5年視實際需要更新一次標準,下一次標準更新將是在2009年,目前我們一般稱該標準c+0x。遺憾的是,由于c+語言過于復雜,以及他經歷了長年的演變,直到現在(2004年)只有少數幾個編譯器完全符合這個標準(這么說也是不完全正確的,事實上,至今為止沒有任何一款編譯器完全支持iso c+)。 另外,就目前學習c+而言,可以認為他是一門獨立的語言;他并不依賴c語言,我們可以完全不學c語言,而直接學習c+。根據c+編程思想(thinking in c+)一書所評述的,c+與c的效率往往相差在正負5%之間。所以有人認為在大多數場合c+ 完全可以取
18、代c語言(然而我們在單片機等需要謹慎利用空間、直接操作硬件的地方還是要使用c語言)。 根據effective c+第三版第一條款的描述,現在c+由以下四個“子語言”組成: 1、c子語言。c+支持c語言的幾乎全部功能,在語法上與c語言僅有極微妙的差別(如括號表達式的左右值性,具體請參考c+標準文獻)。 2、面向對象的c+。c+首先作為一門面向對象的語言而聞名,這個特點在這里不再詳述。 3、泛型編程語言。c+強大(但容易失控的)模板功能使它能在編譯期完成許多工作,從而大大提高運行期效率。 4、stl(c+標準模板庫)。隨著stl的不斷發展,它已經逐漸成為c+程序設計中不可或缺的部分,其效率可能比一
19、般的naive代碼低些,但是其安全性與規范性使它大受歡迎。 c+語言發展大概可以分為三個階段:第一階段從80年代到1995年。這一階段c+語言基本上是傳統類型上的面向對象語言,并且憑借著接近c語言的效率,在工業界使用的開發語言中占據了相當大份額;第二階段從1995年到2000年,這一階段由于標準模板庫(stl)和后來的boost等程序庫的出現,泛型程序設計在c+中占據了越來越多的比重性。當然,同時由于java、c#等語言的出現和硬件價格的大規模下降,c+受到了一定的沖擊;第三階段從2000年至今,由于以loki、mpl等程序庫為代表的產生式編程和模板元編程的出現,c+出現了發展歷史上又一個新的
20、高峰,這些新技術的出現以及和原有技術的融合,使c+已經成為當今主流程序設計語言中最復雜的一員。2.2 面向對象的程序設計面向對象程序設計(英語:object-oriented programming,縮寫:oop),指一種程序設計范型,同時也是一種程序開發的方法論。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的重用性、靈活性和擴展性。當我們提到面向對象的時候,它不僅指一種程式設計方法。它更多意義上是一種程序開發方式。在這一方面,我們必須了解更多關于面向對象系統分析和面向對象設計(object oriented design,簡稱ood)方面的知識。面向對象程序設計可以被視作一種
21、在程序中包含各種獨立而又互相調用的單位和對象的思想,這與傳統的思想剛好相反:傳統的程序設計主張將程序看作一系列函數的集合,或者直接就是一系列對電腦下達的指令。面向對象程序設計中的每一個對象都應該能夠接受數據、處理數據并將數據傳達給其它對象,因此它們都可以被看作一個小型的“機器”,或者說是負有責任的角色。目前已經被證實的是,面向對象程序設計推廣了程序的靈活性和可維護性,并且在大型項目設計中廣為應用。 此外,支持者聲稱面向對象程序設計要比以往的做法更加便于學習,因為它能夠讓人們更簡單地設計并維護程序,使得程序更加便于分析、設計、理解。反對者在某些領域對此予以否認。.oop有三個特性: 第一個關鍵特
22、性是定義了類,封裝了表現和操作的抽象數據類型。在oop語言中,類是模塊、封裝和數據抽象的基礎。 第二個關鍵特性是繼承,從已存在的類型中繼承元素(表現和方法),改變或擴展舊類型的方法。 第三個關鍵技術被稱為多態性,它允許使用類似的方法操作不同類型的對象(通常是子類對象)。它使得類的可用性進一步提高,程序也因此更容易維護和擴展。通常,oop被理解為一種將程序分解為封裝數據及相關操作的模塊而進行的編程方式。有別于其它編程方式,oop中的與某數據類型相關的一系列操作都被有機地封裝到該數據類型當中,而非散放于其外,因而oop中的數據類型不僅有著狀態,還有著相關的行為。oop理論,及與之同名的oop實踐相
23、結合創造出了新的一個編程架構;oop思想被廣泛認為是非常有用的,以致一套新的編程范型被創造了出來。2.3 vc+的介紹vc+是microsoft公司推出的一個基于windows系統平臺、可視化的集成開發環境,它的源程序按c+語言的要求編寫,并加入了微軟提供的功能強大的mfc(microsoft foundation class)類庫,充分體現了微軟公司的技術精華。 mfc中封裝了大部分windows api函數和windows控件,它包含的功能涉及到整個windows操作系統。mfc不僅給用戶提供了windows圖形環境下應用程序的框架,而且還提供了創建應用程序的組件。使用vc+提供的高度可視
24、化的應用程序開發工具和mfc類庫,可使應用程序開發變得更簡單。mfc提供的類庫是高度抽象的程序設計,它使得程序員的主要精力不用放在程序設計的具體細節實現上,而放在程序的功能擴展上面。 第三章 貪吃蛇游戲簡介與總體設計3.1 貪吃蛇簡介蛇傳說中的圣靈之物,仰頭為神、俯首為魔。蛇是月亮國膜拜的神,月亮國的子民們都認為蛇是萬能的主宰派來保護他們的守護者。蛇在這個島嶼就像空氣一樣自然的出現在各個角落,有些還成為居民的寵物,陪伴孩子長大,和年輕人一起去探險,守護著散步的老人。 在善良的女媧神保佑下,人們的生活安寧平靜。為了答謝女媧的庇佑,每年月亮國的國民都會舉辦一個守護蛇大賽,大家都會拿出自己最強、最炫
25、、最快、最稀有的蛇來參加比賽,獲得第一名的人將得到國王的特別嘉獎。所以國民一生都在不斷的培養更有威力、更長、更壯的蛇。“貪吃蛇”是一個產生于1970年代中后期的計算機游戲,也叫貪吃蛇。該游戲在1990年代由于一些手機將其引入而一時間再度流行起來。在游戲中,玩家操控一條細長的蛇爬行于一個帶邊界的平面之上,一路拾起觸碰到之事物或其它類似的物件,并要避免觸碰到自身或者包圍著游戲區的“墻”。每次貪吃蛇吃掉一件食物,它的身體便增長一些,這讓游戲的難度漸漸變大。操控貪吃蛇時,玩家操控貪吃蛇的頭部的朝向(向上、向下、向左或向右)控制貪吃蛇的進行方向,貪吃蛇的身體將跟隨著其頭部行進。另外,玩家不可在游戲中途停
26、止貪吃蛇的進行。隨著貪吃蛇的成功移植到手機系統,貪吃蛇的操作按鍵要求與手機按鍵的完美匹配,使貪吃蛇游戲風靡起來。3.2 開發環境3.2.1 開發工具和軟件運行環境開發工具:inter(r)pentium(r) 4 cpu 2.90ghz ,512mb內存,80gb硬盤microsoft(r) windows(r) xpmicrosoft(r) visual c+ 6.0軟件運行環境:處理器無要求,32mb以上內存,硬盤1gb以上microsoft(r) windows(r) 系列所有操作系統800*600或以上的屏幕分辨率3.2.2 vc+6.0集成開發環境vc+6.0集成開發環境是集程序文件
27、的輸入、編輯、編譯、連接、運行等各種操作為一體的、具有windows窗口界面特色的環境。利用vc+6.0集成開發環境開發c+程序的步驟大致為:1. 根據實際應用問題分析出編程思路,即程序的模塊結構和文件結構,包含有哪些函數模塊和哪些文件,函數之間的調用關系如何;2按照c+語言的語法規則編寫出c+程序;3在vc+集成開發環境下,分別輸入、編輯每個程序文件(.cpp);4分別運行c+系統中的編譯程序使每個程序文件編譯生成相應的目標文件(.obj);5運行c+系統中的連接程序把編譯后的所有目標文件連接生成一個可執行的文件(.exe)6選擇菜單中的執行程序選項運行連接后生成的可執行文件,得到處理結果。
28、3.3 創建游戲的主框架和操作特性分析3.3.1 創建游戲的主框架首先建立一個win32 console application工程,命名為snakegame,并在,選擇一個空的工程,然后單擊完成。其項目的架構類視圖信息如圖3-1所示:在構架類視圖中:snake_segment是定義的關于蛇身的數據結構,包括2個數據元素:橫坐標row,縱坐標col;globals是游戲中定義的所以全局變量和定義的構造函數。圖3-1貪吃蛇的游戲類 3.3.2 操作特性分析貪吃蛇的操作是通過鍵盤中的“w”,“a”,“s”,“d”控制蛇頭部的轉向的,但是不可向相反方向按鍵,例如,假設蛇正向右方向行進的時候,不可以按
29、向左的方向以期其反轉向行進。在游戲進行中當玩家想要強行退出時,提供了“x”這個按鍵的控制,可令玩家隨心所欲。當游戲結束時,玩家可以通過按下按鍵“y”,繼續進行游戲;或是按下“n”,來結束游戲。3.3.3 貪吃蛇的功能描述對于貪吃蛇,其功能描述如下:一、功能描述食物一次隨機在游戲區域產生一個,每當被吃掉就自動在隨機生成一個。玩家通過控制蛇的運動,在游戲安全區域(圍墻里面屬安全區)尋找食物,每吃到一個食物,蛇的長度就會增長一節。隨著蛇的成長,蛇的行進速度也會變快,此時游戲難度隨之加大,直到蛇頭碰到圍墻或是碰到自己身體的某部分,則游戲結束。二、游戲界面描述:游戲界面簡單,有關于分數的顯示。整個游戲是
30、在控制臺里完成的,蛇身、食物、圍墻等可以用不同的顏色顯示。蛇身用“oooo”顯示,食物用“*”顯示,圍墻用一系列“= = =”顯示。美感談不上,只有簡單。如圖3-2所示。圖3-2游戲畫面第四章 用vc+設計貪吃蛇的具體實現4.1 寫在設計前的構思4.1.1 設計前的游戲分析在具體設計游戲之前,先來分析一下整個游戲的大體上的實現。貪吃蛇這個游戲,程序的主體可以大致分為:1.蛇的移動2.蛇的頭部方向的改變3.食物的產生這3個部分。采用分治算法的思想對游戲進行分析。第一項蛇的移動,就是在玩家沒有對蛇進行操作的時候,蛇會自動地往某個固定方向進行移動,直至蛇頭碰到圍墻。這一項可采用動畫片設計的思想,通過
31、連續切換有變化的圖片,圖片上的蛇就會動起來了。基于這個構想,確定出2個時時刻刻都在變化的點,一個是蛇的頭部,一個是蛇的尾部。蛇的頭部和尾部在時刻1的位置,到了時刻2蛇的頭部要向前伸長一節,蛇的尾部也要向前伸長一節,同時時刻1的尾部也要消除掉。第二項蛇的頭部方向的改變,就是在游戲和玩家交互的時候,當游戲玩家按下操控改變蛇頭部的按鍵,此時蛇身會按玩家的意愿,做出相應的動作。要完成這一個,第一要接受玩家的按鍵,第二要做出相應的反應。第三項食物的產生,蛇的成長是依靠不斷地吞掉食物一節一節生長的,游戲區域每吃掉一個食物,要在游戲區域自動產生另一個食物,同時出現食物的位置是隨機的。這個可以設置隨機數生成函
32、數,注意到屏幕上的點是和矩陣聯系在一起的,因此每個點都是有橫縱坐標的,想要在屏幕上的某個點顯示什么這就變的很容易了。最后游戲的退出設計可以通過設置循環來完成。這里,先分析游戲的特點,把整個游戲的核心數據結構提取出來,再根據數據結構的特點提取核心功能模塊的關聯,然后對這些功能一一進行細化,從而完成整個游戲的設計。4.1.2 定義蛇身的數據結構對于蛇身在某一瞬間的位置標識,我們采用一個一維的數組來標識出來,即用動態增長的數組來存儲每一節蛇身的位置(包括蛇頭和蛇尾),也就是說,用存儲單位空間存儲當前蛇身某部位的位置來對整個蛇身的位置進行標識,因此每個存儲空間的內容就是一個點的坐標值(row,col)
33、,而蛇身以從左到右的方式進行編號,最左邊是蛇的尾部,最右邊是蛇的頭部。如表4-1為三節蛇的數據結構。表4-1三節蛇的數據結構(snake0.row, snake0.col)(snake1.row, snake1.col)(snake2.row, snake2.col)snake0.row和snake0.col是第0號蛇身也就是蛇尾的橫坐標row和縱坐標col ;依此類推,snake2.row和snake2.col則是第2號蛇身也就是蛇頭的橫坐標row和縱坐標col。4.2 算法設計與程序流程圖4.2.1 貪吃蛇算法設計snake game:=1:初始化游戲,游戲界面的繪制、游戲速度的設置、食物
34、產生2:while 玩家不按退出鍵3: if 玩家按下某方向鍵4: 蛇身按照玩家按下方向移動5: else 蛇身按照默認方向(右)移動6: end if7: if 蛇頭碰到墻壁8: 游戲結束9: end if10: if 蛇頭碰到自身11: 游戲結束12: end if13: if 蛇頭碰到食物14: 蛇身增長、分數增加、產生新食物15: end if16:end while17:游戲結束4.2.2 程序流程圖游戲初始化界面繪制、產生食物方向鍵按下蛇行進方向為按下方向鍵蛇正常移動碰壁撞到自己碰到食物蛇身增長、分數增加、再產生食物玩家沒有按退出鍵游戲結束圖4-1程序流程圖4.3 光標移動的設計與
35、實現在游戲過程中,對于光標的移動相當重要。首先,食物的產生是隨機的,可能出現在游戲界面的任何一個地方,因此生成隨機坐標后,就要將光標移動到該坐標,然后進行顯示食物操作。其次,游戲界面的顯示也需要移動光標。譬如,縱向的圍欄的顯示。再次,就是蛇身的移動了,蛇尾部要不斷清空,這樣蛇就動起來了。其中x為縱坐標,y是橫坐標,(x,y)對應于屏幕上的像素點。coord 這個數據結構、setconsolecursorposition()、getstdhandle()這2個函數都是頭文件windows.h里的。其中setconsolecursorposition()將光標位置設為指定位置,getstdhand
36、le()得到標準輸入輸出的句柄。gotoxy()這個函數是布爾型的,返回真或假。bool gotoxy( short x, short y ) /移動光標coord coord = x, y ;if( !setconsolecursorposition( getstdhandle( std_output_handle ), coord ) ) return false;if( !setconsolecursorposition( getstdhandle( std_error_handle ), coord ) ) return false;return true;下面將光標移動應用到貪吃蛇游
37、戲中。4.3.1 顯示水平圍墻的實現水平圍墻就是在游戲區域中,限制蛇行動的上下界,即活動的最大邊界。這里用一系列“= = =”連續顯示,直到設定的最大活動范圍。void drawline(int col, int row)gotoxy(col,row); for (int i=0;imaxcol+2;i+) cout=;水平圍墻如圖4-2所示。 圖4-2水平圍墻4.3.2 顯示分數的實現對于玩家的得分,是在游戲當中,玩家控制貪吃蛇每當吞掉一個食物,相應的分數就會增加一分。游戲結束時,分數會清零,再下一盤游戲中從0分開始計數。void showscore()gotoxy(20,maxrow+3)
38、;coutscore: score;玩家的分數顯示如圖4-3所示,初始分數為0。 圖4-3分數的顯示4.3.3 接收玩家按鍵信息的實現為了接收來自鍵盤的信息,這里用到了conio.h這個頭文件。通過一個布爾函數kbhit()的真假來判斷是否有按鍵被敲擊,如果沒有,游戲正常運行;否則通過getch()得到那個char變量的按鍵信息,然后修改蛇的運動方向。4.3.4 游戲結束時顯示信息的實現當游戲介紹時,屏幕上要顯示“game over”的字樣,還有another game (y/n)? 的字樣來讓玩家選擇繼續游戲還是退出游戲。這里是通過使用gotoxy()函數,使上述的字樣在想要顯示的位置出現的
39、。游戲結束的顯示信息如圖4-4所示。圖4-4游戲結束的顯示4.4 貪吃蛇游戲主干的設計4.4.1 游戲的初始化與加載的實現游戲開始的時候,初始化蛇的長度為4節,行進方向為向右。并定義一個2維數組screengridrowcol,該數組的作用是產生食物用。蛇開始移動的坐標是(2,2)。然后繪制圍墻橫的圍墻用一排“=”顯示,縱的圍墻用一列“|”顯示,這樣游戲的框架就出來了。初始化游戲分數,并顯示游戲的一些幫助,如按鍵設置等。游戲初始化,包括蛇的初始長度,蛇初始行進的方向,游戲區域的顯示。void loadgame()int row,col;snake_length=4;/蛇的初始長度directi
40、on = right_key;/蛇初始行進的方向for(row=0;rowmaxrow;row+)/定義screengridrowcol這個2維數組for(col=0;colmaxcol;col+)screengridrowcol= ;for(int i=0;isnake_length;i+)/初始化蛇身每節的橫、縱坐標值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();/顯示分數gotoxy(2,maxrow+5);cout snake game left:left_key right:right_key up:up_key down:down_key exit: x.;/顯示游戲的幫助信息:按鍵設置游戲加載完成后,效果如圖4-5所示。圖4-5貪吃蛇的初始化4.4.2 食物隨機產生的實現對于前面提到過的一個2維數組screengridrowcol這里要用到。用rand()函數生成2個隨機生成的整數作為食物的橫坐標和縱坐標
42、,并判斷食物是否出去圍墻,如果在游戲區域外面,則對隨機生成的橫縱坐標進行修改。然后移動光標到此坐標處進行輸出“*”操作。(用“*”代表食物)這里的c和r會在判斷蛇頭是否碰到食物用到。這里要應用到time.h這個頭文件,用于產生隨機數。void creatfood()int col,row;row= rand()%maxrow;/生成隨機的橫坐標 col= rand()%maxcol;/ 生成隨機的縱坐標if(row3)/判讀橫坐標出界row+=3;if(col3)/判讀縱坐標出界col+=3;c=col;r=row; screengridrowcol=*;gotoxy(col,row); co
43、utscreengridrowcol;/在游戲區域顯示食物食物隨機產生,如圖4-6所示。圖4-6食物的隨機產生4.4.3 蛇身的增長設計實現對于蛇身增長的設計要考慮到蛇頭的運行方向。如果蛇頭向右行進,新增加的蛇身橫坐標不變,縱坐標增加1;如果蛇頭向左行進,新增加的蛇身橫坐標不變,縱坐標減少1;如果蛇頭向上行進,新增加的蛇身縱坐標不變,橫坐標減少1;如果蛇頭向下行進,新增加的蛇身縱坐標不變,橫坐標增加1。void addsegment()switch(direction)/判斷蛇身的運行方向case(right_key): /蛇身向右方向行進snakesnake_length.row=snake
44、snake_length-1.row;snakesnake_length.col=snakesnake_length-1.col+1;break;case(left_key) : /蛇身向左方向行進snakesnake_length.row=snakesnake_length-1.row;snakesnake_length.col=snakesnake_length-1.col-1;break;case(up_key) : /蛇身向上方向行進snakesnake_length.row=snakesnake_length-1.row-1;snakesnake_length.col=snakesn
45、ake_length-1.col;break;case(down_key) : /蛇身向下方向行進snakesnake_length.row=snakesnake_length-1.row+1;snakesnake_length.col=snakesnake_length-1.col;break;default:/默認設置break;4.4.4 蛇身的顯示與移動的設計實現對于蛇身的顯示屬于本程序設計的難點之一,因為蛇身是一個運動的物體,每個時刻蛇的某一節所在的位置是變化的。就像一個動畫過程,需要每隔一個固定的時間,對蛇進行顯示一次,并將蛇尾部的一節消掉,使蛇頭向前增進一節。這是一個動態的過程,
46、當然設置的固定顯示蛇身時間是能讓人眼來得及反應的時間,也就是不能太快,否則在人看來就是頻閃的一串了。其中addsegment()這個函數是用來為蛇頭的前移賦值的。void snakemove() addsegment();/為蛇頭前進賦值gotoxy(snake0.col,snake0.row);cout ;/暫時消除蛇尾for (int i=1;i=snake_length;i+)/在數組snakei中刪除snake0的值,重新賦值snakei-1=snakei; for (i=0;isnake_length;i+)/顯示蛇身的各個部分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.其次,考慮蛇的頭部是否與自己身體的某個部位產生的碰撞檢測。如果檢測到有碰撞,則游戲結束;否則游戲正常進行。這個是通過一個循環將蛇的頭部的橫、縱坐標值與每節蛇身(除了蛇頭外)直到蛇的尾部的橫、縱坐標值進行比對,一旦發現蛇身某部位的橫、縱坐標值與蛇的頭部的橫、縱坐標值一致,則游戲結束;否則游戲正常進行。/檢測碰到蛇身for (i=
48、0;isnake_length-1;i+)if ( (snakesnake_length-1.row)=(snakei.row) &(snakesnake_length-1.col)=(snakei.col)keypress=x; /退出游戲break; /無需再進行比較如圖4-8所示為蛇碰到自身的情況,蛇頭與距蛇尾長度一的蛇身處相撞。圖4-8 蛇碰到自身的情況3.最后,就是蛇的頭部是否與食物產生碰撞的檢測了。如果檢測到沒有碰撞,則游戲正常進行;否則首先將2維數組screengridrowcol里有食物的那個數據元素清空,以便生成下一個食物。然后在游戲區域再隨機產生一個食物,分數和蛇的長度分別
49、增加1,最后在游戲區域下方顯示分數。這里是通過令蛇的頭部的橫、縱坐標與先前產生食物時設置的2個變量進行比較判斷的,這2個變量分別是r,c(r表示食物的橫坐標,c表示食物的縱坐標),如果2者分別相等,則成功吞掉食物;否則游戲繼續進行。/檢測吃到食物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 蛇碰到食物的情況第五章 總結與展望通過理論與實踐的完美結合,我的貪吃蛇游戲成功的編制完成了。雖然所編寫的這個游戲很簡單,又因自己的能力有限,游戲畫面相當粗糙,沒有經過美化的界面美感就談不上了,只能用簡陋形容了。但是值得驕傲的是整個游戲的編寫是自己親手,并且依靠自己的智慧獨立完成的。在編寫游戲過程中,遇到了許多難題,例如,蛇的頭部與食物的檢測問題,蛇的移動與顯示問題,蛇的轉向問題,食物的隨機生成問題等等,這些個難題擺在面前,讓人實在有些招架不住。經過查閱大量的文獻資料閱讀相關的書籍,最后就決定了采用分治算法的思想來對擺在面前的問題一一擊破。在解決的是蛇的移動與顯示問
51、題的時候,通過大量的研究、實驗與調試,試驗過多種移動與顯示的方式,最后選定了一種簡單易用的算法。解決難題的時候,仿佛是撥了一層云,又見一層云,但是日光也越來越閃耀了,最終看到了太陽,取得了成功。自己感覺通過這次學習研究,自己受益匪淺。不僅自己揭開了游戲程序神秘的面紗,而且在實際的程序編寫與調試過程中,自己成長了不少,實戰的能力提高了很多。萬丈高樓平地起,能夠編寫復雜的游戲都是在編寫過簡單的游戲基礎上演變過來的能力。然而像貪吃蛇這樣的簡單的游戲,就自然成了游戲設計者的入門首選。因為其界面簡單,操作、玩法一目了然,所以編寫起來就不會很困難,而且需要考慮的問題也不用很多,就是蛇的顯示、移動、碰撞3個游戲的主塊,攻破這3個主塊,程序就自然編寫出來了,不會一開始就把游戲設計初學者拒之門外。編成之后成就感就會油然而生,并使之對游戲設計產生強烈的興趣。成為向游戲設計之路成功邁出的第一步,同時對于vc+的應用水平也會上升,用起來會更加嫻熟、得心應手。從易到難這是一個準則,總之,貪吃蛇小游戲的研究會對增長程序閱讀能力、程序編寫能力等起到了意想不到的作用。當然,自己的程序不足之處到處都是,譬如可以將畫面設計的美觀一點,可以設置一下游戲的難度,可以令算法的執行效率再高一點并不滿足于編寫出來就行。在以后漫漫的研究學習道路
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025管理人員崗前安全培訓考試試題帶答案(培優A卷)
- 2024-2025企業管理人員安全培訓考試試題及參考答案【綜合卷】
- 2024-2025廠級職工安全培訓考試試題a4版打印
- 2025建筑設備租賃合同范本2
- 2025遼寧省家庭居室裝飾裝修合同(LF)
- 2025專業版汽車租賃合同模板
- 2025資金協調項目居間合同
- 2025年石墨化工設備項目建議書
- 2025貸款服務合同范本
- 2025年石油產品添加劑:燃料油添加劑項目合作計劃書
- 滿堂腳手架計算書
- 01K403 風機盤管安裝
- 藥理學教學課件:抗流感病毒藥
- 2023年承德縣小升初英語考試題庫及答案解析
- 2023年大學生《思想道德與法治》考試題庫附答案(712題)
- GB/T 7705-2008平版裝潢印刷品
- GB/T 41326-2022六氟丁二烯
- 廣西玉林市容縣十里中學九年級化學 酸堿鹽復習課件 人教新課標版
- 鏟車三個月、半年、年保養記錄(新)
- 腦電圖(圖譜)課件
- 《概率思想對幾個恒等式的證明(論文)9600字》
評論
0/150
提交評論