私は現在、地元の中学校の子供たちが使用することを目的とした小さなアステロイド スタイルのゲームを作成中です。目的は、タイムテーブルで彼らを助けることです。
ランダムに生成された質問が画面に表示され (例: 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;
}
これは正しく見えますか?