劉子澍++王語杰++楊永輝++邱呂揚++楊金馨
【摘 要】本款游戲?qū)儆谝嬷穷愑螒?,玩家需要在一?0層的地圖中進行冒險。玩家在每層都會遇到強度各異的怪物和用于強化玩家屬性的道具、商店。游戲中,玩家需要謹慎考慮對戰(zhàn)的怪物和屬性加點路線,稍有錯誤玩家可能要付出較大的代價繼續(xù)游戲甚至卡關(guān)。本游戲流程條理清晰,界面制作獨具一格,可以滿足絕大多數(shù)喜愛該類型游戲的玩家的需求。
【關(guān)鍵詞】魔塔 策略 安卓
1 背景
隨著智能移動終端的普及,作為移動應(yīng)用重要分支的手游產(chǎn)業(yè)全面進入井噴期。中國已經(jīng)成為亞洲乃至全球移動游戲市場規(guī)模最大、增速最快的市場。在這樣的市場環(huán)境下我們的游戲有這很好的發(fā)展前景[1]。
《魔塔》作為一款受到廣大玩家喜愛的flash小游戲,至今仍有大量同人作品出現(xiàn)。然而,絕大多數(shù)作品都是在電腦上用flash運行的,手機平臺上的作品并不多見。為了滿足玩家能夠利用碎片化的時間進行游戲,同時不必使用相對笨重的臺式機或筆記本,我們開發(fā)了這款魔塔風(fēng)格的游戲。
2 實現(xiàn)方法
2.1 總體設(shè)計思路
魔塔作為一個策略性極其優(yōu)秀的游戲,如今被人所遺忘讓我們覺得十分惋惜,于是我們決定以此為藍本,制作一款風(fēng)格接近魔塔的游戲,并功能和玩法以及劇情上進行自己的創(chuàng)新,去引更多的用戶參與到這類游戲中來。
2.2 處理流程
游戲流程如下圖1所示,后面的解說按圖中的內(nèi)容進行。
開始:進入游戲開始界面,點擊開始游戲播放游戲背景故事,播放完畢或者手動跳過之后進入下一環(huán)節(jié)。
玩家、地圖初始化:進入游戲主程序,初始化玩家屬性值、道具數(shù)量、金錢數(shù),設(shè)定地圖信息為第一層地圖。顯示游戲界面,游戲開始。
游戲循環(huán):玩家進行游戲的部分,游戲只有當(dāng)玩家救出公主后才算結(jié)束。程序會判斷玩家移動方向上下一格的地圖信息。當(dāng)玩家遭遇敵人時,系統(tǒng)會計算玩家受到的傷害,如果高于玩家現(xiàn)有生命值,怪物將留在原地,玩家不會死亡,但無法通過怪物所占的格子;反之,怪物會從地圖上消失,玩家可以通過剛才怪物所占的格子,玩家的生命值會減少同時獲得金錢獎勵。當(dāng)玩家遇到道具(包括商店)或門時,玩家會與之互動購買或者拾取道具,打開門。
2.3 開發(fā)環(huán)境
由于我們的程序以Android開發(fā)為主,所以經(jīng)過討論我們決定在使用比較廣泛的Windows系統(tǒng)下配置Android開發(fā)環(huán)境,其中使用了JDK(Java SE Development Kit)、Android SDK(Android Software Development Kit)和IntelliJ IDEA集成開發(fā)環(huán)境,編程語言為JAVA[2]。同時,為簡化游戲數(shù)據(jù)平衡計算和使游戲數(shù)據(jù)更為科學(xué),我們使用Microsoft Visual Studio 2015集成開發(fā)環(huán)境開發(fā)了一個C++程序[3]。
2.4 程序結(jié)構(gòu)
我們的程序主要由一系列類、布局文件和資源文件構(gòu)成。其中類又分為游戲邏輯類、人物類、背景音樂類、自定義控件類等等,其中,每一個類Activity類都有與之對應(yīng)的布局文件[4]。如圖2所示。
首先,MenuActivity作為游戲入口進入游戲。在現(xiàn)狀版本中,這個類雖然只實現(xiàn)了簡單的開始游戲Button和第二段背景音樂的播放與停止,但是這個類又是不可或缺的,因為在接下來的開發(fā)中我們還會增加登錄注冊、游戲設(shè)置等功能,需要在這個類中實現(xiàn)跳轉(zhuǎn)。
其次,CartoonActivity進行劇情文字逐字播放,通過一個定時器不斷調(diào)用TextView的setText達到逐字顯示的效果[5],并且在文字顯示完全后自動跳轉(zhuǎn)至下一個界面,玩家也可以點擊skip按鈕跳過劇情介紹。
再者,GameActivity實現(xiàn)游戲的主要邏輯,(從人物怪物地圖的初始化,到游戲控制,的大概思路)在這個Activity中初始化了全部道具和敵人的屬性,以及商店和NPC的觸發(fā)事件,調(diào)用了mapview和player類來初始化地圖和角色,定義了角色上下左右的各個事件來實現(xiàn)人物控制邏輯,初始化了搖桿,在子線程run中監(jiān)聽了搖桿的動作,以此判斷人物執(zhí)行的動作,戰(zhàn)斗部分則是調(diào)用了combat類來進行計算。
最后,以EndActivity作為游戲的結(jié)束,EndActivity基本與CartoonActivity相同,主要區(qū)別在文字顯示上。
3 關(guān)鍵技術(shù)
3.1 文字逐字顯示
為了實現(xiàn)文字逐字顯示的效果,通過一個定時器不斷調(diào)用TextView的setText,每次setText將會多一個文字,一次來達到逐字顯示的效果,并且在背景介紹部分用計時器實現(xiàn)了文字顯示完全之后自動跳轉(zhuǎn)至游戲地圖的功能。
3.2 搖桿
為增加游戲體驗,使玩家操作更多元化,所以我們將一開始使用的按鈕式操作升級為現(xiàn)在較為流行的搖桿操作。為此,我們引入了自定義的XML屬性,通過繼承View類,自定義了測量和繪制兩個部分,除此之外我們還需要重寫onTouchEvent()方法進行View事件處理,最后,在主線中開啟一個子線程對自定義的搖桿類進行監(jiān)聽,從而實現(xiàn)對史萊姆的控制。
3.3 數(shù)據(jù)平衡
數(shù)據(jù)設(shè)計具體方案:
無疑,直接設(shè)置一些倍數(shù)或者具體數(shù)值都十分困難——因為缺少一個標(biāo)準來衡量這些數(shù)值是否合適。所以考慮引入一個怪物強度(G)當(dāng)做一個衡量標(biāo)準,即在怪物的攻擊力(A)、防御力(D)、生命值(H)與怪物強度之間建立一種函數(shù)關(guān)系:G=f(A,D,H)。
然而怪物的三個屬性不能直接用來計算怪物的強度:一個怪物可能有非常高的血量,但無法對玩家造成任何傷害,這個怪物不能算強;同樣有的怪物的血量并不高,但由于其具有較高的攻擊力和防御力,足以對玩家造成巨大的威脅。這么看來,攻擊力、防御力、生命值在對怪物強度的定義中應(yīng)占有不同的權(quán)重,而且生命值所占權(quán)重要相對偏低。出于這方面的考慮,重新定義怪物強度的表達式:G=g(f(A,D,H)),其中f(A,D,H)=0.7A+0.6D+0.3H。這個公式只是一個嘗試,并沒能找到數(shù)學(xué)方法證明該公式是最佳的。
在確定了f(A,D,H)后,就需要確定g。由于數(shù)學(xué)知識有限,g便在初等函數(shù)的范圍內(nèi)尋找。首先確定怪物強度一定是一個單調(diào)不減的函數(shù),但是怪物強度不應(yīng)增長過快,以免強度相差不多而屬性值卻天差地別的情況出現(xiàn);同時也不應(yīng)該增長過緩,導(dǎo)致屬性值已經(jīng)差距很多而強度值卻十分接近,這樣強度值就失去了衡量的意義。在幾類基本初等函數(shù)中,對數(shù)函數(shù)可能出現(xiàn)負值,指數(shù)函數(shù)增長速度過快,三角函數(shù)又呈現(xiàn)出周期性,都不太適合作為g。剩下的冪函數(shù)中,冪指數(shù)大于1時增長速度過快,所以選擇冪指數(shù)小于1的冪函數(shù)作為g??催^一些函數(shù)圖像之后,選擇y=x^(2/3)這個函數(shù),增長速度合適。根據(jù)這些函數(shù),怪物強度的表達式最后被定義為:G=[(0.7A+0.6D+0.3H)]^(2/3)。這樣就可以根據(jù)給定的怪物強度計算出怪物的攻擊力、防御力、生命值。
接下來的問題就是如何解出這個三元一次方程。先將方程變形:
(1)不難看出等式的左邊是一個常數(shù)。但由于方程只有一個,也就是說接下來的工作是解出這個不定方程。
容易看出該方程有無窮多個解,但必須求出某個特定的解,所以根據(jù)線性代數(shù)的相關(guān)知識,把上面的方程寫成兩個矩陣相乘的形式。
(2)其中,由于矩陣[0.7 0.6 0.3]的逆矩陣不存在或者沒意義,無法通過線性代數(shù)中求逆矩陣的方法對該方程進行求解,所以通過求廣義逆矩陣的方法求解該方程。
將上述方程寫成Ax=b的形式,其中A=[0.7 0.6 0.3],x=[A D H]T,b=[a]那么方程的通解可以表示為(I為三維單位矩陣,y為任意三維列向量)。
(3)由于矩陣A是行滿秩矩陣,A的廣義逆矩陣A^-就可以通過下式求得。
(4)最后只要給定一個向量y就可以得出矩陣x,即所求的A、D、H倍數(shù)。
只要確定了攻擊力、防御力、生命值各自的初始值,就可以乘上計算好的倍數(shù)得出具體的數(shù)值。
4 現(xiàn)版本中的問題
由于游戲測試人員不夠多,數(shù)據(jù)平衡性上可能還需要進行微調(diào),目前來看難度偏高。
遙感靈敏性和范圍判定不太完善,在玩家操作過快時可能出現(xiàn)重復(fù)操作。
5 結(jié)語
本文首先介紹了在智能終端普及且安卓操作系統(tǒng)為主流系統(tǒng)的大背景下,手游產(chǎn)業(yè)全面進入井噴期。而魔塔類游戲在該平臺上數(shù)量極少,但是卻擁有廣大的玩家基數(shù)以及良好的策略性,受到廣大90后玩家的喜愛。本游戲是基于安卓平臺開發(fā)的軟件,能夠滿足玩家隨時隨地進行該類型游戲的需求。本游戲流程條例清晰,界面制作獨具一格,可以滿足絕大多數(shù)喜愛該類型游戲的玩家的需求。
參考文獻:
[1]吳亞峰,蘇亞光,于復(fù)興.Android應(yīng)用案例開發(fā)大全第3版[M].人民郵電出版社,2015:45-50.
[2]任玉剛.Android開發(fā)藝術(shù)探索 第1版[M].電子工業(yè)出版社,2015:32-40.
[3][美]James S Cho著;李強.譯. Android游戲開發(fā)詳解 第1版[M].人民郵電出版社,2015:60-70.
[4][美]策希納(Mario Zechner),[美]格林(Robert Green) 著;趙凱,佘建偉.譯. Android 4游戲入門經(jīng)典 第3版[M].清華大學(xué)出版社 ,2013:60-80.