枚举中的变量不会设置为其他值

时间:2015-06-20 23:30:48

标签: java enums

所以我正在制作这个游戏,每当"攻击"单击按钮,敌人和玩家失去健康。玩家可以治愈,但当他与怪物进行另一场战斗时,怪物的生命值仍为0或1,同时玩家的生命值会得到治疗。我试图找到一种方法来修复它,但它仍然无法正常工作。任何解决方案?

(对不起,如果我的代码很草率。我认为不需要Panel或Label类。)

主要班级:

public static void mainScreen(JPanel p)
{
    JButton points = new JButton("stats");
    points.setLayout(null);
    points.setBounds(smallButton);
    points.setLocation(510, 5);
    points.addActionListener(new ActionListener()
    {
          public void actionPerformed(ActionEvent e)
          {
              p.removeAll();
              pointsScreen(p);
              p.repaint();
          }
        });
    JButton battle = new JButton("battle");
    battle.setLayout(null);
    battle.setBounds(smallButton);
    battle.setLocation(510, 30);
    battle.addActionListener(new ActionListener()
    {
          public void actionPerformed(ActionEvent e)
          {
              Battle b = new Battle(strpoints, defpoints, luckpoints, health, currentHealth);
              p.removeAll();
              p.add(battle);
              battleScreen(p,b);
              p.repaint();
          }
        });
    p.add(battle);
    p.add(points);
}

public static void battleScreen(JPanel p, Battle b)
{
    Random r = new Random();
    Label enemy = new Label("You've encountered a "+b.e.getName()+"!",200,20, new Dimension(200,30), Color.YELLOW);
    p.add(enemy); // enemy encountered

    Label enemyHp = new Label("Health: "+b.e.getCurrentEnemyHp()+"/"+b.e.getEnemyHp(),500,100, new Dimension(100,25), Color.GREEN);
    p.add(enemyHp); // enemy's hp
    Label enemySt = new Label("Strength: "+b.e.getStr(),500,125, new Dimension(100,25), Color.ORANGE);
    p.add(enemySt); // enemy's str
    Label enemyDf = new Label("Defence: "+b.e.getDef(),500,150, new Dimension(100,25), Color.CYAN);
    p.add(enemyDf); // enemy's def
    Label enemyloot = new Label("Loot: "+(b.e.getLoot()+r.nextInt(luckpoints + 1)),500,175, new Dimension(100,25), Color.YELLOW);
    p.add(enemyloot); // enemy's loot

    Label hp = new Label("Health: "+currentHealth+"/"+health,0,100, new Dimension(100,25), Color.GREEN);
    p.add(hp); // player hp
    Label str = new Label("Strength: "+strpoints,0,125, new Dimension(100,25), Color.ORANGE);
    p.add(str); //player str
    Label def = new Label("Defence: "+defpoints,0,150, new Dimension(100,25), Color.CYAN);
    p.add(def); //player def

    Label activity = new Label("What's your next move?",0,340, new Dimension(620,35), Color.WHITE);

    p.add(activity); // battle activity feed

    Label enemyImg = new Label(null, 390, 100, new Dimension(100,100), null);
    enemyImg.setIcon(b.e.getImage());
    p.add(enemyImg); // picture of the enemy

    Label img = new Label(null, 110, 100, new Dimension(100,100), null);
    img.setIcon(new ImageIcon("src\\player.png"));
    p.add(img); // picture of the player


    JButton done = new JButton("done");
    done.setLayout(null);
    done.setBounds(smallButton);
    done.setLocation(420, 280);
    done.addActionListener(new ActionListener()
    {
          public void actionPerformed(ActionEvent e)
          {
              p.removeAll();
              p.repaint();
              if(currentHealth <= 0)
              {
                  if(activity.getText().contains("been"))
                  {
                    strpoints = 0;
                    defpoints = 0;
                    luckpoints = 0;
                    freepoints = 10;
                    gold = 100;
                    health = 10;
                    currentHealth = 10;
                  }

                    p.removeAll();
                    pointsScreen(p);
                    p.repaint();
                    p.add(activity);
                    p.remove(activity);
              }
              else
                  mainScreen(p);

          }
        });



    JButton attack = new JButton("attack");
    attack.setLayout(null);
    attack.setBounds(smallButton);
    attack.setLocation(100, 280);
    attack.addActionListener(new ActionListener()
    {
          public void actionPerformed(ActionEvent e)
          {
              int dmg2player = b.e.getStr() + r.nextInt(2) - defpoints/2;
              if(dmg2player < 1)
                  dmg2player = 1;
              int dmg2enemy = strpoints + r.nextInt(2) - b.e.getDef()/2;
              if(dmg2enemy < 1)
                  dmg2enemy = 1; // calculates damage dealt by you and enemy


              b.e.updateEnemyHp(dmg2enemy);
              currentHealth = currentHealth - dmg2player; 
              hp.setText("Health: "+currentHealth+"/"+health);
              enemyHp.setText("Health: "+b.e.getCurrentEnemyHp()+"/"+b.e.getEnemyHp()); //updates player and enemy's current hp


              activity.setText("You dealt "+dmg2enemy+" damage to "+b.e.getName()+" and you received "+dmg2player+" damage!"); //updates battle log


              if(currentHealth <= 0)
              {
                  p.removeAll();
                  activity.setText("You have been defeated by a "+b.e.getName()+"!");
                  p.add(done);
                  p.add(activity);
                  p.repaint();
                  b.e.resetHp();
              } // happens whenever the player is ded as fuk
              else if(b.e.getCurrentEnemyHp() <= 0)
              {
                  gold = gold + b.e.getLoot();
                  freepoints = freepoints + (b.e.getLoot()/10);
                  p.removeAll();
                  activity.setText("You have defeated the "+b.e.getName()+" and earned "+b.e.getLoot()+" gold along with "+(b.e.getLoot()/10)+" points!");
                  p.add(done);
                  p.add(activity);
                  p.repaint();



              } // happens when the enemy is ded as fuk

              else
              {
                  p.remove(hp);
                    p.remove(enemyHp);
                    p.remove(activity);
                    p.add(hp);
                    p.add(enemyHp);
                    p.add(activity);
                    p.repaint();
              } // happens when nobody is ded as fuk

          }
        });
    p.add(attack);

    JButton flee = new JButton("flee (" + (b.e.getLoot()/2)+"g)");
    flee.setLayout(null);
    flee.setBounds(new Rectangle(120,20));
    flee.setLocation(420, 280);
    flee.addActionListener(new ActionListener()
    {
          public void actionPerformed(ActionEvent e)
          {

              if(gold > b.e.getLoot()/2)
              {
                  gold = gold - (b.e.getLoot()/2);
                  p.removeAll();
                  mainScreen(p);
              } else 
              {
                  activity.setText("You need "+b.e.getLoot()/2+" gold to escape!");
                  p.remove(activity);
                  p.add(activity);
              } 

              p.repaint();


          }
        });
    p.add(flee);


}

