2012-05-01 15 views
3

私はボードゲームを作っていて、動かすことができません。ピースはサイコロの結果に従って移動します。以下は、私がしようとしたが、それは動作しませんものです(ボタン[]からaddActionListener(新しいの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); 
+0

「ボタン[]」とは何ですか?それはどこに定義されていますか? – assylias

+0

ピースが現在位置している場所のグリッド[] []の値をEMPTYに設定し、グリッド内のピースの新しい位置を移動するピースに設定します。 –

+0

また、 'buttons [] == ImageIcon(" piece1 ")'は常にfalseになります:JButtonの配列とイメージを比較します。その行で何を達成しようとしているのかは分かりません。 – assylias

答えて

3

はそれのように見えます。?あなたはかなりまだ把握していないいくつかの基本的な事がありますがここではいくつかの提案は、あなたの目標に近づくために、次のとおりです。

  1. button[].addActionListenerは無意味文であるあなたがで配列全体にアクションリスナーを追加することはできません。おそらく、あなたはbuttons[btnNumber - 1].addActionListenerと言って、それをforループの中に入れようとしていたでしょう。
  2. buttons[]==ImageIcon("piece1")も意味がありません(コンパイルしてはいけません)。 buttons[btnNumber - 1] == ImageIcon("piece1")を試すことができますが、これを実行する簡単な方法があります(#3)。
  3. イメージアイコンのインスタンスと等しいかどうかに基づいてピースの位置を決定する代わりに、ピースの移動に合わせて更新される変数piece1Locationおよびpiece2Locationを持たないようにしてください。そして、その部分がどこにあるのかを即座に知り、論理が簡素化されますif (btnNumber - 1 == piece1Location)
  4. Javaでは、配列はインデックス0から始まります。 forループでJavaで配列を処理する最もクリーンな方法は、インデックス変数を0にも開始し、比較を<=から<に変更することです。 for(int i = 0; i < 30; i++)の場合は、btnNumber - 1と言うことはありません。
  5. コードの編成は、モデルとプレゼンテーションの間に少し混乱し、緊密に統合されています。あなたは、ゲームの仕組み(ローリング・ダイス、動くピースなど)を扱うロジックから、ボードと作品(プレゼンテーション)を表示することを扱うロジックを分離するよう努めなければなりません。これはあなたのコードを維持し、何が起こっているのかを把握するのに非常に役立ちます。
+0

あなたの返事をありがとう、それは本当に理にかなっていますが、問題は、私は各プレーヤーのための5つの部分があるということです。彼らは5のいずれかを動かすことができます。それでは、どのようにして1つの場所が働くのでしょうか? –

+1

'GameBoardState'のような別のクラスが必要なように聞こえます。これは配列内のプレーヤーとそのピースを追跡します。ポイント5で言及したように、プレゼンテーションとは別にゲームの構造のモデルを開発する必要があります。実際、これを行うための最良の方法の1つは、コマンドラインで最初に実行されるようにゲーム全体を開発することです。その作業が完了したら、ゲームのUIを作成します。現時点では過剰殺人のように聞こえるかもしれませんが、プロジェクトの規模と規模が大きくなるにつれて、長期的にはプロジェクト管理に多くの助けになります。 – mellamokb

+0

また、複数のピースが現在同じボード位置(ボタン)にある状況をどのように扱いますか?移動が有効か無効かはどうやって判断するのですか?誰かがゲームに勝ったかどうかをどうやって判断しようとしていますか?これらのことについても考えましたか?プロジェクトの全範囲を紙で考え、最初のコード行を書く前に、高度な計画を書き留めることは有益です。デザインは紙ではなく、IDEで行う必要があります。 – mellamokb

関連する問題