貪吃蛇游戲的設計與實現畢業論文_第1頁
貪吃蛇游戲的設計與實現畢業論文_第2頁
貪吃蛇游戲的設計與實現畢業論文_第3頁
貪吃蛇游戲的設計與實現畢業論文_第4頁
貪吃蛇游戲的設計與實現畢業論文_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、新 鄉 學 院 畢 業 論 文論文題目貪吃蛇游戲的設計與實現院(系)名稱計算機與信息工程學院專業名稱計算機應用技術班 級學生姓名學 號指導教師姓名2010年4月完成目錄內容摘要:1關鍵詞:1abstract:1key words:11.游戲設計背景21.1游戲設計原理21.2游戲設計的運行環境22.游戲設計相關知識介紹42.1 flash理論基礎知識要點42.2面向對象編程52.3游戲制作中常用函數的屬性與方法53. 制作貪吃蛇游戲的整體規劃93.1貪吃蛇游戲的大致結構圖93.2游戲設計整體構思93.3透視游戲設計的核心重點算法93.4游戲設計核心重點函數控制94. 游戲詳細設計與核心技術10

2、4.1游戲的詳細設計104.2游戲的核心技術115.貪吃蛇游戲設計總結16參考文獻17致 謝17內容摘要:貪吃蛇游戲,因為制作簡單,邏輯性較強,通常是學做游戲的必練的項目。貪食蛇游戲是目前各種流行手機中附帶的一款休閑小游戲。 flash是macromedia公司發布的制作高壓縮性網絡內容的專業標準動畫軟件。隨便打開一個網頁,都能發現flash動畫的身影flash動畫作品已經充斥整個網絡。毫無疑問flash已經是制作網絡動畫的霸主。透過現象看本質:游戲的制作與flash的基礎原理密不可分,同時也與制作者的良好修養密不可分,進而提高本身綜合素質的的整體提高!關鍵詞:原理 運行環境 理論基礎 詳細設

3、計 核心技術abstract: snake game, because the production of simple logic is strong, often the game will learn to practice projects. snake mobile game is all included with a popular casual games. macromedia flash is the production company released the contents of high-compression network of professional st

4、andards for animation software. casually open a web page, flash animation can be found in the figures of flash animation has flooded the entire network. there is no doubt that flash is already the dominant animation production network. look beyond the surface: the games basic principles of productio

5、n and flash are inseparable, but also with the producers of good training are inseparable, and thus improve their overall quality of the overall improvement!key words:principle operating environment theoretical basis detailed design core technology1.游戲設計背景隨著科技與經濟的快速發達,知識經濟的快速增長,娛樂逐漸變成人與智能的交流。智能化的娛樂游

6、戲在網絡里愈來愈好,眾多的游戲不勝枚舉。比如益智類的小游戲、騰訊游戲、網頁游戲、格斗游戲、模擬游戲等,尤其是最近網絡上特別流行的flash制作的動畫越來越受關注。現在就探究下用flash軟件制作貪吃蛇的游戲的設計原理。1.1游戲設計原理游戲貪吃蛇就是在flash軟件用影片剪輯設計出蛇,食物,同時隨機地給出食物。游戲者通過鍵盤操作控制貪吃蛇的移動,去吃食物,吃到食物后消失,然后再隨機給出食物同時蛇的身體增長。設計蛇的原理就是利用人眼的視覺效應先將蛇頭向前移動一格,然后所有蛇身依次向前移動一格,最后再擦除蛇尾。這樣看來好像蛇在向前移動。食物的給出,首先需要產生一個隨機數,然后通過這個隨機數計算得到

