廣東圓心科技網(wǎng)站開發(fā)如何用網(wǎng)站模板建站
?游戲平衡很重要,然而,卻往往得不到開發(fā)者的重視?;蛘?#xff0c;沒有花時(shí)間仔細(xì)去做調(diào)整。
做過游戲開發(fā)的,都聽說過一個(gè)詞叫“數(shù)值爆炸”,實(shí)際上就是平衡沒做好。
怎么樣才能算是平衡呢?
玩家投入游戲的有兩個(gè),要么投入時(shí)間(提高熟練度),要么氪金(提高強(qiáng)度)。
讓用戶的投入,能通過某種方式體現(xiàn)出來,就是個(gè)好的平衡。
而作為開發(fā)者應(yīng)該對(duì)玩家投入的時(shí)間,特別是首次、單次游戲的時(shí)間有所計(jì)劃。
以前娛樂較少的時(shí)候,游戲首次、單詞投入的時(shí)間能達(dá)到30分鐘,而現(xiàn)在有個(gè)5分鐘就不錯(cuò)。哪怕是3A大作,如果不能讓玩家5分鐘內(nèi)上手,往后就難了。
現(xiàn)代游戲開發(fā)有個(gè)指標(biāo),策劃讓新玩家內(nèi)測,他會(huì)希望 N% 的用戶能夠玩到 N 分鐘。
比如2048游戲,希望80%的用戶能合成到128,
比如Flepybird 游戲,希望80%的用戶能飛10米。
比如羊了個(gè)羊 游戲,希望0.0001%的用戶能通過第二關(guān)。
你必須要有類似這個(gè)目標(biāo),才能去調(diào)游戲數(shù)值。
這個(gè)題目很大,展開了都能開專題了。所以這里只是一個(gè)引子,希望大家重視。
回歸本游戲,游戲平衡怎么做?
既然這是個(gè)非氪金游戲,那么就要讓用戶熟練度在游戲中有所體現(xiàn)。我們希望,80%用戶能玩到5分鐘,就很難再繼續(xù)前進(jìn)了。
首先第一個(gè)平衡是玩家火力和敵人的平衡。
敵人的總血量要考量幾個(gè)因素:
-》單敵人單位的血量
-》敵人出現(xiàn)間隔
而玩家火力包括常規(guī)攻擊方式和道具傷害。或者你可以理解為持續(xù)傷害和爆發(fā)傷害。
我們應(yīng)該讓他處于一種狀態(tài):玩家熟練度高時(shí),可以干掉所有敵機(jī),熟練度不足時(shí),就要放過一部分?jǐn)硻C(jī)。簡單做個(gè)乘除法就可以得到。
另一個(gè)平衡是玩家血量和敵機(jī)火力的平衡。
敵機(jī)火力于幾個(gè)因素:
-》敵機(jī)生成密度
-》敵機(jī)開火密度
-》敵機(jī)子彈傷害
以上所有的這些東西,我們前面都是有數(shù)值控制的。
現(xiàn)在我們要做的是:
1、把這些數(shù)值都抽出來,放在統(tǒng)一的地方,以方便修改
。。。
#define PlayerMaxLife 12000
#define EnamyMaxLife 1000
#define EnemyBulletDam 400
#define EnemyRocketDam 2000
#define PlayerBulletDam 400
。。。
2、調(diào)整這些數(shù)值,看看每個(gè)數(shù)值對(duì)游戲影響,特別是確定每個(gè)數(shù)值的合理范圍。這很重要,也很花時(shí)間。
3、用變量來代替這些數(shù)值,隨著時(shí)間的進(jìn)行,自動(dòng)修改參數(shù)提高難度。
我們期望的效果是,在5分鐘里我們讓玩家:
1、前兩分鐘輕松打怪,積攢道具
2、中間兩分鐘有點(diǎn)扛不住,必須依靠道具才能繼續(xù)
3、道具補(bǔ)充的速度趕不上消耗的速度,試圖通過躲閃節(jié)省道具使用(通過這個(gè)階段驅(qū)動(dòng)玩家提高熟練度)
4、道具用完了,迅速崩潰
最終,我決定采用每分鐘出現(xiàn)一次BOSS,出現(xiàn)BOSS時(shí),縮小其他敵機(jī)出現(xiàn)的頻率。
uint8_t EnemyManager::tick(uint32_t t) {if (createTimer.tick(t)) {EnemyBase *enemy = createEnemyObject();enemy->init();ListPushBack(enemyList, (LTDataType) enemy);}if (createBossTimer.tick(t)) {createTimer.defaultSpan -= 200;EnemyBase *enemy = new EnemyT3();enemy->init();ListPushBack(enemyList, (LTDataType) enemy);}for (ListNode *cur = enemyList->next; cur != enemyList; cur = cur->next) {EnemyBase *enemy = ((EnemyBase*) (cur->data));enemy->tick(t);}return 0;
}
這樣,每過一分鐘,敵機(jī)出現(xiàn)間隔少200ms。難度也隨之增加了。
STM32學(xué)習(xí)筆記二十一:WS2812制作像素游戲屏-飛行射擊游戲(11)探索游戲腳本