0

コードに問題があります。私の問題は簡単だと思いますが、良い結果が得られずに 3 日間コンパイルしました。私は3つの画像を持っています。それらは毎回1つずつ画面に表示されます。画像の向きを上、下、右、左の 4 つのボタンから選択します。また、ユーザーが間違っていたかどうかを理解したいので、エラーをカウントします。ユーザーが 3 つのエラーを行うと、ゲームが停止します。以下にコードを示しました。いいアイデアがあれば教えてください。問題は、最初のループで右に実行されることです。最初の if で実行されます。その後、ループを実行し、2 番目の if には進みません。それがより役立つ場合、いくつかの詳細:ユーザーに画像を表示するプログラムを作成したい.この画像には4つの側面(上、下、右、左)があります.画像が「上」にある場合、ユーザー画像が「下側」にある場合、上ボタンをクリックする必要があります。ユーザーは下ボタンなどをクリックする必要があります。ユーザーは最大 3 つのエラーを実行できます。最初に、プログラムは右側に画像を表示し、ユーザーが右ボタンをクリックすると、左側に「2番目の画像」を表示したい.ユーザーが左側にない場合、エラー(エラー++)を追加し、アップサイドなどで3枚目の画像を表示した後、より理解に役立つことを願っています。できない場合はお知らせください。私のプログラムは Java の Netbeans にあります。ありがとうございました

public void actionPerformed(ActionEvent e) 
{    
    while(errors<3)
    {
        image.setIcon(createImageIcon("visual1" + e.getActionCommand() + ".PNG"));
        if (k==1) 
        {
            if(e.getSource() == right_button)
            {
                image.setIcon(createImageIcon("visual2" + e.getActionCommand() + ".PNG"));          
            }          
        } 
        else if ( k==2 )
        {
            if(e.getSource() == left_button )
            {
                image.setIcon(createImageIcon("visual3" + e.getActionCommand() + ".PNG"));
            }
        }       
        else if (k==3 )
        {
            if(e.getSource() == up_button)
            {
                System.out.print("if3");
            }
        }
        else
        {
            errors++;
        }
        k=k+1;
    }
}
4

2 に答える 2

0

while ループで見られる問題は、終了基準として使用される変数が else ブロックで時々更新されるだけであるため、無限ループに陥る危険があることです。ロジックを再配置する必要があると思います。

  • 問題を引き起こすだけなので、その while ループを取り除きます。これは線形コマンド ライン プログラムには役立ちますが、あなたのようなイベント ドリブン GUI プログラムには役立ちません。
  • すべての画像を読み込み、クラス コンストラクターですべての ImageIcon を作成し、それらを変数に格納します。画像を何度も読み直す必要はありません (画像が巨大でない限り)。
  • while ループを使用する代わりに、上記のメソッドでエラー変数をインクリメントしてから、エラーの値に応じて (クラスの状態に応じて) 動作が変わるようにメソッドを記述します。

例えば、

// somewhere in your code create your icons
Icon rightIcon = ......;
Icon leftIcon = .....;
Icon upIcon = .....;
Icon downIcon = .....;

// elsewhere in your code
public void actionPerformed(ActionEvent e) {
  if (errors >= 3) {
    // notify user of error
    return;  // end this method
  }

  // check if current icon matches image
  // if so, change icon
  // if not increment error
}

ここで anenum Direction {UP, DOWN, LEFT, RIGHT}と aMap<Direction, Icon>が役立つことに注意してください。

于 2013-11-02T14:59:27.843 に答える