7、食物的縱橫坐標,在軟件運行效果里顯示出來。控制蛇的移動方向,需要掃描鍵盤,然后根據鍵值改變蛇的移動方向。1.2游戲設計的運行環境學習flash開發,首先要建立首要的、基礎的正確認知。在幾乎任何應用程序開發中,都要接觸到三個相互關聯的方面:一個是開發環境,一個是運行環境,再一個是開發語言。1.2.1軟件開發環境flash應用程序開發也包含著三個方面,即使用flash cs3作為開發環境,以actionscript 2.0作為開發語言,以flash player 9為運行環境進行flash應用程序開發和創作的完整知識體系。對于flash應用程序開發,在進行flash開發時,安裝一個開發工具(也被稱

8、為開發環境、創作環境等。目前流行的flash開發工具基本都是adobe公司的產品,最著名的就是flash cs3和flex。1.2.2運行環境windowsmacintosh處理器800 mhz intel pentium iii processor (or equivalent) and later600 mhz powerpc g3 and later操作系統windows 2000, windows xpmac os x 10.3, 10.4內存256 mb ram (1 gb recommended to run more than one studio 8 product simul

9、taneously)256 mb ram (1 gb recommended to run more than one studio 8 product simultaneously) 顯示1024 x 768, 16-bit display (32-bit recommended)1024 x 768, thousands of colors display (millions of colors recommended) 磁盤空間710 mb available disk space360 mb available disk space1.2.3開發語言用戶要進行flash開發,要接觸是a

10、ctionscript(簡稱as),actionscript程序語言是用于flash開發的交互語言。actionscript有三種語言編寫風格,這就是as1、as2和as3。as1遵循ecma-262第3版所制定的規范,as2遵循即將發布的ecma-262第4版規范,但它們的運行環境只有一種,即flash player vm(adobe稱為avm1,avm是actionscript虛擬機的簡稱)。2.游戲設計相關知識介紹了解貪吃蛇的設計原理后,接下來就是對設計游戲的一些相關理論知識基礎及深入點的分層次介紹。2.1 flash理論基礎知識要點2.1.1 基礎概念(1)幀頻是動畫播放的速度,以每秒

11、播放的幀數為度量。幀頻太慢會使動畫看起來一頓一頓的,幀頻太快會使動畫的細節變得模糊。在 web 上,每秒 12 幀 (fps) 的幀頻通常會得到最佳的效果。quicktime 和avi 影片通常的幀頻就是 12 fps,但是標準的運動圖像速率是 24 fps。(2)將元件看作是一種模板,使用同一個模板能夠創建多個實例。對元件的實例可以做各種變換操作,而這些操作不會對元件的各種屬性有所更改。也可以改變元件的屬性,例如顏色、形狀以及邊線的粗細等。當對這些屬性加以修改后,舞臺上的所有實例的相應屬性也發生了變化。(3)影片剪輯擁有自身的、獨立于主影片的時間軸播放的多幀時間軸,即可以將影片剪輯看作主影片

12、內的小影片,它可以包含交互式控件、聲音、甚至其他影片剪輯實例,也可以將影片剪輯實例放置在按鈕元件的時間軸內,以創建動畫按鈕。(4)點語法:_root:表示絕對路徑,他指的是時間主軸。_parent:表示當前時間軸,可以操控當前時間軸上的對象等。變量作用域分為全局變量、本地變量和時間軸變量。2.1.2基本語法規則及簡單注意事項(1)變量、函數、對象、操作符、保留關鍵字等語言元素,有它自己的語法規則。actionscript擁有自己的句法和標點符號使用規則,這些規則規定了一些字符和關鍵字的含義,以及它們的書寫順序。例如,在英語中句號結束一個句子,而在actionscript中則用分號結束一個語句。

13、(2)動畫設計過程中的簡單注意事項。確保處在動畫測試模式。確保不在多層中添加相互矛盾的幀動作。確保多個動作腳本元素沒有使用相同的名字。確保所有的目標路徑以確保他們的正確無誤。2.2面向對象編程“對象” 是指屬性和方法的集合,每個對象都具有其各自的名稱,并且都是特定類的實例。相比較而言,對象是一個形象具體的概念,如生活中所使用的筆、紙張、書籍、計算機等,都可稱之為對象。而對于每個對象來說,它們都具有一些區別于其他對象的個體屬性,如大小、形狀、顏色、使用方法等。在面向對象編程中,類定義對象的類別,描述對象的屬性(數據)和行為(方法),類是一個較為抽象的概念,可以說是對象概念的提升,利用類可表現一組

14、相關對象中某些公共的屬性和行為。如果要使用類所定義的屬性和方法,必須先創建該類的實例,實例化對象其實就是指定某個特定的對象。 2.3游戲制作中常用函數的屬性與方法2.3.1 mouse類使用mouse類的方法可隱藏和顯示swf文件中的鼠標指針(光標)。默認情況下鼠標指針是可見的,但是用戶可以將其隱藏并實現用影片剪輯創建的自定義指針。方法名用法說明mouse.showmouse.show()在swf文件中顯示鼠標指針,指針在默認情況下可見mouse.hidemouse.hide()隱藏swf文件中的鼠標指針mouse.addlistenermouse.addlistener(newlistene

15、r)注冊一個對象以接收onmousedown、onmousemove和onmouseup通知。(參數:newlistener為一個對象)mouse.removelistenermouse.removelistener(listener)刪除用addlistener方法注冊的對象。(參數:listener為一個)movieclip.onmousedownmymovieclip.onmousedown當按下鼠標左鍵時調用movieclip.onmousemovemymovieclip.ommousemove當鼠標移動時調用movieclip.onmouseupmymovieclip.onmouse

16、up當釋放鼠標左鍵時調用2.3.2 key類key類是不通過構造函數即可使用其方法和屬性的頂級類。使用key類的方法可生成用戶能夠通過標準鍵盤控制的界面,該類的屬性是常量,表示控制游戲時最經常使用的鍵。方法名用法說明key.addlistenerkey.addlistener(newlistener)注冊一個對象,以接收onkeydown或onkeyup的通知key.getasciikey.getascii()返回按下或釋放的最后一個按鍵的ascii碼值key.getcodekey.getcode()返回最后一次按鍵的鍵控代碼值key.isdownkey.isdown(keycode)判斷是否

17、按下了參數keycode中指定的鍵。若按下則返回true;否則將返回false。key.istoggledkey.istoggled(keycode) 判斷capslock鍵或numlock鍵是否處于激活狀態,若是則返回true。key.removelistenerkey.removelistener(ustener)刪除通過addlistener方法注冊的對象。若刪除成功,則返回true;否則返回false。key.onkeydownsomelistener.onkeydown當按下某個按鍵時獲得通知key.onkeyupsomelistener.onkeyup當釋放某個按鍵時獲得通知2.3

18、.3 button類 按鈕是flash影片中實現交互功能最常見的對象,swf文件中的所有按鈕元件都是對象的實例,用戶可在屬性檢查器中指定按鈕實例名稱,并通過動作腳本使用button法和屬性來操縱按鈕。名稱用法說明button.ondragoutmybutton.ondragout當在按鈕上按下鼠標按鍵,并且不釋放按鍵時,然后將鼠標指針滑出按鈕時調用事件button.ondragovermybutton.ondragover當用戶在按鈕上按下鼠標,然后在不釋放按鍵的情況下將鼠標指針拖到按鈕之外后,再次將鼠標指針移到按鈕上方時調用事件button.onkeydownmybutton.onkeydo

19、wn當按下鍵盤上的某個按鍵時調用事件button.onkeyupmybutton.onkeyup當釋放鍵盤上的某個按鍵時調用事件button.onpressmybutton.onpress當在按鈕上按下鼠標按鍵時調用事件button.onreleasemybutton.onrelease當用戶釋放鼠標左鍵時調用事件2.3.4 movieclip類movieclip中類的方法提供的功能與定位影片剪輯的動作所提供的功能相同,無需使用構造函數方法即可調用movieclip類的方法,用戶只需在語法中按名稱引用影片剪輯實例即可。方法名與用法mymovieclip.attachmovie(idname,n

20、ewname,depth,initobject)從【庫】面板中取出一個元件,并將其附加到舞臺上由movieclip指定的影片中。mymovieclip.createmptymovieclip(instancename,depth)為現有的影片剪輯元件實例創建子級的空影片剪輯元件實例。新創建的空影片剪輯的注冊點為左上角。mymovieclip.createtextfield(instancename,depth,x,y,width,height)創建現有影片剪輯元件實例的子級空文本字段。mymovieclip.duplicatemovieclip(newname,depth,initobject

21、) 在影片播放時,復制指定影片剪輯元件的實例。mymovieclip.gotoandplay(frame) 跳轉到指定幀并開始播放影片。mymovieclip.gotoandstop(frame) 將播放頭跳轉到指定的幀,并停止影片的播放。mymovieclip.hittest(x,y,shapeflag) movieclip.hittest(target)判斷指定的實例是否與標識的點擊區域或target重疊或交叉。mymovieclip.loadmovie(url,variables)在播放原始swf影片時,將外部swf或jpeg文件加載到flashplayer中的影片剪輯中。mymovie

22、clip.removemovieclip()刪除使用duplicatemovieclip動作或movieclip對duplicatemovieclip或attachmovie方法創建的影片剪輯元件實例。mymovieclip.unloadmovie() 刪除使用loadmovie或attachmovie方法加載的影片剪輯元件實例。movieclip類的事件處理函數的八種狀態名稱用法說明movieclip.ondatamymovieclip.ondata當影片剪輯元件實例通過loadvariables或loadmovie方法調用接收數據時調用事件movieclip.onkeydownmymovi

23、eclip.onkeydown當影片剪輯元件實例設置了輸入焦點,并且有按鍵被按下時調用事件movieclip.onkeyupmymovieclip.onkeyup當鍵盤按鍵被釋放時調用事件movieclip.onmousedownmymovieclip.onmousedown當鼠標左鍵按下時調用事件ovieclip.onmousemovemymovieclip.onmousemove當移動鼠標時調用事件movieclip.onmouseupmymovieclip.onmouseup當釋放鼠標時調用事件movieclip.onpressmymovieclip.onpress當用戶在指定的影片剪輯

24、元件實例上按下鼠標左鍵時調用事件movieclip.onreleasemymovieclip.onrelease當用戶在指定的影片剪輯元件實例上釋放鼠標左鍵時調用事件2.3.5 sound類與math類math類的方法和屬性可以訪問和處理數學常數和函數。math類的所有屬性和方法都是靜態的,并且必須使用語法math.method(parameter)或math.constant來調用。游戲中食物的隨機出現就是利用了math函數里的隨機函數。游戲里的背景音樂還有對聲音圖標的控制也就是通過面向對象編程里的sound類函數來控制實現的。名稱用法說明sound.attachsoundmysound.a

25、ttachsound(idname)將指定標識符名稱的聲音文件附加到sound對象中sound.startmysound.start(secondoffset,loop)指定聲音文件的播放sound.stopsound.stop(idname)當指定了要停止播放的聲音時,將停止該聲音的播放;若未指定idname參數,則停止當前所有聲音的播放sound.setvolumemysound.setvolume(volume)設置sound對象的音量sound.loadsoundmysound.loadsound(url,isstreaming)將mp3聲音文件加載到sound對象的實例中2.3.6

26、array類通過array 類用戶可以訪問和操縱數組。數組是一個對象,其屬性由表示該屬性在數組中位置的數字來標識。此數字稱為“索引”。所有數組都從零開始,這意味著數組中的第一個元素為 0,第二個元素為 1,依此類推。方法說明array.concat()連接參數,并將其作為新數組返回array.join()將數組內的所有元素聯接為一個字符串array.pop()刪除數組中最后一個元素,并返回該元素的值array.push()將一個或多個元素添加到數組的結尾,并返回該數組的新長度array.reverse()倒轉數組的方向array.shift()刪除數組中第一個元素,并返回該元素的值屬性說明ar

27、ray.length指定數組中元素數量的非從零開始的整數3. 制作貪吃蛇游戲的整體規劃貪吃蛇游戲設計整體結構圖3.1貪吃蛇游戲的大致結構圖游戲封面背景與主題游戲運行界面核心代碼風格與設計影片剪輯函數腳本3.2游戲設計整體構思首先場景規劃,主要有兩個:一個是游戲封面,一個是游戲運行界面。其次是電影影片剪輯,主要有蛇,食物,背景設計等,按鈕及文字屬性都有自己的實例名,便于腳本控制。最后對整體的進行核心代碼編寫與控制。在軟件環境里運行并調試,發現問題,分析并解決。最后發布游戲。3.3透視游戲設計的核心重點算法貪吃蛇的核心算法是如何實現移動和吃掉食物。沒有碰到食物的時候,貪吃蛇繼續移動,吃到食物的時候

28、,蛇身增長。咬住蛇身或蛇尾的時候,能夠暫停和開始。讓游戲繼續下去,食物隨機出現,貪吃蛇繼續游動,并記錄游戲所得分數。3.4游戲設計核心重點函數控制(1)新建一個數組來保存當前的蛇的身體apiecelist = new array();(2)定義mouselistener對象來偵聽鼠標的onmousedown點擊事件mouselistener = new object();mouselistener.onmousedown = function()函數體;(3)addpiece函數的作用是調用一段身體來增長蛇身。(4)movefood函數的作用是當碰撞到食物的時候移動食物的位置。(5)start

29、game是腳本中重要的一部分。包括蛇的移動,碰撞和增加蛇身。4. 游戲詳細設計與核心技術4.1游戲的詳細設計實現游戲,主要的目的就是場景的布局及影片剪輯的在舞臺中的動畫實現。重點腳本代碼的實現后臺控制角色的運動。主要的設計內容就是如下步驟所示:4.1.1 游戲的設計的內容 (1) 新建一個300*500的文檔;(2)設置文檔屬性中的幀頻為12(設置的更高游戲的速度更快);(3)新建兩個場景,分別命名為:sceneone、scenetwo;(4)分別對兩個場景設置背景效果,是風格獨具一格,注重色彩的搭配;(5)設置主題文字效果,并為每個場景創建影片剪輯與按鈕;(6)為幀和按鈕添加事件,腳本代碼;

30、(7)測試影片,保存并發布。 4.1.2游戲影片剪輯的設計場景1(sceneone):(1)封面背景(2)設計封面主題文字與游戲規則(3)添加“游戲進入“按鈕,并為該按鈕添加:on(release)gotoandplay(scenetwo,1);場景2(scenetwo):(1)游戲運行背景,風格是手機類狀的墨綠背景。(2)新建一層“屏幕”,在舞臺上畫個無邊框的矩形,漸變填充色,具體屬性如下:w:300 h:300 x:0 y:0 (3)選擇文本工具,在屬性面板中設置為動態文本。在矩形的正下方放置一個動態文本來顯示所得的分數。文本中寫上start,設置字體和顏色。實例名稱為tscore。(4)

31、按下ctrl+f8,命名為piece,設置他的屬性為影片剪輯,點擊高級按鈕,選擇為actionscript導出,那個標示符自動地被設置為piece。(5)選擇橢圓工具,在當前的舞臺上畫一個正圓并設置如下屬性:w:15 h:15 x:0 y:0 (6)作為蛇的身體,不想用圓形,其他圖形也可,但是要保持它的高寬都是15。方法同上,制作一個標示符為food的影片剪輯。(7)選擇橢圓工具在舞臺上畫一個圓形,并設置為如下屬性:w:15 h:15 x:0 y:0作為蛇所吃到的食物來增長身體。也可在不修改高寬的情況下進行任意的修改。4.2游戲的核心技術4.2.1腳本函數(1)在場景1(sceneone)的第

32、一幀添加代碼:stop();(2)在場景2(scenetwo)的第一幀添加代碼:stop();var unit = 15; /正圓形大小var uwh = 20; /穿越或者是向下運動的var canmove = false; /控制在鼠標點擊之前讓蛇停止var dir = 2; /蛇開始時是向下運動的, up=0, left=1, down=2, right=3var score = 0; /所得分數apiecelist = new array(); /新建一個數組來保存當前的蛇的身體/定義mouselistener對象來偵聽鼠標的onmousedown點擊事件mouselistener =

33、 new object();mouselistener.onmousedown = function()if (!canmove) /防止在游戲的過程當中重新開始游戲 canmove = true; /可以運動startgame(); /調用stargame函數;mouse.addlistener(mouselistener);/當鼠標被按下的時候后onmousedown事件函數被激活k = new object();k.onkeydown = function()var k = key.getcode(); /獲得按下的鍵的 ascii碼if (k = key.up & dir != 2 &

34、 canmove) /如果按下了上方向鍵,并且當前沒有向下運動(防止撞倒自己),就可以移動 dir = 0; /設置方向為向上canmove = false; /防止在下一幀之前改變方向而導致的一些bugelse if (k = key.left & dir != 3 & canmove)dir = 1;canmove = false;else if (k = key.down & dir != 0 & canmove)dir = 2;canmove = false;else if (k = key.right & dir != 1 & canmove)dir = 3;canmove = fa

35、lse;key.addlistener(k);/addpiece函數的作用是調用一段身體來增長蛇身function addpiece()var p = this.attachmovie(piece, piece + apiecelist.length, apiecelist.length); /加載一段身體到舞臺中p._x = apiecelistapiecelist.length - 1._x; p._y = apiecelistapiecelist.length - 1._y;/ 設置他的x、y的坐標為前一個的位置apiecelist.push(p); /加入到數組中/movefood函數

36、的作用是當碰撞到食物的時候移動食物的位置function movefood()var moveit = true;while (moveit) /在它碰到食物后移動食物food._x = math.floor(math.random() * uwh) * unit; food._y = math.floor(math.random() * uwh) * unit; /為食物選擇一個隨機的位置 moveit = false;for (var i = 0; i = 0; i-) /刪除蛇身apiecelisti.removemovieclip();apiecelist.pop();score =

37、0; /設置分數為0var p = this.attachmovie(piece, piece + apiecelist.length, apiecelist.length); /加載蛇身的第一段apiecelist.push(p); /添加到數組中p._x = 10 * unit; p._y = 10 * unit; /設置蛇身的位置var food = this.attachmovie(food, food, -1); /加載食物到舞臺movefood(); /移動食物到隨機的位置var startinglength = 3; /初始化蛇身的長度為3for (var i = 1; i 0;

38、 i-) /每個蛇身都以移動到它上一個的位置)apiecelisti._x = apiecelisti - 1._x;apiecelisti._y = apiecelisti - 1._y;if (dir = 0) /如果向上移動 apiecelist0._y -= unit; else if (dir = 1) /如果向左移動 apiecelist0._x -= unit; else if (dir = 2) apiecelist0._y += unit; else if (dir = 3) apiecelist0._x += unit; if (apiecelist0._y / unit

39、= 20)/如果蛇身超過最低的區域則讓它出現在最上邊 apiecelist0._y = 0; else if (apiecelist0._y / unit = -1) apiecelist0._y = 19 * unit; else if (apiecelist0._x / unit = -1) apiecelist0._x = 19 * unit; else if (apiecelist0._x / unit = 20) apiecelist0._x = 0; if (apiecelist0._x = food._x & apiecelist0._y = food._y) /如果碰到食物就移動食物到新的位置,修改分數,增加身體score += 10 * apiecelist.length / 2;movefood();addpiece();for (var i = 1; i apiecelist.length; i+) /如果第一部分的身體碰撞到了身體的任何部分就結束游戲if (apiecelist0._x = apiecelisti._x & apiecelist0._y = apiecelisti._y)gameover();4.2.2游戲的運行游戲設計已經做好結束的收

溫馨提示

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

評論

0/150

提交評論