Java命中公式

Java命中公式,java,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 Deci

我正在做一个简单的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);
}


}
import java.lang.Math.*;
导入java.util.*;
导入java.text.*;
公共类可扩展{
公共静态void main(字符串[]args){
int myLevel=6;
int-myAttack=6;
int=1;
DecimalFormat df=新的DecimalFormat(“#####,###,###,##”);
int rawr=怪物公式(我的等级,我的攻击,我的防御);
System.out.println(“在+myLevel+”级别,你为“+df.format(rawr)+”攻击点”而命中);
}
公共静态整数公式(整数e,整数myAttack,整数myDefense){
int-xTotal=0;

对于(inti=1;i首先,这在游戏开发中会更好,因为这与编程无关

但没关系

跟我重复一遍:游戏平衡很难,而且需要比编程更多的时间

再说一遍

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

好吧,既然它已经钻到你的脑袋里了,你确实有一些工具可以使用

你有三个主要的组成部分,以什么是压倒

  • 攻击者扩大输出伤害的能力
  • 防御者降低伤害的能力
  • 防御者在战斗失败前所能承受的伤害
  • 平衡游戏的一个(便宜的)方法是简单地增加(或减少)玩家的健康。这是非常有效的,但是当你加入治疗时,它会失去力量(因为你必须以不同的方式来调整治疗)

    下面是我解决游戏平衡问题的方法。我接受一些我知道对我来说是不变的东西

  • X级的人应该在90%的时间里战胜X+2级(假设技能相同)
  • 两名X级玩家之间的战斗平均持续90秒
  • 与龙/老板搏斗至少需要3-4分钟

  • 然后反向计算攻击强度、伤害等的公式。

    首先,这在游戏开发中会更好,因为这与编程无关

    但没关系

    跟我重复一遍:游戏平衡很难,而且需要比编程更多的时间

    再说一遍

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

    好吧,既然它已经钻到你的脑袋里了,你确实有一些工具可以使用

    你有三个主要的组成部分,以什么是压倒

  • 攻击者扩大输出伤害的能力
  • 防御者降低伤害的能力
  • 防御者在战斗失败前所能承受的伤害
  • 平衡游戏的一个(便宜的)方法是简单地增加(或减少)玩家的健康。这是非常有效的,但是当你加入治疗时,它会失去力量(因为你必须以不同的方式来调整治疗)

    下面是我解决游戏平衡问题的方法。我接受一些我知道对我来说是不变的东西

  • X级的人应该在90%的时间里战胜X+2级(假设技能相同)
  • 两名X级玩家之间的战斗平均持续90秒
  • 与龙/老板搏斗至少需要3-4分钟

  • 然后倒转得出攻击力、伤害等的公式。

    我不知道你想要这个公式给你什么,这是非常特别的

    下面是我如何测试它的:

    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);
        }
    }
    
    包装破损;
    导入java.text.DecimalFormat;
    公共级怪物
    {
    公共静态void main(字符串[]args)
    {
    DecimalFormat df=新的DecimalFormat(“#####,###,###,##”);
    int maxLevel=10;
    
    对于(int-level=1;level我不知道你想要这个公式给你什么,这是非常特别的

    下面是我如何测试它的:

    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);
        }
    }
    
    包装破损;
    导入java.text.DecimalFormat;
    公共级怪物
    {
    公共静态void main(字符串[]args)
    {
    DecimalFormat df=新的DecimalFormat(“#####,###,###,##”);
    int maxLevel=10;
    
    对于(int level=1;等级提升?我不确定我是否理解你在说什么。你想在这里做什么?我讨厌看到像这样充满神奇数字的代码。这不是一个好迹象。同意@duffymo。你能给我们提供更多细节吗?每个等级的可接受命中值是多少等。你为什么对此不满意你把它太复杂了?例如,5级,你完成了。改进了吗?我不确定我是否理解你在说什么。你想在这里做什么?我讨厌看到像这样充满神奇数字的代码。这不是一个好迹象。同意@duffymo。你能给我们更多的细节吗?每个级别可以接受的命中值是多少等等。你为什么对此不满意?也许你把它复杂化了太多?例如,等级/5,你完成了。谢谢你的这篇信息性文章。一个问题:oyu所说的增加(或减少)一个玩家的健康是什么意思?好吧,不要用你造成的伤害“20分,30分”来考虑伤害以防御者的生命百分比来衡量。假设你希望怪物的平均战斗时间为20秒,每3秒命中一次。这大约是7次命中,所以你应该确保每次命中都是怪物生命值的14%。如果你发现命中率通常为20%,那么你只需给怪物更多的生命值。如果你发现命中率是我们通常情况下,你只给怪物少10%的生命值。谢谢你的这篇信息性文章。一个问题:oyu增加(或减少)一个玩家的生命值是什么意思?好吧,不要用“20点,30点”来考虑伤害以防御者的生命百分比来衡量。假设你希望怪物的平均战斗时间为20秒,每3秒命中一次。这大约是7次命中,所以你应该确保每次命中都是怪物生命值的14%。如果你发现命中率通常为20%,那么你只需给怪物更多的生命值。如果你发现命中率是我们艾尔