一步一步教你開發《松鼠推箱子》手機遊戲

2021-08-29 03:44:31 字數 4363 閱讀 5500

這類遊戲大家肯定都玩過,乙個很有趣味性的小遊戲。操作簡單,具有一定的邏輯性。很適合無聊的時候消遣時間。:)

首先簡單介紹下手機遊戲的一般性開發過程。首先需要策劃出乙個遊戲方案,也就是要給出乙個遊戲的整體形象。當然是想象中的。比如:遊

戲題材,背景,操作方法,人物,與獎勵機制。然後對這個策劃方案進行可行性分析,包括技術,市場,可用資源等。下一步就是編碼階段,

一般編碼和製作資源可以同步進行。 等程式和資源都弄好了,乙個遊戲的雛形就大致出來了。後面就是測試與移植等等工作。

我們要做的是讓乙隻小松鼠推箱子,操作方法就是通過四方向鍵對松鼠進行上,下,左,右的移動。在移動過程中可以把碰到的箱子推到任意

乙個方向。當然在遊戲中需要設定一些障礙物,讓遊戲具備可玩性。遊戲採用過關制,當松鼠把所有箱子推到指定的位置就算過關。所以每關

的場景要不同。這需要對每關的地圖進行編排。好了,我們的遊戲策劃就算完成,嘿嘿!簡單吧,想象是多麼美好啊。

下面就沒這麼輕鬆了,我們要進行技術分析。就是具體的**如何來實現的。首先我們來確定一下開發難點。對松鼠的操作很簡單,就是四方

向移動,松鼠移動,箱子也移動,所以對按鍵處理也比較簡單些。當箱子到達某個位置時,就會產生遊戲過關事件。需要乙個邏輯判斷。那麼

我們仔細想一下,這些所有的事件都發生在一張地圖中。這張地圖就包括了 箱子的初始化位置,箱子最終放置的位置,和障礙等。每一關地圖

都要更換。這些位置也要變。所以我們發現每關的地圖資料是最關鍵的。它決定了每關的不同場景和物體位置。好。那麼我們就重點分析一下

地圖。我們把地圖想象成乙個網格,每個格仔就是松鼠每次移動的步長,也是箱子移動的距離,這樣問題就簡化多了。首先我們設計乙個8*8的資料結

構。按照這樣的框架來思考。 每個格仔都會有哪些屬性呢?首先就是格仔的座標,包括x,y兩個數值,還有一些地圖的屬性,比如這個格仔是

否為障礙,是否為初始化的箱子位置,是否為箱子終點的位置。由於我們的資料結構是二維的,但是還有一維表示不出來,所以我們設計乙個

三維資料:如下:

private static int map_data = new int[8][8][5]; 

//第一維  -  [8] 表示地圖的高,由8個格仔組成

//第二維 -  [8] 表示地圖的寬,由8個格仔組成

//第三維  - [0] 每個格仔的x座標

//        - [1] 每個格仔的y座標

//        - [2] 是否為障礙 0表示空地 1表示障礙

//        - [3] 箱子的終點座標,0不是終點座標 1綠箱子 2 紅箱子

//        - [4] 箱子的初始化位置 [0]不是初始化座標  [1]綠箱子 2紅箱子

地圖大致就是這樣的資料結構,我們設計兩種顏色的箱子,這樣增加一下遊戲的難度。

好了,有了地圖,我們的邏輯就可以實現了。利用一點時間,我把遊戲的畫好了,好在我是美術專業畢業,畫這些小畫素圖還挺順利。

我們先把遊戲的介面部分處理一下。介面就是選單,進度條,還有遊戲中的繪製。 選單和進度條略過,因為這些可以自己設計的。

下面是畫地圖和松鼠.箱子以及指示終點位置的方法。

//畫地圖

private void drawmap(graphics g)

else if(map_data[n][m][2] == 0) //如果是障礙}}

map陣列是只有兩個元素的陣列,裡面有兩幅圖,分別為空地和障礙。

//畫松鼠

private void drawsqu(graphics g)

這裡的splace 是松鼠的初始化位置,這個隨每關的不同,也會有變化。

sdir 表示松鼠的方向,對應著squirre 陣列中的松鼠

//畫箱子

private void drawboxs(graphics g)

}nplace  是箱子的初始化位置座標,第一維表示有幾個箱子,第二維表示 x,y座標 和 顏色 屬性

nut 是箱子陣列

//畫箱子終點位置的指示

private void drawnutdest(graphics g)

}我們對箱子重點的指示也採用,這樣使畫面效果更美觀一些。

同樣 ndplace  和 nplace  的屬性都一樣。 只不過表示終點座標

nut陣列的另外元素表示 指示重點座標的。

