2

私は現在、地元の中学校の子供たちが使用することを目的とした小さなアステロイド スタイルのゲームを作成中です。目的は、タイムテーブルで彼らを助けることです。

ランダムに生成された質問が画面に表示され (例: 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 に答える