战斗班。

public class Battle
{
    int str;
    int def;
    static int luck;
    int hp;
    int currenthp;
    Enemy e;


    public Battle(int s, int d, int l,int hp, int chp)
    {
        this.hp = hp;
        Random r = new Random();

        currenthp = chp;
        str = s;
        def = d;
        luck = l;

        switch(r.nextInt(5))
        {
        case 0: e = Enemy.rat;
        return;
        case 1: e = Enemy.hunter;
        return;
        case 2: e = Enemy.wolf;
        return;
        case 3: e = Enemy.troll;
        return;
        case 4: e = Enemy.demon;
        return;
        }
    }

}

敌人类:

import javax.swing.ImageIcon;


    public class Enemy {

        public static final Enemy rat = new Enemy("Rat", 2, 2, 10, 10, new ImageIcon("src\\rat.png"));
        public static final Enemy hunter = new Enemy("Hunter", 4, 4, 20, 25, new ImageIcon("src\\hunter.png"));
        public static final Enemy wolf = new Enemy("Wolf", 5, 3, 15, 40, new ImageIcon("src\\wolf.png"));
        public static final Enemy troll = new Enemy("Troll", 4, 7, 30, 75, new ImageIcon("src\\troll.png"));
        public static final Enemy demon = new Enemy("Demon", 6, 6, 25, 100, new ImageIcon("src\\demon.png"));

        private String name;
        private int estr;
        private int edef;
        private int ehp;
        private int gold;
        private int ecHp;
        private ImageIcon img;

        Enemy(String n, int s, int d, int h, int g, ImageIcon i)
        {
            name = n;
            estr = s;
            edef = d;
            ehp = h;
            gold = g;
            ecHp = h;
            img = i;
        }

        public void updateEnemyHp(int dmg)
        {
            ecHp = ecHp - dmg;
        }

        public int getCurrentEnemyHp()
        {
            return ecHp;
        }

        public int getEnemyHp()
        {
            return ehp;
        }


    public int getStr()
    {
        return estr;
    }

    public int getDef()
    {
        return edef;
    }


public ImageIcon getImage()
{
    return img;
}

public int getLoot()
{
    return gold;
    }

        public String getName() {
            return name;
        }


    public void resetHp() {
        ecHp=ehp;

    }
    }

2 个答案:

答案 0 :(得分:1)

更改enum Enemy的第一部分:

public class Enemy {

    public static final Enemy rat = new Enemy("Rat", 2, 2, 10, 10, new ImageIcon("src\\rat.png"));
    public static final Enemy hunter = new Enemy("Hunter", 4, 4, 20, 25, new ImageIcon("src\\hunter.png"));
    public static final Enemy wolf = new Enemy("Wolf", 5, 3, 15, 40, new ImageIcon("src\\wolf.png"));
    public static final Enemy troll = new Enemy("Troll", 4, 7, 30, 75, new ImageIcon("src\\troll.png"));
    public static final Enemy demon = new Enemy("Demon", 6, 6, 25, 100, new ImageIcon("src\\demon.png"));
    // same as before
}

答案 1 :(得分:-1)

我找到了解决办法!这是我的一个愚蠢的错误,但我在敌人中制定了一个方法来重置敌人的hp

    public void resetHp() {
    ecHp=ehp;

}

但是在赢得一场战斗之后,我实际上并没有打电话给这个方法......只有在我被击败时才会被召唤

              if(currentHealth <= 0)
          {
              p.removeAll();
              activity.setText("You have been defeated by a "+b.e.getName()+"!");
              p.add(done);
              p.add(activity);
              p.repaint();
              b.e.resetHp();
          } // happens whenever the player is ded as fuk
          else if(b.e.getCurrentEnemyHp() <= 0)
          {
              gold = gold + b.e.getLoot();
              freepoints = freepoints + (b.e.getLoot()/10);
              p.removeAll();
              activity.setText("You have defeated the "+b.e.getName()+" and earned "+b.e.getLoot()+" gold along with "+(b.e.getLoot()/10)+" points!");
              p.add(done);
              p.add(activity);
              p.repaint();



          } // happens when the enemy is ded as fuk

感谢大家的回复!