以上就是我們的遊戲主介面。看著挺簡單的吧。呵呵。下面要實現操作控制方法與判斷輸贏的邏輯了。嘿嘿,要有耐心。

前面我們提到,當移動松鼠時,箱子就跟著動,那麼我們就分別寫兩個方法,來移動他們。

/*移動松鼠*/

private static final void movesqu()

}/*如果傍邊沒箱子,是空地*/

if(  (map_data[(splace[1] - 1)][(splace[0])][2] == 0 ) && (!hit ) ) 

/*如果碰到箱子*/

if(hit) }}

/*向下方向*/

if( moves[1] )

}if( (map_data[(splace[1] + 1)][(splace[0])][2] == 0 ) && (!hit))

if(hit)}}

/*向左方向*/

if( moves[2] )

}if( (map_data[(splace[1])][(splace[0] - 1)][2] == 0 ) && (!hit))

if(hit)}}

/*向右方向*/

if( moves[3] )

}if( (map_data[(splace[1])][(splace[0] + 1)][2] == 0) && (!hit))

if(hit)}}

上面這個方法看起來比較長,其實邏輯比較簡單,就是分別對應四個方向的移動來判斷。可以看向上方向移動的注釋。moves是個blooean數

組,用來表示松鼠的移動方向,這個陣列會在keypressed()被賦值,當某方向鍵按下時對應方向的標誌就設定為真。下面的moveboxs() 方法,是

判斷某個箱子在被推動的方向上是否還有其它箱子阻礙,如果有就返回true.否則false.並且移動這個箱子。/**

*方法功能:移動箱子

**引數: dir:被推動的方向 . nm: 表示哪個箱子

**返回值: 該箱子是否可以被推動

*/private static final boolean movenuts(int dir,int nm)

/*如果為空地*/

if( (map_data[(nplace[nm][1] - 1)][(nplace[nm][0])][2] == 0 ) && (!hit) )

break;

case 1: //'down'

for(int i = 0 ; i < nplace.length ; i++)

if( (map_data[(nplace[nm][1] + 1)][(nplace[nm][0])][2] == 0) && (!hit) )

break;

case 2: //'left'

for(int i = 0 ; i < nplace.length ; i++)

if( (map_data[(nplace[nm][1])][(nplace[nm][0] - 1)][2] == 0) && (!hit))

break;

case 3: //'right'

for(int i = 0 ; i < nplace.length ; i++)

if( (map_data[(nplace[nm][1])][(nplace[nm][0] + 1)][2] == 0) && (!hit) )

break;

}return mf ;

}這個方法跟判斷松鼠是否可以移動原理一樣,其實完全可以和移動松鼠的方法結合一起來處理,而且可以優化很多東西,但為了邏輯更清晰,

就分開來做。

/*判斷過關*/

private static final boolean iswin()

}if(nn == nplace.length)

temp = true;

else

temp = false;

return temp;

}判斷過關的邏輯很簡單,就是對目的地座標與當前箱子座標一一對照,如果所有箱子都已經被正確推到目的地,就算過關。

到現在,我們的遊戲介面,和遊戲邏輯實現就都完成了,感覺是不是很簡單。呵呵,當然要完成整個遊戲,還要寫一些固定的方法。比如

keypressed();獲得按鍵值  paint() 來畫圖  執行緒run() 來實現刷螢幕等等。由於篇幅有限就不一一介紹了。下面附上一幅遊戲完成的截圖。

看看效果吧。

《松鼠推箱子》遊戲截圖

一步一步教你配置vnc

配置 vnc遠端桌面連線 1.在命令列輸入 init 3 進入純字元介面 2.kill 掉所有與 x有關的程序 用命令ps aux grep x 然後kill 程序號1 程序號2 只要找到的程序都 kill 掉 如果不會使用 kill 命令,直接重啟電腦 3.首先檢查 vncserver 是否安裝使...

教你 新手 一步一步開始SEO

如果你從事seo工作已經有段時間了,你可能對如何來優化乙個網頁有種直覺。你可能是同時來做好幾件事,而不是執行一步一步的過程。但是如果你是正在學習seo,或者是試圖去理解seo們是怎麼來做你的網頁的,那就顯得有些難度了,尤其當你第一次接觸這個的時候。這篇文章旨在幫助seo初學者們更多的了解seo的過程...

一步一步教你寫pdf檔案

pdf作為一種跨平台的檔案格式,越來越受到使用者的歡迎。現在除了adobe官方提供的pdflib有很多第三方的庫可以實現pdf的檔案建立 修改 格式轉換。pdf文件採用的是二進位制和文字混排的方式。近期專案需要,對pdf檔案的結構做了一些研究。最終,領導決定採用第三方庫,沒能用得上。在此,跟大家分享...