陳漫紅 薛 雪
(北京聯(lián)合大學(xué)師范學(xué)院 北京 100011)
基于Android新版“吃豆人”游戲的設(shè)計(jì)與實(shí)現(xiàn)
陳漫紅 薛 雪
(北京聯(lián)合大學(xué)師范學(xué)院 北京 100011)
新版“吃豆人”游戲是在原版“吃豆人”游戲的基礎(chǔ)上,增加一些現(xiàn)代元素和多種游戲規(guī)則模式,以達(dá)到適合現(xiàn)代人喜好的手機(jī)休閑游戲的目的。展示該游戲的總體功能架構(gòu),并在實(shí)現(xiàn)游戲地圖優(yōu)化、游戲人物角色設(shè)計(jì)以及游戲AI等的基礎(chǔ)上,完成網(wǎng)絡(luò)對戰(zhàn)、跨平臺等多項(xiàng)功能。
“吃豆人”游戲 碰撞檢測 游戲AI 游戲地圖
提到“吃豆人”游戲,讓人不禁會(huì)想起三十多年前,由日本游戲公司南夢宮(Namco)推出的一款有史以來最為成功的街機(jī)游戲——吃豆人。 “吃豆人”形象是日本著名游戲設(shè)計(jì)師巖谷徹(Toru Iwatani)所創(chuàng),曾在電子游戲領(lǐng)域叱咤三十多年?,F(xiàn)如今“吃豆人”形象已經(jīng)成為流行文化的一部分,其中的主要人物是一個(gè)圓形的黃色小人,簡約而不失創(chuàng)意,深受大眾喜愛,并且多次出現(xiàn)于食品包裝或卡通節(jié)目中,以至于之后的很多游戲都有其身影。原版“吃豆人”游戲是跨平臺的,無論在微軟、索尼及任天堂的主機(jī)上,或者是帶有游戲功能的電視機(jī),人們都能玩到這款游戲。
但是隨著時(shí)代的發(fā)展,使用游戲機(jī)、電視機(jī)甚至是PC機(jī)玩游戲已成為歷史,原版“吃豆人”游戲,也已逐
漸淡出公眾視野,主要是因?yàn)闆]跟上當(dāng)今手機(jī)APP時(shí)代的潮流。開發(fā)新版“吃豆人”的目的在于優(yōu)化經(jīng)典游戲,即在不破壞原版“吃豆人”游戲精髓的前提下,大大提高其耐玩性,使其成為一款具有故事背景、游戲模式多樣化,且經(jīng)過測試可以在Android系統(tǒng)上運(yùn)行的,符合現(xiàn)代人喜好的手機(jī)休閑游戲,使曾風(fēng)靡一時(shí)的經(jīng)典“吃豆人”游戲以新的形式重現(xiàn)于人們的生活。
1.1 新版“吃豆人”游戲總體設(shè)計(jì)
新版“吃豆人”游戲分為系統(tǒng)基礎(chǔ)與游戲主體兩層結(jié)構(gòu),如圖1所示。
圖1 新版“吃豆人”游戲總體設(shè)計(jì)圖
其中:系統(tǒng)基礎(chǔ)層包含聲音控制、圖像處理、網(wǎng)絡(luò)傳輸,這三部分貫穿程序始終,起到根基作用;游戲主體模塊以用戶所見即所得為主,包含游戲選擇和游戲過程模塊,其中游戲選單模塊的主要任務(wù)是給游戲過程模塊傳值;游戲過程模塊是整個(gè)游戲中最關(guān)鍵的部分,其業(yè)務(wù)邏輯相對復(fù)雜,因此又將其細(xì)分為人機(jī)交互、游戲繪圖、人工智能和邏輯處理四部分。
1.2 系統(tǒng)基礎(chǔ)層設(shè)計(jì)
(1) 聲音控制模塊
它包含音樂和音效控制模塊。音樂控制模塊用MediaPlayer類進(jìn)行處理,該類可加載和播放較大的聲音文件,但是不宜同時(shí)播放多個(gè)文件。音效控制模塊選用SoundPool類進(jìn)行管理,它可存放多個(gè)聲音文件,每個(gè)文件可以設(shè)置各自的屬性,如優(yōu)先級、質(zhì)量、音量、均衡等。該類適合播放小文件,并且可以同時(shí)播放多個(gè)聲音文件。
(2) 圖像處理模塊
它是游戲開發(fā)中最為重要的部分,該模塊主要是對游戲中的圖片進(jìn)行獲取、縮放、旋轉(zhuǎn)、剪裁。在Android中的圖片可用Bitmap類進(jìn)行封裝,對圖片的編輯和獲取通過BitmapFactory類的靜態(tài)方法來實(shí)現(xiàn)。
(3) 網(wǎng)絡(luò)傳輸模塊
它采用C/S架構(gòu),Socket技術(shù)實(shí)現(xiàn)。該技術(shù)的優(yōu)點(diǎn)在于其網(wǎng)絡(luò)傳輸?shù)姆绞綖橐粏栆淮?,不易丟失數(shù)據(jù)。網(wǎng)絡(luò)傳輸模塊又分為進(jìn)入吃豆人主游戲前和進(jìn)入游戲主體部分后的網(wǎng)絡(luò)傳輸模塊。前者的作用是對游戲中人物角色、場景以及游戲模式的選擇進(jìn)行互傳,后者的作用是在游戲中收集雙方的戰(zhàn)況、地圖、怪物等實(shí)時(shí)數(shù)據(jù)并進(jìn)行互傳。
1.3 游戲主體設(shè)計(jì)
(1) 游戲選擇模塊
通過該模塊的多個(gè)View中的選項(xiàng)進(jìn)入游戲,通過這些選項(xiàng),用戶將選擇到所需的游戲模式、人物角色及關(guān)卡。模塊中所有View及按鈕層次結(jié)構(gòu)如圖2所示。
(2) 游戲過程模塊
如圖1所示,它是實(shí)現(xiàn)吃豆人游戲的主體部分,除設(shè)置地圖、人物角色、敵人、道具等游戲元素外,還實(shí)現(xiàn)人機(jī)交互功能。所以又分為:
① 人機(jī)交互模塊
它實(shí)現(xiàn)用戶的控制,游戲采用觸屏方式,當(dāng)用戶輕觸屏幕時(shí),用戶控制的人物將會(huì)改變移動(dòng)方向。
② 游戲繪圖模塊
它負(fù)責(zé)將處理完成的圖片繪制到屏幕上,包括地圖、主角、怪物、計(jì)分板的繪制方法和實(shí)際繪制指令。其中的尺寸單位將根據(jù)手機(jī)機(jī)型不同進(jìn)行調(diào)整。執(zhí)行時(shí)會(huì)先獲取設(shè)備的屏幕分辨率,再根據(jù)分辨率計(jì)算單位尺寸,最后通過單位尺寸的倍數(shù)將所有內(nèi)容繪制在屏幕上。該模塊每20秒執(zhí)行一次,起到刷新屏幕繪制內(nèi)容的作用。
③ 人工智能模塊
它是賦予游戲中敵人行動(dòng)的規(guī)則。為游戲設(shè)計(jì)了隨機(jī)移動(dòng)AI、追擊AI和逃亡AI。其中每個(gè)敵人擁有一個(gè)初始的AI,但它們通過時(shí)間的推移或道具的拾取,將會(huì)不斷變化。
④ 邏輯處理模塊
它是游戲中至關(guān)重要的部分,決定著游戲中勝敗的條件、碰撞的發(fā)生、分?jǐn)?shù)、生命值,以及各種單位屬性的變化。該模塊定義在MainGame類中,其中又包含了得到道具的函數(shù)、與敵人發(fā)生碰撞的函數(shù)、游戲勝敗的函數(shù)等。
2.1 游戲情節(jié)的設(shè)計(jì)
在Android游戲開發(fā)中,游戲情節(jié)可源于個(gè)人創(chuàng)意,其他或是改編自其他游戲,如動(dòng)漫或小說等作品。新版“吃豆人”游戲選取《東方project》作為游戲背景,《東方Project》是日本同人游戲社團(tuán)(上海愛麗絲幻樂團(tuán))所制作的一系列動(dòng)畫和漫畫,深受廣大動(dòng)漫迷的喜愛,常被人拿來做二次設(shè)計(jì)。
新版“吃豆人”游戲開發(fā)將選取博麗靈夢、霧雨魔理沙和十六夜咲夜這三名代表性人物作為主角。她們將被困于奇幻的魔法迷宮之中,游戲玩家將控制她們一步步破解魔法封印,逃離魔法迷宮。
2.2 游戲人物設(shè)計(jì)
(1) 主角設(shè)計(jì)
游戲中共設(shè)定三個(gè)人物主角,以供玩家選擇。她們各自的形象、速度、生命值都不一樣。玩家可以根據(jù)自己的喜好和需要進(jìn)行選擇。
主角一:十六夜咲夜,生命值7、速度4。她是完全灑脫的從者,特點(diǎn)是速度最慢但生命值極高,適合操作不熟練的玩家。
主角二:博麗靈夢,生命值3、速度5。她是樂園的美妙巫女,各項(xiàng)能力均衡,是整個(gè)故事的核心人物,其特點(diǎn)是速度快但生命值少,適合新玩家選擇。
主角三:霧雨魔理沙,生命值1、速度6。她是普通的魔法使者,其特點(diǎn)是生命值最少但速度最快,適合高級玩家選擇。
(2) 怪物精靈(NPC)設(shè)計(jì)
NPC1:當(dāng)游戲主角吃到綠色魔法石頭后,所有怪物將會(huì)變?yōu)閯?dòng)物并喪失攻擊性。其中,NPC1將會(huì)變身為可愛的小兔子;NPC2會(huì)變身為憨厚老實(shí)的小烏龜; NPC3會(huì)變身為無攻擊力的小貓。
2.3 游戲的音樂和音效設(shè)計(jì)
2.3.1 音 樂
新版“吃豆人”游戲的背景音樂都是原創(chuàng)的音樂,主要分為兩種:一種是在選擇界面時(shí)播放的,由簡單、舒緩的小調(diào)和弦構(gòu)成,讓它循環(huán)播放;另一種在開始游戲的時(shí)候,以明快的hip-hop節(jié)奏為主,烘托出歡快緊張的氣氛,同樣讓它循環(huán)播放。背景音樂將選用MediaPlayer類進(jìn)行播放。
2.3.2 音 效
特殊音效共有七種。首先在選擇界面時(shí)有兩種,一種是第一次選擇屏幕選項(xiàng)的時(shí)候,另一種是第二次確定屏幕選項(xiàng)的時(shí)候。其次在游戲過程中有五種:分別是在游戲開始的時(shí)候、在游戲主角吃豆子的時(shí)候、在游戲主角吃到道具的時(shí)候、在主角生命值減少或者游戲結(jié)束的時(shí)候以及在游戲勝利的時(shí)候。特殊音效將選用SoundPool類進(jìn)行播放。
2.4 游戲中的其他設(shè)計(jì)
2.4.1 道具設(shè)計(jì)
游戲中設(shè)計(jì)了不同類型道具,當(dāng)玩家與道具發(fā)生碰撞,游戲中特定的元素將會(huì)發(fā)生變化。
(1) 魔石設(shè)計(jì)
新版吃豆人游戲?qū)⒔?jīng)典吃豆人的“大力丸”替換為四種顏色的魔石,并且每種顏色代表的能力不同。其中:綠色魔石象征自然,獲得后NPC變?yōu)閯?dòng)物形態(tài)。紅色魔石象征生命,獲得后生命值+1;藍(lán)色魔石象征時(shí)間,獲得后NPC靜止;紫色魔石象征魔力,獲得后速度會(huì)加快。
(2) 機(jī)關(guān)設(shè)計(jì)
新版吃豆人游戲中增加了地圖機(jī)關(guān),在游戲的“智力關(guān)卡”中有所體現(xiàn)。主角在不破解機(jī)關(guān)之前,是無法吃到所有豆子的,設(shè)置了如下兩組機(jī)關(guān):
機(jī)關(guān)1:以鑰匙和門的形式展現(xiàn)。它們是一一對應(yīng)的,在“智力關(guān)卡”中,會(huì)有關(guān)在木門里的豆子和敵對精靈,游戲主角在沒有拿到鑰匙的情況下是無法進(jìn)去的。只有吃到鑰匙,地圖上的木門才會(huì)開啟。
機(jī)關(guān)2:以樹葉和樹木的形式展現(xiàn)。它們也是一一對應(yīng)的。在“智力關(guān)卡”中,會(huì)有被樹木擋住的豆子和敵對精靈。如果游戲主角沒有解鎖樹葉封印的樹木,就無法完成游戲。只有吃到樹葉,地圖上的樹才會(huì)消失。
2.4.2 圖片變化類的設(shè)計(jì)
為了提高代碼的復(fù)用性,在游戲設(shè)計(jì)過程中,將改變圖片尺寸和選擇圖片的方法封裝在MyBmpFactory類中。當(dāng)需要改變圖片尺寸時(shí),可以通過新建一個(gè)MyBmpFactory的實(shí)例來實(shí)現(xiàn)所需要的效果。
3.1 游戲地圖的設(shè)計(jì)
游戲地圖的設(shè)計(jì)主要包括地圖的分層、地圖的繪制和地圖中游戲元素的擺放。
3.1.1 地圖的分層設(shè)計(jì)
地圖通過二維數(shù)組來實(shí)現(xiàn)對圖塊的匹配,從而畫出一張完整地圖。游戲中的地圖以圖塊拼接方式繪制,總共分四層。
第一層:游戲背景層,是游戲中不動(dòng)的背景,又叫地面層。其余幾層將在此層上面繪制。這層不會(huì)與游戲中的精靈進(jìn)行碰撞,精靈將在它上面行走。
第二層:物理實(shí)體層,是游戲中的實(shí)體。在游戲中這一層是精靈將無法通過的特殊層,但是可與精靈進(jìn)行碰撞。用于擺放墻壁、門、樹等障礙物。
第三層:機(jī)關(guān)道具層。是游戲中的道具如豆子、鑰匙、寶石等。主角可以通過碰撞他們從而增加積分或觸發(fā)事件。
第四層:天空層,是可以遮蔽精靈的高層物體,如山洞、高層的樹葉等,它們不可與精靈碰撞但可以遮蔽精靈的顯示。
3.1.2 地圖的繪制
定義地圖的二維數(shù)組中的元素以int類型儲存,每個(gè)元素都在000至999范圍之內(nèi),每個(gè)數(shù)字匹配一張圖塊。當(dāng)游戲運(yùn)行時(shí),從地圖第一層到第四層逐一將匹配的圖片繪制到屏幕上,圖塊的位置和尺寸由數(shù)組元素的角標(biāo)和屏幕尺寸決定。
在每塊圖塊繪制前,將會(huì)執(zhí)行匹配圖片的一段代碼。該代碼通過判斷語句得出該元素是000至999中的哪一個(gè)數(shù)字,再根據(jù)判斷結(jié)果返回圖片對象。
3.1.3 關(guān)于地圖中元素的擺放
地圖中的門、樹等機(jī)關(guān)類實(shí)體將會(huì)添加至第二層中,而觸發(fā)機(jī)關(guān)的道具將添加至第三層中,玩家控制的人物碰撞機(jī)關(guān)道具時(shí),相應(yīng)的機(jī)關(guān)和該位置的道具都會(huì)消失。
地圖中的道具將添加至第三層中,共分為四種:紅色生命寶石,人物獲得后生命值+2;藍(lán)色速度寶石,人物獲得后速度增加;紫色魔法石人物獲得后,所有怪物將在一定時(shí)間之內(nèi)定身;綠色魔法石后,獲得后所有怪物將變?yōu)閯?dòng)物并喪失攻擊性。
將“吃豆人”經(jīng)典的豆子添加到第三層中,玩家控制的人物碰到豆子時(shí),其 score屬性將會(huì)增加,且該位置的豆子消失,直到該層中沒有豆子時(shí),游戲結(jié)束。
3.2 游戲AI設(shè)計(jì)
游戲AI是游戲設(shè)計(jì)中至關(guān)重要的部分,游戲的趣味性與難度很大程度上取決于游戲AI。原版“吃豆人”游戲擁有一套出色的游戲AI。新版“吃豆人”游戲在原版游戲敵人行動(dòng)方式的基礎(chǔ)上,設(shè)計(jì)出全新的、具有趣味性的游戲AI。分別是隨機(jī)移動(dòng)、追擊和逃亡AI。這三種游戲AI都是在直線移動(dòng)AI基礎(chǔ)上實(shí)現(xiàn)的。
3.2.1 直線移動(dòng)AI
設(shè)置此AI的敵人將會(huì)直線移動(dòng),直到撞到障礙物才會(huì)更改移動(dòng)方向。當(dāng)游戲人物向上移動(dòng)時(shí),實(shí)時(shí)判斷游戲人物上方是否有障礙物,如果有障礙物則生成一個(gè)隨機(jī)數(shù),當(dāng)隨機(jī)數(shù)為0時(shí),游戲人物將改為向下移動(dòng);當(dāng)隨機(jī)數(shù)為1時(shí),游戲人物將改為向左移動(dòng);當(dāng)隨機(jī)數(shù)為2時(shí),游戲人物將改為向右移動(dòng)。
3.2.2 隨機(jī)移動(dòng)AI
這是原版游戲中橙色幽靈Clyde的行動(dòng)方式,但也并非是完全隨機(jī)的,試想如果是完全隨機(jī),該幽靈將可能會(huì)原地打轉(zhuǎn),或是在直線移動(dòng)中折返,這會(huì)使游戲難度大幅增加。因此在隨機(jī)移動(dòng)AI設(shè)計(jì)中,首先判斷敵人當(dāng)前的移動(dòng)方向,然后實(shí)時(shí)判斷其左右是否可以轉(zhuǎn)彎,當(dāng)?shù)竭_(dá)轉(zhuǎn)彎點(diǎn)時(shí)或到達(dá)之前生成一個(gè)隨機(jī)數(shù),根據(jù)該隨機(jī)數(shù)決定人物角色是否轉(zhuǎn)彎。如當(dāng)人物角色向上移動(dòng)時(shí),實(shí)時(shí)判斷人物左右是否可通過,若可通過,則生成一個(gè)隨機(jī)數(shù),如果人物左邊可通過并且隨機(jī)數(shù)為0,則人物改為向左移動(dòng),如果人物右邊可通過并且隨機(jī)數(shù)為1,則人物改為向右移動(dòng),其他情況則不改變移動(dòng)方向,繼續(xù)向上移動(dòng)。
3.2.3 追擊AI
追擊主角的AI設(shè)計(jì)借鑒了原版游戲中紅色幽靈Blinky的行動(dòng)方式。設(shè)置此AI的怪物會(huì)努力讓自己跑到主角的位置,同時(shí)實(shí)時(shí)判斷自身與主角的相對位置,從而改變其移動(dòng)的方向。因?yàn)橛螒虻貓D具有管道式的特點(diǎn),當(dāng)怪物縱向移動(dòng)時(shí),判斷自身與游戲主角橫縱距離的差值,若縱向距離大于橫向距離,怪物保持縱向移動(dòng),否則,怪物的行動(dòng)方向改為橫向。怪物移動(dòng)方向?qū)⑹冀K縮短與主角的相對距離。
3.2.4 逃亡AI
新版“吃豆人”游戲中主角逃離的AI設(shè)計(jì),借鑒了原版游戲中主角吃到大力丸后,怪物的行動(dòng)方式。設(shè)置此AI的怪物會(huì)努力讓自己遠(yuǎn)離主角的位置,因?yàn)橛螒虻牡貓D具有管道式的特點(diǎn),使得當(dāng)敵人縱向移動(dòng)時(shí),判斷自身與人物角色橫縱距離的差值。如果縱向距離小于橫向距離,敵人保持縱向移動(dòng),否則,敵人的行動(dòng)方向?qū)⒏臑闄M向。敵人的移動(dòng)方向?qū)⑹冀K遠(yuǎn)離主角。因?yàn)檫@個(gè)逃亡AI每個(gè)NPC都涉及到,所以將它寫成一個(gè)逃亡函數(shù),NPC分別函數(shù)傳Monster變量即可。
3.3 碰撞檢測算法
新版“吃豆人”游戲?qū)儆?D像素風(fēng),游戲的地圖是以矩形圖塊為基本單位的,所以其碰撞檢測選用矩形碰撞檢測方法。
3.3.1 矩形碰撞檢測原理
在2D游戲中,矩形碰撞的前提是假設(shè)所有實(shí)體碰撞單位如障礙物、道具、人物等都以矩形的形式存在。矩行碰撞檢測原理如圖3所示。
圖3 矩形碰撞原理示意圖
判斷兩個(gè)物體橫向是否發(fā)生碰撞時(shí),可比較p1和p2的x坐標(biāo)之間距離和w1/2+w2/2的大小。當(dāng)p1和p2的x坐標(biāo)之間距離大于w1/2+w2/2時(shí),兩物體橫向不發(fā)生碰撞,否則發(fā)生碰撞。
判斷兩個(gè)物體縱向是否發(fā)生碰撞時(shí),可比較p1和p2的y坐標(biāo)之間距離和h1/2+h2/2的大小,當(dāng)p1和p2的y坐標(biāo)之間距離大于y1/2+y2/2時(shí),兩物體縱向不發(fā)生碰撞,否則發(fā)生碰撞。
判斷兩個(gè)物體是否發(fā)生碰撞,需要橫向和縱向兩部分同時(shí)為真的情況下,才能確定兩物體發(fā)生碰撞。
3.3.2 新版“吃豆人”游戲中的碰撞設(shè)計(jì)
游戲中主角與NPC的碰撞采用矩形碰撞檢測原理,但判斷方法與基本原理中所闡述的方法有所不同。因?yàn)樾掳妗俺远谷恕庇螒蛟O(shè)定所有游戲主角與NPC的大小全部相同,且只有游戲主角和敵人之間才會(huì)發(fā)生碰撞,因此可以選取游戲主角的坐標(biāo)和NPC坐標(biāo)直接的關(guān)系進(jìn)行碰撞判斷。
游戲中主角和NPC的坐標(biāo)都在其中心位置,通過判斷主角的坐標(biāo)是否到達(dá)NPC坐標(biāo)周邊的某一位置,來判斷主角和NPC是否發(fā)生碰撞。發(fā)生碰撞的判斷并非設(shè)定成人物邊緣發(fā)生重疊即為發(fā)生碰撞,而是游戲主角與NPC重疊到一定程度時(shí),才判斷發(fā)生碰撞。因此判斷方式設(shè)定為:當(dāng)玩家控制的游戲主角坐標(biāo)在NPC坐標(biāo)上下左右各加游戲圖塊橫縱尺寸的一半時(shí),碰撞生效。游戲主角與NPC的碰撞檢測流程如圖4所示。
圖4 游戲主角與NPC的碰撞檢測流程圖
在新版“吃豆人”游戲中,游戲主角和障礙物的碰撞判斷借助于地圖數(shù)組完成。將游戲主角的橫縱坐標(biāo)分別除以地圖圖塊的橫縱尺寸,可得到主角在數(shù)組中的位置,此時(shí)可判斷其上下左右是否有障礙物,即判斷地圖第二層中游戲主角位置的上下左右的元素是否為000,如果是000則不發(fā)生碰撞,否則發(fā)生碰撞。游戲主角與游戲道具的碰撞檢測流程如圖5所示。
圖5 主角與游戲道具的碰撞檢測流程圖
游戲網(wǎng)絡(luò)設(shè)計(jì)是新版“吃豆人”游戲的特色,同時(shí)也是難點(diǎn)。因?yàn)橛螒蚝嘘P(guān)卡選擇和人物選擇的部分,所以網(wǎng)絡(luò)部分將設(shè)計(jì)為兩段:第一段將在進(jìn)入主游戲之前收集并傳遞游戲模式信息、關(guān)卡信息以及人物角色信息;第二段將在進(jìn)入主游戲之后收集和傳遞游戲過程中的信息,這兩段網(wǎng)絡(luò)設(shè)計(jì)均采用Socket技術(shù)進(jìn)行。游戲的互聯(lián)網(wǎng)對戰(zhàn)仍在開發(fā)中,現(xiàn)將局域網(wǎng)環(huán)境下對戰(zhàn)的設(shè)計(jì)說明如下。
4.1 進(jìn)入游戲前客戶端和服務(wù)器
在進(jìn)入網(wǎng)絡(luò)游戲前,服務(wù)器端將負(fù)責(zé)選擇關(guān)卡和游戲模式,并且從三名人物角色中選擇一名,而客戶端只需選擇人物角色即可。因此,服務(wù)器端要向客戶端發(fā)送關(guān)卡變量stage、游戲模式變量netmode,以及人物角色變量character的鍵值對,并且接收客戶端發(fā)來的人物角色character變量的鍵值對。而客戶端需要發(fā)送人物角色character變量的鍵值對,并且接收服務(wù)器端關(guān)卡變量stage、游戲模式變量netmode,以及人物角色變量character的鍵值對,雙方收集好信息后即可開始游戲。
4.2 進(jìn)入游戲后客戶端和服務(wù)器
在新版“吃豆人”游戲中,網(wǎng)絡(luò)對戰(zhàn)包括分屏和同屏兩種模式。在局域網(wǎng)下,二人作戰(zhàn),兩種模式的網(wǎng)絡(luò)延遲均在1 ms以內(nèi)。
(1) 分屏模式
對戰(zhàn)雙方的屏幕中的內(nèi)容互不影響,雙方在同一時(shí)間、同一個(gè)關(guān)卡中各自展開游戲,最后哪一方最先通關(guān)哪一方即為勝者。因此,在該模下服務(wù)器和客戶端均需要向?qū)Ψ桨l(fā)送人物的生命值、得分以及剩余豆子數(shù)并接收對方所傳遞的數(shù)據(jù)。
(2) 同屏模式
對戰(zhàn)雙方共享同一屏幕中的內(nèi)容,其中地圖、怪物、道具等游戲資源將完全共享,雙方在同一時(shí)間和場景中一同展開游戲,最后分?jǐn)?shù)最高者為勝者。因此,同屏模式下需要傳輸?shù)膬?nèi)容要多于分屏模式。該模式將會(huì)以服務(wù)器端為主,服務(wù)器將發(fā)送地圖、怪物以及人物角色數(shù)據(jù);客戶端接收這些數(shù)據(jù),并依據(jù)這些數(shù)據(jù)改變自身的地圖和怪物狀態(tài)??蛻舳酥话l(fā)送人物角色數(shù)據(jù)至服務(wù)器,服務(wù)器將會(huì)通過接收到的人物角色數(shù)據(jù)對地圖、怪物等元素進(jìn)行反饋。
此外,新版“吃豆人”游戲開發(fā)出一套微機(jī)版,可適應(yīng)Win 7系統(tǒng),支持最高分辨率為1 920×1 080,在微機(jī)版游戲中的圖片大小將根據(jù)屏幕分辨率的大小同比例放大和縮小。
5.1 系統(tǒng)碰撞測試
5.1.1 地圖與精靈的碰撞測試
通過上述的碰撞檢測算法進(jìn)行測試后發(fā)現(xiàn),由于人物角色圖片尺寸和繪制尺寸的影響,使得人物顯示的位置有少許偏差。這將會(huì)出現(xiàn)人物雖然碰到墻壁后位置不動(dòng),但是有一半身子顯示在墻壁之上的情況。解決方法是調(diào)整人物角色兩個(gè)方向坐標(biāo)的偏移量,從而微調(diào)人物角色繪制的具體位置。
5.1.2 主角與精靈的碰撞測試
通過上述的碰撞檢測算法進(jìn)行測試后,發(fā)現(xiàn)人物角色與敵人每碰面一次,實(shí)際碰撞效果卻為兩次。該問題所影響的只有人物角色生命值的統(tǒng)計(jì)量,即每次碰撞后,生命值-2。解決方法是將實(shí)際顯示的生命值定義為人物角色的life屬性的值除以2,如人物角色的生命值為5,則life屬性的值應(yīng)該為10。
5.1.3 精靈與道具的碰撞測試
精靈與道具的碰撞和精靈與地圖的碰撞大同小異,因此,該項(xiàng)測試重點(diǎn)關(guān)注與道具碰撞后應(yīng)該觸發(fā)的事件是否能夠正常執(zhí)行。經(jīng)過測試發(fā)現(xiàn),每項(xiàng)道具均能達(dá)到預(yù)期效果。
5.2 真機(jī)運(yùn)行測試
系統(tǒng)開發(fā)完成后,用于不同手機(jī)機(jī)型中進(jìn)行測試。測試結(jié)果發(fā)現(xiàn),部分圖片與模擬器測試時(shí)顯示不一致,經(jīng)過調(diào)試發(fā)現(xiàn),模擬器與真機(jī)存在尺寸單位不一致的問題,使得在分割圖片時(shí)產(chǎn)生了尺寸上的不匹配。解決方法是將剪裁圖片的代碼中,含有屬于絕對數(shù)值的均改為原圖的百分比來實(shí)現(xiàn)。
5.3 運(yùn)行結(jié)果展示
玩家點(diǎn)擊手機(jī)上的應(yīng)用圖標(biāo)時(shí),游戲的主界面如圖6所示。
圖6 游戲主界面
因?yàn)橛螒蛴袃煞N模式,在這里選擇“單人游戲”,則進(jìn)入“單人游戲”界面,如圖7所示。
圖7 游戲選擇界面
如果選擇“闖關(guān)模式”就會(huì)直接從第一個(gè)關(guān)卡開始游戲。游戲開始運(yùn)行如圖8所示。會(huì)有一張“START”的圖片由小變大充斥屏幕后消失,即意味著游戲開始。
圖8 開始游戲界面
若在圖7中選擇“選關(guān)模式”,就會(huì)出現(xiàn)關(guān)卡選擇界面。其中包括四個(gè)關(guān)卡,兩種風(fēng)格。第一種是“智力吃豆人”,游戲的地圖運(yùn)行簡單,但是設(shè)有障礙物,如小門和樹木。這些障礙物阻擋了主角的吃豆任務(wù),需要鑰匙和樹葉解除障礙。玩家需要在不被敵對精靈逮住的情況下,解除障礙吃掉豆子?!?stage001-”和“-stage002-”就采用了這種方法。第二種是“傳統(tǒng)吃豆人”,游戲地圖比較復(fù)雜,主角以吃完所有的豆子為取得勝利的方法。其中可以借助不同的魔法石獲得不同的輔助效果。“-stage003-”和“-stage004-”采取的是這種方法,如圖9和圖10所示。
圖9 “-stage003-”關(guān)卡界面運(yùn)行圖
圖10 “-stage004-”關(guān)卡界面運(yùn)行圖
基于Android的新版“吃豆人”游戲借用經(jīng)典“吃豆人”的情懷和“遍歷豆子”的游戲勝利條件,但是游戲的情節(jié)設(shè)計(jì)、地圖設(shè)計(jì)、人物角色設(shè)計(jì)和游戲AI設(shè)計(jì)卻有了較大的創(chuàng)新,使得游戲更具有趣味性和耐玩性。其特色主要表現(xiàn)在:操作平臺多樣化,既可以在電腦上運(yùn)行,也可以在手機(jī)上運(yùn)行;游戲模式升級,實(shí)現(xiàn)了單人游戲和網(wǎng)絡(luò)對戰(zhàn)兩大模式;游戲邏輯趣味化,增加了人物角色選擇功能和地圖機(jī)關(guān)功能;游戲耐玩性的提升,為游戲量身定制了三個(gè)敵對精靈的AI方式;游戲界面更優(yōu)化,全新的游戲情節(jié)與游戲界面;游戲代入感的強(qiáng)化,原創(chuàng)背景音樂與經(jīng)典音效的完美結(jié)合。這些特點(diǎn)使得經(jīng)典得以重現(xiàn),既滿足曾玩過原版“吃豆人”游戲人們的懷舊情懷,同時(shí)又適合現(xiàn)代人的娛樂方式。此外基于Android的新版“吃豆人”游戲設(shè)計(jì)與開發(fā)對于2D“像素風(fēng)”遍歷整個(gè)地圖類Android 游戲開發(fā)具有一定的參考和借鑒意義。
[1] 楊科選. 人工智能尋路算法及其在游戲中的應(yīng)用研究[D]. 長沙:中南大學(xué),2009.
[2] 蔡維華,馬樂,王華,等. 基于IGES文件的艦船航行性能數(shù)值仿真模型[J]. 計(jì)算機(jī)應(yīng)用與軟件,2012,29(2):192-194,236.
[3] 胡偉. Android系統(tǒng)架構(gòu)及其驅(qū)動(dòng)研究[J] . 廣州廣播電視大學(xué)學(xué)報(bào), 2010, 10(4):96-101.
[4] 張亮亮, 夏正友. 基于遺傳算法求解游戲關(guān)卡問題[J].信息通信, 2009(6):31-35.
[5] 陳和平,張前哨. A*算法在游戲地圖尋徑中的應(yīng)用與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2005, 22(12): 118-120.
[6] 劉昌平,范明鈺. Android手機(jī)的輕量級訪問控制[J].計(jì)算機(jī)應(yīng)用研究, 2010, 27(7): 2611-2613.
[7] 靳巖,姚尚朗. Google Android 開發(fā)入門與實(shí)戰(zhàn)[M].北京:人民郵電出版社,2009:221-333.
[8] 王向輝,張國印,沈潔. Android應(yīng)用程序開發(fā) [M].北京:清華大學(xué)出版社, 2011:256-290.
[9] 崔浩然. 基于Android平臺的手機(jī)游戲的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安科技大學(xué),2011.
[10] 李剛.瘋狂Android講義[M].北京:電子工業(yè)出版社,2013:30-158.
DESIGN AND IMPLEMENTATION OF A NEW VERSION OF “THE PAC-MAN” GAME BASED ON ANDROID
Chen Manhong Xue Xue
(Teachers’College,BeijingUnionUniversity,Beijng100011,China)
The new version of “the Pac-man” game is adding some modern elements and various rules of game modes on the basis of the original “the Pac-man” game to be more suitable for modern preferences of mobile phone in order to achieve the purpose of casual games. This article shows the function of the game’s overall architecture, and in the realization of the game map optimization, game character design and game AI, on the basis of complete net-play, cross-platform and so on many functions.
“the Pac-man” game Collision detection Game AI Game map
2016-07-20。陳漫紅,副教授,主研領(lǐng)域:數(shù)據(jù)庫及多媒體技術(shù)。薛雪,學(xué)士。
TP3
A
10.3969/j.issn.1000-386x.2017.06.021