试图在分数增量为500的情况下提高我的游戏速度,但是我的if语句太多了。

时间:2015-08-28 19:11:30

标签: java

在我的代码中,每当变量得分比第一次多500时,变速就需要增加。因此,当得分为500时:speed++。得分为1000时:再次speed++,依此类推。

这是我的代码:

import java.awt.*;

public class Enemy {
    static int x = -100;
    static int y = -100;
    Player player;
    private int enemy_xspeed = 0;
    private int enemy_yspeed = 0;
    private int speed = 0;

    public Enemy(Player player) {
        this.player = player;
    }

    public void update(){
        if(Player.getX() < x){
            enemy_xspeed = -2 - speed;
        }
        if(Player.getX() > x){
            enemy_xspeed = 2 + speed;
        }
        if(Player.getY() > y){
            enemy_yspeed = 2 + speed;
        }
        if(Player.getY() < y){
            enemy_yspeed = -2 - speed;
        }   

        x += enemy_xspeed;
        y += enemy_yspeed;
    }

    public void scoreMethod(){
        //THIS BLOCK OF CODE BELOW TAKES TOO MANY LINES I NEED THIS HERE WRITTEN IN NOT MANY LINES
        if(GameClass.score == 500){
            speed ++;
        }
        if(GameClass.score == 1000){
            speed ++;
        }
        if(GameClass.score == 1500){
            speed ++;
        }
        if(GameClass.score == 2000){
            speed ++;
        }
        if(GameClass.score == 2500){
            speed ++;
        }
        if(GameClass.score == 3000){
            speed ++;
        }
        if(GameClass.score == 3500){
            speed ++;
        }
        if(GameClass.score == 4000){
            speed ++;
        }
        if(GameClass.score == 4500){
            speed ++;
        }
    }

    public void paint(Graphics g){
        g.setColor(Color.ORANGE);
        g.fillRect(x, y, 20, 20);
    }
}

1 个答案:

答案 0 :(得分:10)

这个答案依赖于你的比赛得分只会增加的假设。

public void scoreMethod(){       
    if(GameClass.score % 500 == 0){
        speed++;
    }
}

这样做是检查游戏得分是否可以除以500而没有任何余数(就像你的if语句一样)。

但是,如果您的游戏分数可能会降低,则上述解决方案可能会对您的游戏设计产生负面影响:

  

得分480,
  分数490,
  得分500,速度提升(到2级)
  分数480,
  分数490,
  得分500,另一个速度增加(虽然现在我们在3级,当我们再次升级2级时)

在这种情况下,请考虑以下代码,该代码会跟踪速度上次增加的时间,从而阻止上述重复:

int lastSpeedIncrease = -1;  //class or 'global' variable
//initialize to -1 and not 0

public void scoreMethod(){               
    if(GameClass.score > lastSpeedIncrease){
        if(GameClass.score % 500 == 0){
            speed++;
            lastSpeedIncrease = GameClass.score;
        }
     }
}