2011-04-23 40 views
1

我正在做一個簡單的RPG遊戲,發現公式很難。到目前爲止,我甲肝這樣的:爪哇命中公式

import java.lang.Math.*; 
import java.util.*; 
import java.text.*; 

public class expTable { 

public static void main(String[] args) { 

int myLevel = 6; 
int myAttack = 6; 
int myDefense = 1; 
    DecimalFormat df = new DecimalFormat("###,###,###"); 
    int rawr = monsterFormula(myLevel, myAttack, myDefense); 


System.out.println("At level " +myLevel+ " you hit for " + df.format(rawr) + " attack points!"); 

} 


public static int monsterFormula(int e,int myAttack, int myDefense) { 

int xTotal = 0; 
for(int i=1; i<e; i++) { 
     xTotal += (int)Math.floor(i + myAttack * Math.pow(myDefense, (i/42.0))); 
    } 
     return (int)Math.floor(xTotal/8.0); 
} 


} 

但是......似乎與攻擊10壓倒,因爲在10級,你打了10 你看反正我可以提高我的命中公式?

+1

改進?我不確定我明白你在說什麼。你想在這裏做什麼?我討厭看到這樣的編號充斥着神奇數字的代碼。這不是一個好兆頭。 – duffymo 2011-04-23 18:08:30

+0

同意@duffymo你能否給我們提供更多的細節。什麼是每個級別可接受的命中值等等。爲什麼你對此不滿意,也許你太過於複雜了?例如。級別/ 5,你就完成了。 – Boro 2011-04-23 18:14:06

回答

4

首先,這在遊戲開發中會更好,因爲這不完全是編程相關的。

但是沒關係。

跟着我重複一遍:遊戲平衡很難,而且比編程需要更多的時間。

再次。

遊戲平衡很難,而且比編程需要更多的時間。

好吧,現在它已鑽進你的腦海,你確實有一些工具可供你使用。

你有三個主要組成部分是什麼被壓倒。

  1. 攻擊者放大傳出傷害的能力。
  2. 防禦者降低傳入傷害的能力。
  3. 防守者在失敗前可以承受的傷害數量。

平衡遊戲的一種(便宜)方法是簡單地放大(或縮小)玩家的健康。這是令人驚訝的效果,但是當你增加治療時失去它的力量(因爲那你必須以不同的方式縮放癒合。)

下面是我如何解決遊戲平衡問題。我知道一些我知道的東西對我來說是不變的。

  1. X級別的人在90%左右的時間內應該贏得X + 2級(假設同等技能)。
  2. 兩位X級玩家之間的戰鬥平均持續90秒。
  3. 對龍/老闆的戰鬥應該至少用3-4分鐘。

然後向後工作以達到攻擊力,傷害等的公式。

+0

謝謝你提供這個內容豐富的帖子。一個問題:oyu意味着放大(或縮小)球員的健康狀況是什麼意思? – nn2 2011-04-23 19:59:44

+0

好吧,不要以爲損害的程度來考慮你的傷害,「20分,30分」,而是根據%hp的防守者來考慮。假設你想讓平均怪物戰鬥持續約20秒,每3秒擊中一次。這大概有7個命中,所以你應該確保每個命中約爲怪物健康的14%。如果你發現命中率通常是20%,那麼你只需給怪物更多的生命值。如果你發現命中率通常是10%,你只需要給怪物更少的生命值。 – corsiKa 2011-04-23 20:12:15

0

我不知道你想要那個公式給你什麼;這是非常特設的。

以下是我想測試一下:

package cruft; 

import java.text.DecimalFormat; 

public class Monster 
{ 

    public static void main(String[] args) 
    { 
     DecimalFormat df = new DecimalFormat("###,###,###"); 
     int maxLevel = 10; 
     for (int level = 1; level <= maxLevel; ++level) 
     { 
      int maxAttack = 10; 
      for (int attack = 1; attack <= maxAttack; ++attack) 
      { 
       int maxDefense = 10; 
       for (int defense = 1; defense <= maxDefense; ++defense) 
       { 
        double points = monsterFormula(level, attack, defense); 
        System.out.printf("level: %2d attack: %2d defense: %2d points: %10.3f\n", level, attack, defense, points); 
       } 
      } 
     } 
    } 


    public static int monsterFormula(int level, int attack, int defense) 
    { 

     int xTotal = 0; 
     for (int i = 1; i < level; i++) 
     { 
      xTotal += (int) Math.floor(i + attack * Math.pow(defense, (i/42.0))); 
     } 
     return (int) Math.floor(xTotal/8.0); 
    } 
}