程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 手機網游制造之游戲界面篇

手機網游制造之游戲界面篇

編輯:關於JAVA

開發程序:瘋狂的炸彈

開發進度:第一期

本期要點:設計客戶端游戲功能

開發平台:java平台

從3G中受益的行業,一定少不了手機網游,手機網游應該怎麼開發呢?跟PC平台上的游戲開發一樣嗎?別急,跟隨我們開發一個手機網游,你就什麼都明白了。本期我們先講客戶端的游戲功能。

手機網游前景光明

國內的手機網絡游戲最早出現在2004年,最初由3人團隊開發並運營的休閒網游——《移動玩家》系列。第一個公司開發的手機網游是《三界傳說》。手機網游發展到如今已經有幾十款手機網游上線運營了。易觀Enfodesk發布的《2009年第1季度中國手機網游市場季度監測》數據顯示,2009年第1季度中國手機網游用戶規模達330萬,環比增長16%。

小提示:手機游戲門戶網站當樂網2008年的調查顯示,目前的手機網游用戶中,學生(38.4%)、公司職員(21.3%)、工人(12.8%)及軍人(3.7%)占比合計達76.2%,他們是時下手機網游的主體消費者。在年齡上,15歲至25歲的用戶成為手機網游消費的主體,占比近90%。

困擾手機網游發展的因素有三個:網絡速度、網絡費用昂貴和體驗性差。隨著3G的快速發展,手機的網絡傳輸速度將得到極大的提升,網絡費用也會在將來降下來。有了傳輸速度的保證,游戲會做的很細化、功能更強,自然體驗性也會更好。在今年的ChinaJoy展會上,還特別設立了手機網游專區,可見它的前景十分光明(圖1)。

Java ME技術由於支持的手機廣泛,開發人員眾多,在整個手機網絡游戲開發技術中占據主導地位,隨著MIDP3.0規范的推出,Java ME技術將成為最主要的開發手機網絡游戲技術。

客戶端游戲功能設計思路

手機網絡游戲和普通的網絡程序一樣,在實際設計時都分為客戶端和服務器端兩個部分進行開發。開發客戶端,主要包含界面設計、用戶操作控制和網絡傳輸三部分。開發服務器端,則主要包含網絡傳輸、數據存儲和核心邏輯三部分。所以網絡程序和一般程序的不同就是將單機程序的數據和邏輯處理部分移動到服務器端,然後通過網絡傳輸和客戶端進行數據交換,從而實現程序的功能。

《瘋狂的炸彈》是一款類似《炸彈人》的雙人對戰小游戲。本游戲包含兩個界面(圖1):等待界面和游戲界面,等待界面比較簡單,界面為一個閃爍的文字。游戲界面是程序的主界面。由於界面中包含的元素很多,所以對於界面采用分層繪制的思路:首先繪制包含背景塊的背景層,然後繪制障礙物層,最後繪制人物和炸彈等。

而對於用戶的操作控制,客戶端先要做一些基礎的判斷,然後將用戶操作轉換為一定的格式發送給服務器端,由服務器端判斷是否可以操作,客戶端程序根據服務器端的處理結果來確定操作是否成功。

狀態機機制講解

由於需要在程序中實現兩個界面:等待界面和游戲界面,為了簡化邏輯的處理,將這兩個界面編寫在一個代碼的內部,這就需要使用界面開發中一種常用的控制機制——狀態機機制。

狀態機機制的實現原理是:使用一個int狀態變量控制顯示哪個界面,例如該變量的值為0時顯示等待界面,該變量的值為1時顯示游戲界面,這樣就可以通過控制該狀態變量來實現界面的顯示和切換了。

使用狀態機機制可以很方便的在一個代碼的內部制作多組界面,可以讓代碼的結構變得十分清晰。此外,還需要考慮對復雜的界面進行分層處理。分層處理是指將邏輯處理相同的元素劃分為一層,類似photoshop中層的概念,例如將起裝飾的背景塊組成背景層,將參與碰撞處理的部分組成碰撞層等,而人物需要單獨處理成一層。

這種處理的思路不僅使得界面繪制結構清晰,更重要的是使邏輯處理簡單化,從而可以開發更復雜的界面程序。狀態機機制,在復雜程序中用得較多,特別是手機網游程序,有志於這方向的朋友一定要掌握它。

本程序中的實現代碼為:

/** 界面控制狀態值 */
int status;
/** 等待界面 */
final int WAITING_SCREEN = 0;
/** 游戲界面 */
final int GAME_SCREEN = 1;

