试图在Java中使用2个对象

时间:2015-09-05 23:03:37

标签: java class oop object methods

我的目标是让2个不同的对象互相争斗,并显示结果。我的问题是我无法弄清楚如何正确设置攻击和健康状况,以便它实际更新它所支持的方式。

import java.util.Random;
import java.util.Scanner;

/**
 *
 * @author Brenton
 */
public class Fighter {

    private String name;
    private int attack;
    private int level = 1;
    private int health = 50;
    private boolean isAlive = true;
    private Fighter fighterTwo;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAttack() {
        Random generator = new Random();
        attack = generator.nextInt(10) * level + 1;
        return attack;
    }

    public void setAttack(int attack) {
        this.attack = attack;
    }

    public int getLevel() {
        if(level >= 60)
        {
            level = 60;
        }
        return this.level;
    }

    public void setLevel(int level) {
        this.level = level;
    }

    public int getHealth() {
        if(this.health <= 0)
        {
            this.health = 0;
        }
        return this.health;
    }

    public void setHealth(int health) {
        this.health = health;
    }

    public boolean isAlive() {
        if(this.health <= 0)
        {
            this.isAlive = false;
        }
        return this.isAlive;
    }

    public static String getWelcome() {
        String welcome = "Hello and welcome to FightClub, do you wish to fight, yes or no? ";
        return welcome;
    }

    public String getPunch(Fighter fighterTwo) {
        this.fighterTwo = fighterTwo;
        String hit = "You choose to punch the other fighter and dealt " + getAttack() + " damage, your opponent now has " + this.decreaseHitPoints(fighterTwo) + " health remaining";
        return hit;
    }

    public int decreaseHitPoints(Fighter fighterTwo) {
        this.fighterTwo = fighterTwo;
        int health = fighterTwo.getHealth();
        int attack = getAttack();
        health = health - attack;
        return health;
    }

    public static String invalidInput() {
        String invalid = "I am sorry that is not a valid input option ";
        return invalid;
    }

    public void getWinner(Fighter fighterTwo) {
        this.fighterTwo = fighterTwo;
        if(this.isAlive() == false && fighterTwo.isAlive() == false)
        {
            System.out.println("Both fighters have fallen heroically");
        }
        else if(this.isAlive() == true && fighterTwo.isAlive() == false)
        {
            System.out.println(this.getName() + " is victorious! ");
        }
        else if(this.isAlive() == false && fighterTwo.isAlive() == true)
        {
            System.out.println(fighterTwo + " is victorious! ");
        }
        else
        {
            System.out.println("ERROR ERROR ERROR");
        }      
    }

    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);

        Fighter a = new Warrior();
        Fighter b = new Dragon();

        System.out.print(getWelcome());     
        while(in.hasNextLine()) 
        {
            switch(in.nextLine()) 
            {
                case "no":
                    System.out.println("Wow, you are not even gonna try, you have lost!");
                    break;
                case "yes":
                    System.out.println("Let the fight begin! ");
                    while(a.isAlive() && b.isAlive()) 
                    {
                        System.out.println("Do you want to punch, kick, or headbutt the other fighter? ");
                        switch(in.nextLine()) 
                        {
                            case "punch":
                                System.out.println(a.getPunch(b));
                                break;
                            /*case "kick":
                                System.out.println(a.getKick(b));
                                break;
                            case "headbutt":
                                System.out.println(a.getHeadbutt(b));
                                break;*/
                            default :
                                System.out.println(invalidInput());
                                break;
                        }
                    }
                default:
                    System.out.println(invalidInput());
                    break;  
            }//end of first switch statement
        }//end of first while loop
    }//end of main   
}

1 个答案:

答案 0 :(得分:1)

您正确计算攻击。你只是没有更新另一架战斗机的状态。

main()方法中,您使用

启动攻击
System.out.println(a.getPunch(b));

那很好。 ab处投掷一拳,然后打印出从getPunch()返回的生命值。因此,让我们深入研究getPunch()以试图找到问题。

getPunch()中,您最终会调用

this.decreaseHitPoints(fighterTwo)
构建返回String

。这似乎是正确的方法,所以decreaseHitPoints()中有问题吗?

public int decreaseHitPoints(Fighter fighterTwo) {
    this.fighterTwo = fighterTwo;
    int health = fighterTwo.getHealth();
    int attack = getAttack();
    health = health - attack;
    return health;
}

您将fighterTwo参数分配给fighterTwo字段。不知道为什么,但本身并没有错。然后,您将其健康状况转换为名为health的局部变量。然后你将攻击变成一个名为attack的局部变量。然后从attack中减去health,然后返回计算出的值。但是你永远不会更新fighterTwo的健康值!所以你只需要在你的程序中再添一行:在你的return语句之前插入

fighterTwo.setHealth(health);