功能和不足
本程序設計實現了手機上以J2ME為平台的一個射擊類手機游戲的開發與實現,采用從外部文件讀取圖像、自動控制敵人機體運行的方式進行控制,具有一定的可玩性、復雜性和挑戰性。經過了細心的調試和排錯解決了絕大部分的問題。
就像幾乎每一個軟件都會有這樣那樣的不足,尤其是像本軟件那樣未經過精心測試,且開發團體很小,開發者知識面較窄,開發時間相對較短的非商業軟件。即使是作為經典操作系統而被微軟及整個軟件行業引以為豪的各版本的Windows操作系統也時常會發生許多類型的錯誤和漏洞。本程序對於初涉此領域的畢業設計課題來說,尤其在開始初期,感覺邏輯復雜,難以控制,因此至今還有一些未能解決的bug。
本游戲主要實現的功能有:
⒈采用MIDP 2.0規范,游戲中的碰撞檢測——象素檢測比較精確;
⒉實現了敵機的簡單AI功能,使游戲具有一定的可玩性和挑戰性;
⒊實現了記錄最高得分及游戲得分、玩家等級等功能;
⒋在游戲中將隨機出現寶物——國旗,凡撿拾到一面國旗,將可以增加一定量的生命值,使游戲趣味性大增;
⒌實現了背景畫面的縱向動態效果,使游戲更加逼真;
目前發現的bug和未完善的功能列表如下:
⒈如果與敵機相撞,原本設計的將出現煙霧狀圖片,但出現該圖片後,圖片不會自動隱去,直到該屏消失;所以在本程序中將主要出現的白色飛機沒有令其出現爆炸圖片,在飛碟出現時留有該功能,但顯然不夠理想;
⒉敵人的人工智能變化較少,僅實現漫游AI中的追蹤AI,AI實現不夠理想;
⒊子彈和敵人經常會與畫面的刷新的線程不同步,有時造成畫面閃爍;
⒋由於每次子彈發射和每次機體的移動的一個象素都會對所有機體和所有子彈進行一次循環檢查,並由於同時開的線程比較多,使得本來運行效率就不高的KVM運行異常緩慢。即使刷屏沒有間隔也不會提高速度;
⒌本游戲寶物設置還不夠理想,僅實現增加生命值這樣一種寶物;
⒍游戲畫面單調,且沒有實現升級前後背景的變化。
經驗和感想
⒈在後期為了優化界面,本打算運用MIDP2.0規范,需要采用外部文件引入的圖片貼圖,有關貼圖,在MIDP2.0中提供了用於增強游戲功能的game包,使得解決靜態或動態、畫面背景、屏幕刷新的雙緩沖等都有較好的解決方案,後來因為時間以及游戲復雜程度的限制而沒有采用。由此可見,本程序的優化,改進和維護將還有很大的空間,在實際的工作中應該對程序精益求精,在以後的時間裡,還將對本程序進行進一步的優化。
⒉游戲程序特別是手機游戲程序是一個精度要求很高的程序系統,因為其代碼利用率很高。一個實時運行的最終作品,每秒都會運行成千上萬行程序,碰撞檢測、AI實現、繪圖事件、鍵盤響應、圖片(音樂)提取等都會以非常高的頻率在後台運行並且等待響應,若有一點點的差錯都將很容易導致程序在運行不久後可能出現一些BUG、錯誤甚至死循環。因此,其邏輯設計的嚴謹顯得相當重要,需將所有可能發生的事件及意外情況考慮在設計中。
⒊ 己方機體的運行可以通過鍵盤響應事件控制,但敵方則因為是自動運行,就需要有一定其一定的智能性(這點沒有來得及優化,覺得牽涉到關卡設計,比如每個關卡背景圖片不同,背景音樂不同,包括敵機戰斗力更強等,由於時間及技術原因沒有實現);同時,出現在屏幕上的敵方可能會有較多的數量,這需要為每個敵方開辟一個線程以便能讓其獨立運行。Java的多線程能力為實現這樣的游戲提供了可能。
⒋子彈,戰機(包括敵我雙方)在運行過程中也需要實時掃描是否碰撞到了相關物體或屏幕邊界。如此過多的線程同時在本來效率就不高的KVM虛擬機上運行,有時也許會導致程序的緩慢(特別是用模擬器時,有時多次載入程序會導致系統停止響應)。雙方的機體在運行時也需要考慮到是否碰撞到相關物體,以免重疊運行,造成許多物理上不可能的情況,缺乏真實感。每一次刷新頁面、每前進一步都需要將所有的周圍環境都進行掃描。
⒌游戲的結束、開始、動態信息畫面作為構成一個完美程序都是必不可少的重要部分。良好的用戶界面更是吸引用戶的硬指標,相關的美術構圖也需要有一定的考慮。Java是基於虛擬機的半解釋型編譯系統,其執行效率較C++等完全編譯後的程序會低很多,程序如果不進行精簡和優化,將可能導致運行的不流暢。除開發過程中對結構上的控制、變量的使用、算法的優化等優化外,還可以使用混淆器(Obfuscator)進行程序打包後的優化。
各種應用軟件開發和游戲相比,我仍覺得對游戲的設計有更大的熱情。因為其各個模塊間的聯系十分緊密,代碼重復執行率高,當經過無數次的調試、修改後,能最終看到成品,心情也是倍加舒暢。相比一些數據庫軟件,游戲的設計有很多人文色彩(游戲思想,故事情節,玩家心態等)和藝術思想(界面美觀,實現逼真,使玩家有身臨其境的感覺)可供發揮,這也使得眾多的游戲開發者樂此不疲,興趣盎然。對於正式商業化的軟件的人性化界面和各個游戲間迥異的結構每每會讓人有去嘗試的沖動。
游戲程序特別是手機游戲程序最大限度的利用了硬件條件,因此在小小的屏幕上展現出的效果帶給玩家的往往是多彩絢麗、而又效果驚人。成功的游戲融合了三維運算(本游戲程序為二維)、人工智能、音效處理等計算機多媒體的精華部分。很多相關的技術,如游戲界面的設計與實現,需要使用到的線程、RMS數據庫、Game包的功能、高級、低級圖形界面的使用、貼圖,背景樂音的提取及播放,每一項都需要花一定的時間去掌握和熟悉。在學習J2ME的過程中,也學習了國內外一些經典書籍,像美國Michael Morrison著的《J2ME手機游戲編程入門》,郎銳,孫方編著的《J2ME手機程序Eclipse開發基礎》一直放在電腦旁隨時翻閱。
在正式開始編寫之前,我照貓畫虎的寫出一小段繪圖代碼(仿郎銳的“Paint”)時,已經過去了相當長的准備時間。當掌握了大部分應用技巧時,剩下的游戲思路的設計,具體功能的實現,調試,優化就顯得不是最大的障礙了。我在半個月的時間內寫了近3000行代碼,經過了無數次的調試,終於基本完成了現在的程序。回首上個世紀80年代的手持機上的機體大戰原始游戲任天堂的游戲小子(Nintendo Game Boy),將會驚歎那個時代的商業軟件的巧奪天工。華麗而友好的界面,出色的人工智能,流暢的運行效果、多音效、雙人操作控制,其二進制程序體積僅僅為24K。運行在12MHz,8K內存的硬件機器上仍不失其流暢性和可玩性。而許多J2ME游戲程序需要200K的運行內存空間、200MHz的處理器,仍運行不夠流暢。機器代碼級和基於虛擬機的半解釋性處理的程序在這裡得到了最大的對比。
出處:http://gaochaojs.blog.51cto.com/812546/205261