在代碼的各個方法中,根據變量status的值進行不同的邏輯處理,從而實現狀態機機制。

客戶端游戲功能設計步驟

第一步:創建項目

啟動Eclipse環境,選擇“File→New→J2ME MIDlet Suit”,設置項目名稱為“Bomber”,並一路選擇“Next”, 完成項目的建立。然後新建一個J2ME入口類,選擇“File→New→J2ME MIDlet”,並設置名稱為“BomberMIDlet”,點擊“Finish”。創建項目的代碼下載地址是http://www.shudoo.com/bzsoft。

第二步:設計界面

選擇“File→New→Class”,並設置名稱為“BomberCanvas”,點擊“Finish”完成界面類的創建。接著,開始初始化界面。關鍵碼如下所示(完整代碼下載地址:http://www.shudoo.com/bzsoft):

protected void paint(Graphics g) {
switch(status){
case WAITING_SCREEN:
paintWait(g);
break;
case GAME_SCREEN:
paintGame(g);
break;

第三步:按鍵處理

在上面的界面類中,編寫事件處理的代碼,實現按手機鍵盤上按左軟鍵退出,按上下左右鍵移動,以及按確定鍵釋放炸彈。核心代碼如下所示(完整代碼下載地址:http://www.shudoo.com/bzsoft):

public void keyPressed(int keyCode) {
switch (status) {
case WAITING_SCREEN:
keyPressed_wait(keyCode);
break;
case GAME_SCREEN:
keyPressed_game(keyCode);
break;

第四步:運行程序

在Eclipse主界面左側的“Package Explorer”中,選中項目源代碼BomberMIDlet.java,單擊鼠標右鍵,選擇“Run As→Emulated J2ME Midlet”即可運行程序(圖3)。

等待界面    游戲界面

讀者反饋

開發qq群:咨詢一個技術問題,怎麼才能讓CEikRichTextEditor的背景變透明?

小編:在S60 3rd 中,若要使CEikRichTextEditor的背景變透明,可以從CLafEdwinCustomDrawBase 繼承出一個類,如 class CMyEditor : public CEikRichTextEditor, public CLafEdwinCustomDrawBase{},然後重寫DrawBackground函數,在DrawBackground函數中加入繪制透明背景的代碼即可。

開發QQ群:我的程序做好了,卻碰到一個難題,如何將程序的圖標添加到主界面中? 

小編:要將程序的圖標添加到主界面中,需要專門開發一個特定的今日插件。SDK內提供了一個示例程序:\Windows Mobile 6 SDK\Samples\PocketPC\CPP\win32\memwatcher。

開發QQ群:我聽到群裡面的兄弟經常說“WAP”,它是個什麼東東?我比較菜,希望幫幫我。

小編:WAP即無線應用協議(Wireless Application Protocol),是一種向移動終端提供互聯網內容和先進增值服務的全球統一的開放式協議標准, 是一種簡化了的無線Internet 協議。WAP 將Internet和移動電話技術結合起來,使隨時隨地訪問豐富的互聯網絡資源成為現實。

開發QQ群:請教一下,MIDP1.0中如何獲得整個屏幕的高度和寬度。

小編:使用Java ME 開發的手機程序,可以使用Canvas類中提供的getWidth()和getHeight()這兩個函數來獲取屏幕的寬度和高度。

讀者問題:我使用的是PPC手機,日歷、任務功能對我很重要。直接在手機上添加日歷或任務很不方便,需要雙手操作,還有很多選項。能不能在通話記錄或聯系人的菜單中添加一個命令,可以一鍵設定與所選聯系人關聯的日歷或任務?

高手 圖圖:動態添加菜單可以參考SDK提供的示例程序:\Windows Mobile 6 SDK\Samples\PocketPC\CPP\win32\Dynamenu,MSDN上也有更詳細的解釋:http://msdn.microsoft.com/zh-cn/library/s765c671(VS.80).aspx。聯系人、日歷、任務等的操作可以使用原生的POOM方式,也可以使用.Net CF 裡提供的Microsoft.WindowsMobile.PocketOutlook命名空間下的相關方法。

讀者問題:手機開發中有支持移動定位技術的嗎?

你是手機編程的高手嗎?你能解答上面這位讀者的疑問嗎?不要猶豫,來我們這裡展示一下你的風采吧,來信請發到[email protected](也可以給我們發送問題)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved