2

我目前正在构建一个小型 Asteroids 风格的游戏,供当地小学的孩子们使用。目的是帮助他们制定时间表。

一个随机生成的问题显示在屏幕上,(例如:6 * ? = 12),周围漂浮着许多带有数字的星星图像,等待被拍摄!你控制一艘船飞来飞去寻找正确的答案。

子弹与星星相撞,需要进行测试以查看用户是否射击了正确答案。

星星的文件名只是“1.png”、“2.png”等,我有一个小函数可以返回文件名的第一个字符,并将其转换为 int:

public rightAnswer() {

    String filename = "12.png";     //would be passed as parameters 
    int coefficient = 2;            //
    int answer = 24;                //

    char first = filename.charAt(0);
    char second = filename.charAt(1);       
    int target;

    if (second != '.') {    //dealing only with 1 or 2-digit numbers        

        String both = String.valueOf(first) + String.valueOf(second);           
        target = Integer.parseInt(both);
    }
    else {
        target = Character.digit(first, 10);
    }

    if (target * coefficient == answer) {
        System.out.println("Answer is correct! (target = " + target + ")");
    }
    else {
        System.out.println("Wrong! (target = " + target + ")");
    }
}

写的时候遇到一个问题。我不知道如何检索碰撞星的文件名以将其传递给上述测试函数。

编辑:

拍摄Enno Shioji的解决方案,我得出了这个结论:

//star map
Map<ImageEntity, Integer> star_number = new HashMap<ImageEntity, Integer>();

//later, while loading the images into the game...
for (int n = 0; n < 10; n++) {          // 10 loops

        stars[n] = new ImageEntity(this);
        String filename = (n+2) + ".png";   // 2- 12 range
        stars[n].load(filename);

        star_number.put(stars[n], n+2);
    }

//then later again, run when collision is detected between a bullet and a star...
public boolean correctAnswer(ImageEntity star, int expectedAnswer) {

    if (star_number.get(star) == expectedAnswer) 
        return true;

    else return false;
}

这看起来对吗?

4

1 回答 1

1

我不会尝试获取文件名。相反,您应该在地图中跟踪哪个星对应哪个数字。

// Do this wherever you have easy access to the file name
Map<Star,Integer> star_number = new HashMap<Star,Integer>();
star_number.put(star1,1);
star_number.put(star2,2);
etc...

//Then later...
boolean collided(Star star, Integer expectedAnswer){
    Integer answerGiven = star_number.get(star);
    return expectedAnswer.equals(answerGiven);
}

或者,您也可以通过这样定义 Star 对象来跟踪:

class Star{
    Integer number;
    StarImage image;
    Star(StarImage image, Integer number){
        this.number = number;
        this.image = image;
}
// then later...
boolean collided(Star star, Integer expectedAnswer){
    return star.number.equals(expectedAnswer);
}

希望这可以帮助。祝你的项目好运:)

于 2012-11-30T16:15:31.670 回答