孫子韜
摘要:賽車(chē)電腦游戲是很多人所喜歡的休閑娛樂(lè)活動(dòng)之一。本文針對(duì)某款賽車(chē)游戲進(jìn)行了建模及設(shè)計(jì)。在該款游戲中,賽車(chē)在行駛的過(guò)程中會(huì)遇到障礙球與能量球,賽車(chē)碰撞到能量球或障礙球后,賽車(chē)的速度、距離以及賽車(chē)的運(yùn)行軌跡都發(fā)生了變化。本文利用matlab與excel對(duì)賽車(chē)在行駛過(guò)程中對(duì)兩類(lèi)球的碰撞以及行駛路徑進(jìn)行了建模,得到了一些可以指導(dǎo)實(shí)際賽車(chē)游戲設(shè)計(jì)的結(jié)論。
關(guān)鍵詞:賽車(chē)游戲設(shè)計(jì);速度控制;路徑規(guī)劃;matlab;Mathematica;建模
中圖分類(lèi)號(hào):TP31? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ?文章編號(hào):1009-3044(2019)03-0209-04
Abstract: racing computer games is one of the recreational activities that many people like. In this paper, a racing game for the modeling and design. In this game, the car in the driving process will encounter obstacle ball and energy ball , the car hit the obstacle ball or energy ball, the car's speed, distance and the car's trajectory has changed. In this paper, we use matlab and Mathematica to model the collision between the two kinds of balls and the driving path, and get some conclusions which can be used to guide the design of the actual racing game.
Key words: racing game design; speed control; path planning; matlab Mathematica? modeling
賽車(chē)電腦游戲是很多人所喜歡的休閑娛樂(lè)活動(dòng)之一。某款電腦賽車(chē)游戲初步構(gòu)想如下:游戲開(kāi)始后,賽車(chē)的初速度為10p/s,豎直向上。用戶(hù)只能通過(guò)鍵盤(pán)上的上下左右鍵控制賽車(chē)。每按一下向上(下)鍵,賽車(chē)向上速度提高(降低)20%,不按鍵就保持速度不變。每按一下向左(右)鍵,賽車(chē)就得到向左(右)10p/s2的加速度,加速持續(xù)到下一次按左右鍵,如果2秒不按左右鍵,加速將不再持續(xù)。在該款游戲中,賽車(chē)在行駛的過(guò)程中會(huì)遇到障礙球與能量球,賽車(chē)碰撞到能量球或障礙球后,賽車(chē)的速度、距離以及賽車(chē)的運(yùn)行軌跡都發(fā)生了變化。研究這些變化規(guī)律,對(duì)游戲方案的設(shè)計(jì)且有重要意義。
1 問(wèn)題提出
研究賽車(chē)的速度、距離以及賽車(chē)的運(yùn)行軌跡變化規(guī)律,需逐步分析、研究以下5個(gè)問(wèn)題。
1.1問(wèn)題1
賽車(chē)向上運(yùn)動(dòng),運(yùn)動(dòng)過(guò)程中用戶(hù)未做任何操作。賽車(chē)每10秒撞到一個(gè)球,共撞到5個(gè)障礙球和5個(gè)能量球,但是兩種球的排列順序不定,假設(shè)撞第1個(gè)球時(shí)速度為v。撞完第10個(gè)球后,賽車(chē)速度最大值和最小值為多少?從撞第1個(gè)球到撞完第10個(gè)球賽車(chē)運(yùn)行距離的最大和最小值。
1.2問(wèn)題2
假設(shè)用戶(hù)開(kāi)始游戲后,每隔1秒依左、上、右、下的次序按鍵,共按了8個(gè)鍵。在此過(guò)程中沒(méi)撞到任何球,按完最后一次,賽車(chē)的向上速度和向左的速度各為多少?畫(huà)出賽車(chē)在地面上的運(yùn)行軌跡。
1.3問(wèn)題3
假設(shè)用戶(hù)開(kāi)始游戲后,每隔1秒依左、上、右、下的次序按鍵,共按了4000個(gè)鍵。在此過(guò)程中沒(méi)撞到任何球,請(qǐng)問(wèn)按完最后一次,賽車(chē)的向上速度和向左的速度各為多少?求出此時(shí)賽車(chē)在地面上相對(duì)于游戲開(kāi)始時(shí)的位置。
1.4 問(wèn)題4
假設(shè)用戶(hù)從看見(jiàn)能量球或障礙球到做出反應(yīng)需要0.2秒,最快按鍵頻率每秒8次。當(dāng)賽車(chē)以速度v向上運(yùn)行時(shí),用戶(hù)發(fā)現(xiàn)正面的障礙球已經(jīng)完全出現(xiàn)在屏幕正前方,v最小為多少時(shí),用戶(hù)不可能躲開(kāi)該球(用左右鍵躲閃,向下鍵減速)。
1.5 問(wèn)題5
假設(shè)賽車(chē)的初始能量可以運(yùn)行400km,每改變一次速度會(huì)消耗5%。在問(wèn)題4的假設(shè)下,設(shè)計(jì)一個(gè)能量球和障礙球的布局方案,使得用戶(hù)既有趣味性和成就感,又有挑戰(zhàn)性,又不要太疲勞。
2 模型假設(shè)
1)所給的數(shù)據(jù)真實(shí)可靠;
2)按鍵沒(méi)有延時(shí),立即響應(yīng);
3)不做任何操作且未撞到球時(shí)速度不變;
4) 游戲時(shí)間和操作頻率適中。
3 模型的準(zhǔn)備工作
1)數(shù)據(jù)的處理? ?周期等進(jìn)行分析;賽車(chē)運(yùn)動(dòng)變化趨勢(shì)進(jìn)行分析;有些數(shù)據(jù)成等比例,從而進(jìn)行運(yùn)算
2)聚類(lèi)分析(進(jìn)行采樣) 用matlab、Excel、Mathmatica軟件聚類(lèi)分析和各個(gè)不同問(wèn)題的需要,采得2組采樣,每組5個(gè)采樣值。
3)預(yù)測(cè)的準(zhǔn)備工作 根據(jù)數(shù)據(jù)特點(diǎn),對(duì)總體和個(gè)體的特點(diǎn)進(jìn)行比較,以表格或圖示方式顯示。
4 模型建立與求解
4.1 模型1
因?yàn)闊o(wú)論以何種順序排列,只要碰撞能量球與障礙球的個(gè)數(shù)相等,那么初速度所增加的百分?jǐn)?shù)(10%)以及減少的百分?jǐn)?shù)(20%)都恒定,所以,v10恒定。
v10=1.15×0.85v0=0.52772864v0
式中:v10為碰撞第10 個(gè)球后,賽車(chē)的速度,p/s
并且由此可推出:無(wú)論以何種順序排列,只要初速度相同且在行駛過(guò)程中碰撞到的兩種球的個(gè)數(shù)均相等,則賽車(chē)的末速度相同,即賽車(chē)相撞五個(gè)能量球后撞五個(gè)障礙球時(shí)小車(chē)行駛路程最大;先撞五個(gè)障礙球,后撞五個(gè)能量球時(shí)行駛路程最小,現(xiàn)證明如下:
設(shè)先撞五個(gè)能量球球,后撞五個(gè)障礙球的情況記為情況A,(下文簡(jiǎn)稱(chēng)為“A”);先撞五個(gè)障礙球,后撞五個(gè)能量球的情況記為情況B(下文簡(jiǎn)稱(chēng)為“B”);除A,B外的任意情況記為情況C(下文簡(jiǎn)稱(chēng)為“C”)。第tn個(gè)10s時(shí),C中速度與A中速度相同,因?yàn)镃中0~5個(gè)10s內(nèi)速度一直增大所以A中0~5個(gè)10s內(nèi)任意時(shí)刻速度在所有能量球與障礙球的排列情況中最大,所以tn>5,并且在C中0~tn時(shí)能量球撞擊數(shù)均為5。又因?yàn)樗信帕星闆r中能量球與障礙球個(gè)數(shù)均為5個(gè),所以tn后賽車(chē)所撞球均為障礙球且個(gè)數(shù)相同,從而行駛路程也相同。
用matlab軟件運(yùn)行了所有可能的情況(三個(gè)圖分別對(duì)應(yīng)最大位移,最小位移以及某一種中間情況),結(jié)果如下圖:
由定積分知識(shí):橫坐標(biāo)t與縱坐標(biāo)v(v與t)圍成面積為路程,則要證A情況速度最大,只需證明在0~tn內(nèi)任意時(shí)刻(記為t),C情況速度小于A情況速度(vn>v)即可。設(shè)C情況中所撞障礙球時(shí)間為tm
4.4 模型4
計(jì)算簡(jiǎn)化問(wèn)題, 取賽車(chē)的中心, 障礙球的中心作計(jì)算, 不考慮形狀因素:
建立平面直角坐標(biāo)系xOy, 其中原點(diǎn)O位于障礙球中心, 障礙球中心朝向賽車(chē)的方向?yàn)閥軸正方向, y軸朝向右側(cè), 也就是賽車(chē)左鍵加速方向?yàn)閤軸正方向.
當(dāng)用戶(hù)發(fā)現(xiàn)正面障礙球完全出現(xiàn)在屏幕最上方時(shí), 由于游戲過(guò)程中賽車(chē)中心位于屏幕底端最中間, 考慮到賽車(chē)是一個(gè)長(zhǎng)寬高為10(p)的正方體, 賽車(chē)中心距離障礙球中心的距離為: 800 - 20/2 = 790(p).
假設(shè)賽車(chē)此時(shí)的速度是v0(p/s), 由于假設(shè)用戶(hù)的反應(yīng)時(shí)間是0.2(s), 那么在用戶(hù)實(shí)際按鍵的時(shí)候, 賽車(chē)中心距離障礙球中心的距離已經(jīng)減少到: 790 - 0.2 v0 .
實(shí)際躲閃的策略是, 以最快的按鍵頻率8(次/s):
1)不停地按下鍵保持減速, 減少垂直方向賽車(chē)中心和障礙球中心距離的減少速度;
2)不停地按左或者右鍵其中之一, 在賽車(chē)中心和障礙球中心相撞前盡量增加兩者中心水平方向上的距離。
4.4.1 垂直方向
由于每次按鍵賽車(chē)的速度減少20%, 如果初始速度是v0, 以最快的頻率每0.125s一次按鍵, 經(jīng)過(guò)n*0.125s, 也就是第n次按鍵的之前的瞬間, 賽車(chē)的速度是:
vyn = 0.8nv0
此時(shí)賽車(chē)走過(guò)的距離是一個(gè)等比數(shù)列求和的形式, 根據(jù)求和公式可以寫(xiě)成:
Lyn = v0 (0.8 - 0.8(n+1) )/(1-0.8) = 5v0? (0.8 - 0.8(n+1))
而對(duì)于任意時(shí)間t, 把時(shí)間改寫(xiě)成t = n0.125 + dt的形式, 其中(0<dt<0.125), 那么在該段時(shí)間內(nèi)賽車(chē)走過(guò)的距離是:
Lyt = 5v0 (0.8 - 0.8(n+1)) + 0.8(n+1)dt
按照上面的躲閃策略, 用戶(hù)開(kāi)始按鍵, 經(jīng)過(guò)時(shí)間t = (0.125n + dt)之后, 垂直方向上賽車(chē)中心到障礙球中心的距離是:
Ly = 790 - 0.2 v0 - 5v0 (0.8 - 0.8(n+1)) + 0.8(n+1)dt
4.4.2 水平方向
假設(shè)選擇一直按右鍵, 初始速度是0, 以最快的頻率每0.125s一次按鍵, 經(jīng)過(guò)時(shí)間t, 賽車(chē)的速度是:
vxn = 10t
此時(shí)水平方向賽車(chē)走過(guò)的距離可以利用計(jì)算面積的方法得到:
Lx = 10 t 2/2 = 5t 2
綜上所述, 如果以障礙球的中心為坐標(biāo)原點(diǎn)O, 采用以上的規(guī)避策略, 那么賽車(chē)中心點(diǎn)所畫(huà)出來(lái)的曲線是:
x = 5 t 2
y = 790 - 0.2 v0 - 5 v0(0.8 - 0.8(n+1)) + 0.8(n+1) v0dt
其中: t = 0.125n + dt, 滿(mǎn)足: 0<dt <0.125
依據(jù)問(wèn)題4, 在二維平面上, 賽車(chē)可以看成是10*10p的正方形, 而障礙球可以看作一個(gè)直徑20p的圓形. 采用之前建立的平面直角坐標(biāo)系, 則問(wèn)題可以寫(xiě)成以下形式:
求v0的最小值, 使得賽車(chē)的右上角經(jīng)過(guò)的路徑始終距離原點(diǎn)的距離大于10p。而賽車(chē)右上角經(jīng)過(guò)的路徑可以寫(xiě)成:
x_rt = x - 5 = 5 * t^2 - 5
y_rt = y - 5 = 785 - 0.2 v0 - 5 * v0 * (0.8 - 0.8^(n+1)) + dt * 0.8^(n+1) * v0
賽車(chē)右上角經(jīng)過(guò)的路徑是一個(gè)不連續(xù)的函數(shù), 為了方便計(jì)算, 我們使用一個(gè)經(jīng)過(guò)這個(gè)不連續(xù)函數(shù)所有間斷點(diǎn)的連續(xù)函數(shù)來(lái)作為近似, 這個(gè)函數(shù)可以寫(xiě)成:
4.5 模型5
利用上一問(wèn)題的結(jié)論, 賽車(chē)的速度要低于104 p/s才能保證屏幕上方出現(xiàn)障礙球的時(shí)候, 用戶(hù)有足夠的時(shí)間操作進(jìn)行規(guī)避. 考慮到用戶(hù)的反應(yīng)時(shí)間并不一定是0.2 s, 因此保守起見(jiàn)設(shè)置賽車(chē)的最高速度為 100 p/s, 此時(shí)可以確保即使用戶(hù)的反應(yīng)時(shí)間是0.5 s的時(shí)候依然可以規(guī)避障礙球.
其結(jié)果可以在Mathematica里面輸入命令:Plot[{785 - 0.5*a - 4*a*(1 - 0.8^(8*Sqrt[(x - 5)/5]) + 1), Sqrt[100 - x^2]} /. a -> 100, {x, 0, 10}]確認(rèn)。
為了設(shè)計(jì)一個(gè)較為合理的游戲, 考慮以下幾點(diǎn)假設(shè)進(jìn)行限制:
1)游戲時(shí)間不能太長(zhǎng), 游戲時(shí)間過(guò)長(zhǎng)會(huì)使得用戶(hù)產(chǎn)生視覺(jué)疲勞, 不利于身心健康。
2)游戲時(shí)間不能太短, 游戲時(shí)間太短并不能引起用戶(hù)的興趣。
3)游戲中用戶(hù)出現(xiàn)的障礙球和獎(jiǎng)勵(lì)球應(yīng)該都能通過(guò)用戶(hù)的反應(yīng)操作獲取或者躲避, 不能出現(xiàn)無(wú)法躲避或者獲取的球體。
4)游戲中需要用戶(hù)操作的頻率不能太低, 太低的話用戶(hù)有可能會(huì)感到無(wú)聊。
按照游戲給定限制, 400km的初始能量可以通過(guò)換算關(guān)系得到其等價(jià)像素為400×100/0.3約為130萬(wàn)p,如果按照10p/s的默認(rèn)速度來(lái)說(shuō)的話要經(jīng)過(guò)130000s=36個(gè)小時(shí)才能結(jié)束。
假設(shè)用戶(hù)剛開(kāi)始為了盡量撞到更多的能量球的同時(shí)規(guī)避障礙球?yàn)槟繕?biāo)進(jìn)行操作, 用戶(hù)需要盡快加速到100p/s, 然后通過(guò)遇到障礙球減速,沒(méi)有障礙球加速的方法進(jìn)行游戲。
根據(jù)問(wèn)題4的結(jié)論, 當(dāng)以100p/s的初速度規(guī)避障礙球的時(shí)候, 賽車(chē)向一側(cè)移動(dòng)了至少5 t2 = 15p, 解得t=1.732,考慮到每次操作花費(fèi)0.125s,并且賽車(chē)在橫向和縱向都進(jìn)行同樣時(shí)長(zhǎng)和頻率的操作,因此每次躲避障礙球需要花費(fèi)1.732/0.125×2=26次操作。
同時(shí),在躲避障礙球后,用戶(hù)希望繼續(xù)加快速度獲得能量球, 因此使用1.732/0.125=13次加速操作來(lái)重新達(dá)到100p/s的速度,因此每次躲避障礙球需要39次操作。
另外假設(shè)獲取能量球可以同樣使用一直平移的策略獲取, 那么獲取能量球可以需要13次操作。
為了使得游戲更好玩, 因此要平衡操作數(shù)。
假設(shè)游戲1分鐘是理想的時(shí)間, 那么允許
log(300/130000)/log(0.95)=149次操作
假設(shè)游戲2分鐘是理想的時(shí)間, 那么允許
log(300/130000)/log(0.95)=136次操作.
假設(shè)游戲5分鐘是理想的時(shí)間, 那么允許
log(300/130000)/log(0.95)=118次操作.
假設(shè)游戲10分鐘是理想的時(shí)間, 那么允許
log(300/130000)/log(0.95)=104次操作.
綜合考慮游戲2分鐘是比較理想的時(shí)間, 需要平均每秒用戶(hù)發(fā)生一次操作比較好.所以比如7次能量球與6次障礙球交叉排列這種方案即可。另外,游戲可以設(shè)計(jì)成障礙球出現(xiàn)在賽車(chē)正前方, 能量球出現(xiàn)在賽車(chē)一直加速正好能獲取的測(cè)前方比較好。
5 模型評(píng)價(jià)
筆者利用簡(jiǎn)單的定積分知識(shí), 把游戲問(wèn)題建模成為一個(gè)積分和優(yōu)化問(wèn)題, 在問(wèn)題1中, 作者利用排列組合原理, 用反證法證明了先加速后減速賽車(chē)行駛距離最遠(yuǎn), 而先減速后加速賽車(chē)行駛距離最近, 并利用matlab得出函數(shù)圖像,Excel計(jì)算了數(shù)值的結(jié)果;在問(wèn)題2中,作者使用了簡(jiǎn)單的定積分方法獲得了按照一定次序按鍵之后賽車(chē)的運(yùn)動(dòng)曲線;在問(wèn)題3中, 作者利用Excel計(jì)算了4000次循環(huán)操作后賽車(chē)的最終速度; 在問(wèn)題4中, 作者通過(guò)循序漸進(jìn)的方式利用簡(jiǎn)單的定積分原理和Mathematica數(shù)學(xué)軟件獲得了使得用戶(hù)能安全躲避障礙球的最大速度. 在問(wèn)題5中,在考慮到玩家趣味性、挑戰(zhàn)性、成就感三方面以及游戲的本身設(shè)計(jì)后,綜合得出了最佳的設(shè)計(jì)方案。
對(duì)于前三個(gè)問(wèn)題, 筆者獲得的是精確解, 模型并沒(méi)有引入誤差, 在第四個(gè)問(wèn)題中,由于路徑函數(shù)并不是連續(xù)函數(shù),其函數(shù)一階導(dǎo)數(shù)并不是連續(xù)的,因此難以使用微分方法獲得精確解,筆者先是使用連續(xù)函數(shù)對(duì)路徑函數(shù)做了近似, 然后利用Mathematica的數(shù)學(xué)工具獲得了問(wèn)題的近似解, 如果問(wèn)題對(duì)精度有進(jìn)一步要求, 是可以使用更為復(fù)雜的微分算法來(lái)獲得問(wèn)題更加精確的解的. 第五個(gè)問(wèn)題作者使用了幾個(gè)假設(shè), 利用函數(shù)以及假設(shè)一些條件,綜合玩家的心理分析的出游戲時(shí)間為2分鐘,玩家每秒操作一次較好,排布方案為7個(gè)能量球與6個(gè)障礙球交叉排列即可。
參考文獻(xiàn):
[1] 張偉新. 排列組合問(wèn)題的基本解法[J]. 中等數(shù)學(xué), 2005(1):6-9.
[2] 鄭慶玉, 郭政. 數(shù)學(xué)分析方法[M]. 電子工業(yè)出版社, 2010.
[3] 陳成明, 王慧, 周健,等. VDT視覺(jué)疲勞及其測(cè)量方法綜述[J]. 人類(lèi)工效學(xué), 2013, 19(2):92-95.
[4] Wolfram Research, Inc., Mathematica, Version 9.0, Champaign, IL
【通聯(lián)編輯:梁書(shū)】