遊戲數值策劃-二分法

最近在做一個遊戲的最終boss,因為要平衡各種東西,比如難度,需要對不少地方的數值進行調整,其中我用了一個非常方便而且簡單的方法輔助調整 --- 二分法

當然平衡是一直在調整的,不是做完之後對所有東西調整,那樣完工之後的工作量未免太大了,比如在做最終boss登場的時候,要考慮到最終boss開場動畫的時長,以及最終boss最後要出現在什麼地方,還有包括最終boss的大小之類的數值都要進行調整。以大小為例,比如現在的大小是原素材尺寸的2x,而我覺得太小了,那麼就先放大到4x看看效果,如果覺得還是太小了,那麼就調整到8x,如果覺得太大了,那麼就取中間值,4 + (8 - 4)/2 = 6,這個時候大概到差不多滿意的時候了。如果是一倍一倍的調整,我們需要調整一共6 - 2 = 4次,用剛才的方法我們只調整了3次。當然會有更多其他的情況,或許用二分法我們能節省更多的次數。

包括對血量的調整也是一樣的,比如玩家對boss的傷害是1,boss某一個階段有20血,如果覺得打的太快了我們可以對玩家的傷害縮短一半,即0.5,又或者是對boss血量增加至原來的兩倍,然後如果還有不符的情況再進行調整。不過要注意的是,如果一個數值對另一些數值有一定的聯絡,那麼在調整的時候一定要注意,另一批數值是否也需要做對應的調整,或者通過調整這一個數值是否能達成更理想的目標。還是玩家的例子,假如玩家對這個敵人造成的傷害和對其他敵人造成的傷害是同一個變數。

那麼對這個變數進行調整會不會影響玩家打其他敵人的體驗?它是更好還是更壞?

同時,為了方便後續的調整,在寫程式碼的時候最好留出多餘的介面,方便對數值進行調整,最常見的方法是建立一個變數,然後後續寫程式碼的時候都對這個變數進行操縱,下面用lua做個簡單的例子

-- 有變數的情況 local speed = 100 local playerX, playerY = 100, 100 local segment, radius = 5, 10 function love.update(dt) if love.keyboard.isDown("up") then playerY = playerY - speed*dt end end function love.draw() love.graphics.circle("fill", playerX, playerY, radius, segment) end -- 沒有變數的情況 local playerX, playerY = 100, 100 function love.update(dt) if love.keyboard.isDown("up") then playerY = playerY - 100*dt end end function love.draw() love.graphics.circle("fill", playerX, playerY, 5, 10) end

如果玩家的速度過快,那麼第一種情況下我們可以直接對speed變數進行調整,變數名很直觀,我們能快速調整,如果後面多段程式碼用到了speed變數,那麼我們的工作會比第二種情況輕鬆不少,第二種情況下,如果要調整一個地方,可能連著多個地方要一起調整。所以很多情況下,我們寫的程式碼邏輯部分比起成堆的數字,應該是成堆的變數名出現的更多,如果你的程式碼中出現的是成堆的數字,或許要好好思考一下是否需要優化自己的程式碼。

(又水了一篇~)

隨便看看 更多