2011-04-23 88 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); 
    } 
}