Java命中公式

时间:2011-04-23 18:05:05

标签: java

我正在制作一个简单的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。 你看到我能改进我的命中公式吗?

2 个答案:

答案 0 :(得分:4)

首先,这会在game-dev上更好,因为这与编程无关。

但是没关系。

在我之后重复:游戏平衡很难,并且比编程需要更多的时间。

再次

游戏平衡很难,并且比编程需要更多时间。

好的,现在已经钻进了你的头脑,你可以使用几种工具。

你有三个主要组成部分来制作过度的东西。

  1. 攻击者扩大伤害的能力。
  2. 防御者能够缩小伤害。
  3. 在输掉战斗之前,后卫可以承受的伤害量。
  4. 平衡游戏的一种(便宜)方式是简单地扩大(或降低)玩家的健康状况。这是非常有效的,但是当你加入治疗时会失去它的力量(因为那时你必须以不同的方式扩大治疗效果。)

    以下是我解决游戏平衡问题的方法。我知道一些我知道的事情对我来说是不变的。

    1. X级别的人应该在90%的时间内赢得X + 2等级(假设技能相同)。
    2. 两个X级玩家之间的战斗平均应该持续90秒。
    3. 与龙/老板的斗争最少需要3-4分钟。
    4. 然后向后工作以达到攻击力,伤害等的公式。

答案 1 :(得分: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);
    }
}