3

ボードゲームを作っていますが、動かすのに苦労しています。サイコロの出目によって駒が動きます。以下は私がやろうとしていることですが、うまくいきません.(button[].addActionListener(new ActionListener())から)

    //Puts the player 1 piece on button 1,3,5,7,9 and player 2 piece on button 2,4,6,8,10 
    if ((btnNumber - 1) < 10) 
    { 
        if (((btnNumber - 1) % 2) == 0) 
        { 
            buttons[btnNumber - 1].setIcon(piece1); 
        } 
        else 
        { 
            buttons[btnNumber - 1].setIcon(piece2); 
        } 
    } 
    centerPanel.add(buttons[btnNumber - 1]); 
} 

frame.add(centerPanel, BorderLayout.CENTER); 
4

1 に答える 1

3

まだ完全に把握していない基本的なことがいくつかあるようです。目標に近づくためのいくつかの提案を次に示します。

  1. button[].addActionListener無意味な発言です。アクション リスナーを配列全体に一度に追加することはできません。おそらく、ループbuttons[btnNumber - 1].addActionListener内に配置するつもりだったのでしょう。for
  2. buttons[]==ImageIcon("piece1")も意味のないステートメントです (コンパイルする必要さえありません)。を試すこともできますbuttons[btnNumber - 1] == ImageIcon("piece1")が、もっと簡単な方法があります (#3)。
  3. 画像アイコン インスタンスと等しいかどうかに基づいてピースの位置を決定する代わりに、変数piece1Locationpiece2Location使用して、ピースが移動するたびに更新し続けるのはどうでしょうか。そうすれば、ピースがどこにあるかがすぐにわかり、ロジックは次のように単純化されます。if (btnNumber - 1 == piece1Location)
  4. Java では、配列は index から始まります0。ループを使用して Java で配列を操作する最もクリーンな方法forは、インデックス変数を から開始し0、比較を から<=に変更すること<です。以下for(int i = 0; i < 30; i++)では、言い続ける必要はありませんbtnNumber - 1
  5. コードの編成は少し混乱しており、モデルとプレゼンテーションが緊密に統合されています。ボードと駒の表示 (プレゼンテーション) を扱うロジックと、ゲームの仕組み (サイコロを振る、駒を動かすなど) を扱うロジックを分離する必要があります。これは、コードを維持し、何が起こっているかを追跡するのに非常に役立ちます。
于 2012-05-01T12:50:55.753 に答える