freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

安卓軟件開發(fā)--基于android系統(tǒng)的貪食蛇游戲設(shè)計(編輯修改稿)

2024-11-28 12:52 本頁面
 

【文章內(nèi)容簡介】 概要設(shè)計 程序流程設(shè)計本游戲的流程如下圖所示:觸摸屏幕游戲開始,蛇開始移動鍵盤操作: 向上左移右移向下沒有吃到食物且蛇碰到邊界游戲結(jié)束游戲中途欲中斷,稍后繼續(xù)游戲觸摸屏幕暫停游戲游戲暫停進入游戲畫面再次觸摸屏幕游戲恢復(fù) 游戲處理流程圖 模塊劃分從面向?qū)ο蟪绦蛟O(shè)計的角度,本項目總體地可以分為游戲界面模塊、數(shù)據(jù)存儲模塊和控制模塊。如下圖所示:游戲數(shù)據(jù)存儲模塊貪吃蛇游戲游戲主界面模塊游戲控制模塊 游戲總設(shè)計模塊 游戲主界面模塊游戲界面主框架主要包括游戲圖形區(qū)域界面、游戲的開始按鈕、暫停按鈕、游戲的退出按鈕。游戲的主界面架游戲圖形區(qū)域界面(即游戲畫布)游戲控制按鈕界面 游戲主界面 游戲控制模塊 游戲控制模塊主要通過手機鍵盤上的按鈕來控制游戲的開始、游戲的暫停、游戲的退出這三個功能以及控制游戲分數(shù)變化。在這個模塊中,需要給各個按鈕添加響應(yīng)事件代碼,來對上述的功能加以進一步的實現(xiàn)。游戲控制模塊游戲的移動速度功能能游戲的暫停功能游戲的重新開始 游戲控制模塊框架 模塊實現(xiàn)原理 游戲界面模塊實現(xiàn)本游戲采用Activity作為游戲背景的載體,在Android中一個Activity就相當(dāng)于windows中的一個窗口,Activity上可以放置許多類型的控件。一個activity主要有三個狀態(tài):當(dāng)在屏幕前臺時(位于當(dāng)前任務(wù)堆棧的頂部),它是活躍或運行的狀態(tài)。它就是相應(yīng)用戶操作的activity。 當(dāng)它失去焦點但仍然對用戶可見時,它處于暫停狀態(tài)。即是:在它之上有另外一個activity。這個activity也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity仍對用戶可見。暫停的activity仍然是存活狀態(tài)(它保留著所有的狀態(tài)和成員信息并連接至窗口管理器),但當(dāng)系統(tǒng)處于極低內(nèi)存的情況下,仍然可以殺死這個activity。如果它完全被另一個activity覆蓋是,它處于停止狀態(tài)。它仍然保留所有的狀態(tài)和成員信息。然而它不在為用戶可見,所以它的窗口將被隱藏,如果其它地方需要內(nèi)存,則系統(tǒng)經(jīng)常會殺死這個activity。如果一個activity處于暫?;蛲V範顟B(tài),系統(tǒng)可以通過要求它結(jié)束(調(diào)用它的 finish() 方法)或直接殺死它的進程來將它驅(qū)出內(nèi)存。當(dāng)它再次為用戶可見的時候,它只能完全重新啟動并恢復(fù)至以前的狀態(tài)。當(dāng)一個activity從這個狀態(tài)轉(zhuǎn)變到另一個狀態(tài)時,它被以下列protected方法所通知:void onCreate(Bundle savedInstanceState) 、void onStart() 、void onRestart() 、void onResume() 、void onPause() 、void onStop() 、void onDestroy()2. 實現(xiàn)蛇的身體蛇可以看做是一個個節(jié)點組成的,因此可以用一個鏈表來存儲蛇身的元素,在畫蛇時遍歷這個鏈表講里面的元素一一畫出,這樣就實現(xiàn)了一條蛇.3. 實現(xiàn)蛇的移動用一個timer(定時器)來不斷地刷新游戲畫面,每刷新一次就再蛇頭的前面(鏈表的尾部)增加一個新元素,同時把蛇尾的一個元素刪掉,這樣從視覺上看起來就實現(xiàn)了蛇的移動.4. 實現(xiàn)蛇吃食物 蛇移動的過程中如果蛇頭的坐標與食物出現(xiàn)的坐標重合了,那么就在蛇頭的位置增加一個元素同時不刪除蛇尾的最后一個元素,這樣蛇每遲到一個食物 身體就會變長一截. 游戲控制模塊實現(xiàn)1. 實現(xiàn)操作蛇的移動方向在Android系統(tǒng)中,手機上的每個按鈕都會有一個對應(yīng)的鍵值跟它對應(yīng),所在可以給對應(yīng)的按鈕設(shè)置監(jiān)聽器OnClickListener,監(jiān)聽器是一個接口,該接口中有一個方法onClick(View v)。當(dāng)按鈕被點擊的時候系統(tǒng)會自動調(diào)用該監(jiān)聽器的onClick(View v)方法。所以實現(xiàn)游戲控制的具體代碼將被寫到該方法中。因為本游戲中不允許蛇向與蛇頭相反的方向移動,所以當(dāng)用戶操作時需要判斷用戶操作的方向是不是跟規(guī)則沖突,若沖突則無視該操作,若不沖突則響應(yīng)該操作,所以需要用一個變量來記錄蛇頭的當(dāng)前方向。2. 實現(xiàn)游戲暫停 在Activity的生命周期中,有一個onPause() ,如果有來電或是其它事件中斷, 這時應(yīng)該把當(dāng)前狀態(tài)保存。以便返回時,還可以繼續(xù)玩游戲。這就使用 onSaveInstanceState實現(xiàn)保存當(dāng)前狀態(tài)。3. 實現(xiàn)游戲恢復(fù)Activity生命周期的onResume().4. 實現(xiàn)游戲退出當(dāng)一個Activity退出或者被調(diào)用finish()方法后,系統(tǒng)會調(diào)用其生命周期方法onDestroy().當(dāng)用戶退出游戲時,可以在這個方法中對資源進行釋放. 數(shù)據(jù)存儲模塊實現(xiàn) 在Android系統(tǒng)中數(shù)據(jù)的存儲是使用SQLite數(shù)據(jù)庫來實現(xiàn)的,SQLite是一款輕型的數(shù)據(jù)庫,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時能夠跟很多程序語言相結(jié)合,比如Tcl、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源世界著名的數(shù)據(jù)庫管理系統(tǒng)來講,它的處理速度比他們都快。 在SQLite中創(chuàng)建一張表,表的結(jié)構(gòu)如下表所示:字段名類型意義playervarchar玩家名字scoreint玩家分數(shù)該表用來存放玩家數(shù)據(jù)。第五章 詳細設(shè)計 游戲類圖本游戲的類圖如下: 游戲類圖 游戲界面具體實現(xiàn) 蛇身、食物和墻的實現(xiàn)前面已經(jīng)提過,蛇身的數(shù)據(jù)用一個鏈表來存儲,具體我使用ArrayList來實現(xiàn)。蛇身的每個元素、食物和墻都是一個坐標對象,畫這些東西的時候只需要把它們的坐標傳給畫的方法就行了。這里需要引進一個坐標類Coordinate,這是一個包括兩個參數(shù),用于記錄X軸和Y軸簡單類,其中包括一個比較方法,:class Coordinate { public int x。 public int y。 public Coordinate(int newX, int newY) { x = newX。 y = newY。 } public boolean equals(Coordinate other) { if (x == amp。amp。 y == ) { return true。 } return false。 } @Override public String toString() { return Coordinate: [ + x + , + y + ]。 } }蛇身的初始長度我設(shè)置為5,new 5個Coordinate的對象放入ArrayList中。整個屏幕可以看做是有很多個網(wǎng)格組成的,而蛇就在這些網(wǎng)格中移動。用一個二維數(shù)組int[][] mTileGrid來存儲網(wǎng)格的坐標,將蛇身、食物或者墻的坐標傳到該數(shù)組中,onDraw方法按照該數(shù)組中的坐標將屏幕相應(yīng)位置的網(wǎng)格填充成位圖。畫蛇身、食物、墻的方法為: @Override public void onDraw(Canvas canvas) { (canvas)。 for (int x = 0。 x mXTileCount。 x ++) { for (int y = 0。 y mYTileCount。 y ++) { if (mTileGrid[x][y] 0) { (mTileArray[mTileGrid[x][y]], mXOffset + x * mTileSize, mYOffset + y * mTileSize, mPaint)。 } } } } 蛇移動的實現(xiàn)使用View類的onKeyDown方法,該方法由系統(tǒng)監(jiān)聽調(diào)用。根據(jù)按鍵的值處理響應(yīng)事件,該方法中解決了反向移動的問題。mDirection 為當(dāng)前蛇頭的方向,mNextDirection 為按鍵對應(yīng)的方向,按鍵按下后會先判斷當(dāng)前方向是否跟下一方向相反,若相反則不響應(yīng)事件。具體代碼如下: @Override public boolean onKeyDown(int keyCode, KeyEvent msg) { if (keyCode == ) { if (mMode == READY | mMode == LOSE) { /* * At the beginning of the game, or the end of a previous one, * we should start a new game. */ initNewGame()。 setMode(RUNNING)。 update()。 return (true)。 } if (mMode == PAUSE) { /* * If the game is merely paused, we should just continue where * we left off. */ setMode(RUNNING)。 update()。 return (true)。 } if (mDirection != SOUTH) { mNextDirection = NORTH。 } return (true)。 } if (keyCode == ) { if (mDirection != NORTH) { mNextDirection = SOUTH。 } return (true)。 } if (keyCode == ) { if (mDirection != EAST) { mNextDirection = WEST。 } return (true)。 } if (keyCode == ) { if (mDirection != WEST) { mNextDirection = EAST。 } return (true)。 } return (keyCode, msg)。 }if ((direction != currentDirection) amp。amp。 !needUpdate){// 取出列表中的最后一個元素(蛇的頭部)WormLink sl = (WormLink)()。int x = ()。int y = ()。// 不同的運動方向坐標的改變也不一樣switch (direction) {case UP: // 當(dāng)這段向上運動的時候if (currentDirection != DOWN) {y。 needUpdate = true。 }break。case DOWN: // 當(dāng)這段向下運動的時候if (currentDirection != UP) {y++。 needUpdate = true。 }break。case LEFT: // 當(dāng)這段向左運動的時候if (currentDirection != RIGHT) {x。 needUpdate = true。 }break。case RIGHT: // 當(dāng)這段向右運動的時候if (currentDirection != LEFT) {x++。 needUpdate
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1