用Java创建数字作战系统后端

用Java创建数字作战系统后端,java,oop,Java,Oop,我一直在尝试调试这个简单的战斗系统,我一直在尝试实现。我处于一个非常基本的级别,并且已经制作了一个调试主文件来找出问题的根源。 我创建的主要作战功能包括: package great; import great.Player; import java.util.Scanner; public class battleFunc { public static void start(Player pLayer, Player Enemy){ while(pLayer.ge

我一直在尝试调试这个简单的战斗系统,我一直在尝试实现。我处于一个非常基本的级别,并且已经制作了一个调试主文件来找出问题的根源。 我创建的主要作战功能包括:

package great;
import great.Player;
import java.util.Scanner;

public class battleFunc {

    public static void start(Player pLayer, Player Enemy){
        while(pLayer.getHealth() > 0 || Enemy.getHealth() > 0){
            String result = askPlayer();

            if(result.equals("Defend")){
                playerDefend(pLayer, Enemy);
            }

            if(result.equals("Hit")){
                playerHit(pLayer, Enemy);
            }

            EnemyHit(pLayer, Enemy);
        }
    }

    public static String askPlayer(){
        String x;
        Scanner scanner = new Scanner(System.in);

        System.out.println("What will you do?");
        x = scanner.nextLine();

        return x;
    }

    public static void reportEnemyHealth(Player Enemy){
        System.out.println(Enemy.getName() + "'s health is: " + Enemy.getHealth());
    }

    public static void reportPlayerHealth(Player pLayer){
        System.out.println(pLayer.getName() + "'s health is: " + pLayer.getHealth());
    }

    public static int reportPlayerHit(Player pLayer, Player Enemy){
        int x = pLayer.getStrength() - Enemy.getDefense();
        return x;
    }

    public static void reportEnemyHit(Player pLayer, Player Enemy){
        System.out.println(Enemy.getName() + " hit for " + (Enemy.getStrength() - pLayer.getDefense()));
    }

    public static void playerDefend(Player pLayer, Player Enemy){
        int x = Enemy.getStrength() - (pLayer.getDefense() + 1);

        if (x <= 0) {x = 0;}

        pLayer.setHealth(pLayer.getHealth() - x);
        reportEnemyHit(pLayer, Enemy);
    }

    public static void playerHit(Player pLayer, Player Enemy){
        int x = pLayer.getStrength() - Enemy.getDefense();

        if (x <= 0){x = 0;}

        Enemy.setHealth(4);
        reportPlayerHit(pLayer, Enemy);
    }

    public static void EnemyHit(Player pLayer, Player Enemy){
        int x = Enemy.getStrength() - pLayer.getDefense();

        if (x <= 0){x = 0;}

        pLayer.setHealth(pLayer.getHealth() - x);
        reportEnemyHit(pLayer, Enemy);
    }
}
我用来测试代码的主文件:

package great;
import great.Player;
import great.battleFunc;

public class MainG {

    public static void main(String[] args) {
        Player guy = new Player("Deez Nuts");
        guy.setHealth(20);
        guy.setStrength(7);
        guy.setDefense(2);
        Player fuckboi = new Player("Fuckboi");
        fuckboi.setHealth(10);
        fuckboi.setStrength(3);
        fuckboi.setDefense(1);

        battleFunc.start(guy, fuckboi);
    }
}
当主文件运行时,所有攻击值返回并打印为0,并且不会删除任何运行状况。为什么会这样?

这种方法:

public void setDefense(int x){
    x = defense;
}

不会将玩家的防御设置为x,但会将x设置为玩家的防御。只需将
x
defense
交换,值应正确更新。这同样适用于
设置强度(…)
。数学返回0的原因很简单,就是两个玩家的力量和防御都是0。

在battlefunc
while(pLayer.getHealth()>0 | |敌军.getHealth()>0)
应该是和,而不是或。使用或将继续战斗,直到玩家和敌人的生命值均为0。发生的情况是,由于某种原因调用playerHit()时,在数学中返回0。这适用于我创建的所有其他命中和防御方法。因此,当打印回HP时,没有消耗任何HP,因为所有值都返回0非常感谢。我可能应该更仔细一点。我觉得有点经验不足,不过还是要谢谢你。干杯@DattManiels NP:)那只是时间和训练的问题
public void setDefense(int x){
    x = defense;
}