RPG游戏代码错误

时间:2018-01-21 03:53:35

标签: java

我的代码中一直出现此错误。有人可以解决它,代码是如何编写的?可以通过仅使用setter和getter进行改进吗?

Exception in thread "main" java.lang.NullPointerException
at Player.attack(Player.java:72)
at Main.main(Main.java:15)

我的代码: Player.java

public class Player {
String name;
String race;
int hp;
int power;
int armour;
Weapon weapon;


public Player (String n, String r, int h, int p, int a) {
name = n;
race =r;
hp =  h;
power = p;
armour = a;


}

public void setName (String n) {

name = n;
}

public String getName() {
return name;
}
public void setRace (String r) {
race = r;
}
public String getRace() {
return race;
}
public void setHP (int h) {
hp = h;
}
public int getHP() {
return hp;
}
public void setPower (int p) {
power = p;
}
public int getPower() {
return power;
}
public void setArmour (int a) {
armour = a;
}
public int getArmour() {
return armour;
}

public boolean dead() {
return hp <= 0;
}
public boolean equip(Weapon weapon) {
this.weapon = weapon;
return true;
}
public boolean receiveDamage(int i) {
if ((hp - i) > 0) {
    hp = hp - i;
    return true;
    }
hp = 0;
return false;

}
public boolean attack(Player player) {

return player.receiveDamage(weapon.useWeapon());

}
}

Main.java

public class Main {
public static void main(String args[]) {
Player Mensch = new Player("Mensch", "Mensch", 85, 12, 10);
Player Ork = new Player("Shrek", "Ork", 50, 14, 6);

Weapon MenschW = new Weapon("mächtiges Schwert", 15, 100);
Weapon OrkW = new Weapon("große Axt", 7, 100);

Mensch.equip(Mensch.weapon);
Ork.equip(Ork.weapon);

while (!Mensch.dead() && !Ork.dead() ) {    //Alternativ: for (player hp >=0)

    System.out.println("Mensch gegen Ork " + Mensch.attack(Ork));

    if (Mensch.dead() || Ork.dead()) {
        break;
    }

    System.out.println("Mensch gegen Ork " + Ork.attack(Mensch));
}

System.out.println("Ork ist tot: " + Ork.dead());
System.out.println("Mensch ist tot: " + Mensch.dead());

}

}

Weapon.java

import java.util.concurrent.ThreadLocalRandom;
public class Weapon {
String name;
int damage;
int hp;

public Weapon(String string, int d, int hp) { 
    // TODO Auto-generated constructor stub
} 
public void setName (String n) {
    name = n;
}
public String getName() {
    return name;
}
public void setDamage (int d) {
    damage = d;
}
public int getDamage() {
    return damage;
}
public void setWHP (int h) {
    hp = h;
}
public int getWHP() {
    return hp;
}





public int useWeapon() { 
    if 
    (broken())
        return 0;
    hp = hp - 5;
    return (damage / 2) + random();
}
private int random() {
    return ThreadLocalRandom.current().nextInt(1, damage + 1);
}

private boolean broken() {
    return hp <= 0;
}
}

我知道它的代码很多,但我一直都会遇到同样的错误,而且我对java也很陌生,所以我会很感激一些提示或建议,以使我的代码更好或更多失败。代码还没有做太多但是它(希望)很快会成为一个简单的游戏,其中两个角色互相争斗,并对每个玩家的损失输出进行一些计算。在这种情况下,人类和Ork。随意尝试一下

1 个答案:

答案 0 :(得分:0)

更改

Mensch.equip(Mensch.weapon); // Mensch.weapon is not initialized in constructor so it is null.
Ork.equip(Ork.weapon); // Ork.weapon is not initialized in constructor so it is null as well.

// Use your newly created weapons in the main instead.
Mensch.equip(MenschW ); 
Ork.equip(OrkW);