我已经做了相当多的挖掘,似乎无法找到我想要的答案,我可能会问这个问题是错的,因为我非常苛刻。< / p>
无论如何,我试图建立一个简单的口袋妖怪风格的游戏进行练习,我似乎无法在战斗事件中让对手或玩家的生命值发生变化..
我有它所以你选择1.使用以下代码进行攻击:
if(select == 1){
System.out.println("You strike at the raccoon!");
System.out.println("You deal " + play1.atk + " damage!");
Math.subtract(raccoon1.hp, play1.atk);
Math.subtract类只是
public static int subtract(int x, int y){
return (x-y);
}
它从我从“对手”构建的对象中拉出raccoon1.hp。只有的课程:
public class Opponent {
public int hp = 5;
public int def = 0;
public int atk = 1;
}
播放器的设置方式相同。
我确定我只是缺少和/或做了一些愚蠢的事情,但对新程序员的帮助将不胜感激。
谢谢!
答案 0 :(得分:1)
Racoon1.hp = Math.subtract(raccoon1.hp, play1.atk)
您必须将返回值设置为raccoon.hp
,否则返回值毫无意义。
答案 1 :(得分:1)
这是一个适当的面向对象编程的问题。而不是根据变量来考虑它,而是从方法的角度思考它。不要试图直接操纵变量,尝试通过类完成的操作来操纵变量。
在你的情况下......
if(select == 1){
System.out.println("You strike at the raccoon!");
System.out.println("You deal " + play1.atk + " damage!");
//reduce the health by the current attack value of the player
racoon.reduceHealth(play1.getAttackValue());
在您的Pokemon
类中,或者您在创建新的Pokemon时实例化实例的类命名,创建一个这样的方法......
public void reduceHealth(int attackValue){
this.hp = this.hp - attackValue;
}
在你的Player
类中,或者你在创建新播放器时实例化该实例的那个类的任何名称,创建一个这样的方法......
public int getAttackValue(){
return this.atk;
}
这样,对象所做的操作是由它自己的类完成的,而不是其他类。获取信息时,请创建返回所需信息的方法。在操作对象的变量时,使用对象的方法来进行操作。
答案 2 :(得分:0)
我建议你这样的事情
public class Opponent {
public int hp = 5;
public int def = 0;
public int atk = 1;
public void attack(Opponent target){
target.hp -= atk;
}
}
你可以简单地做完
Opponent player = new Opponent ();
Opponent badGuy = new Opponent ();
player.attack(badGuy);