我目前正在构建一个小型 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;
}
这看起来对吗?