2016-11-04 13 views
-1

初心者のJavaクラスでこのシモンゲームを終わらせる必要があります。基本的には、ゲームのプレイを開始するには、トップラベル "R"、 "B"、 "Y"または "G"の3色の文字をランダムにする必要があります。プレイヤーはこの順番で色を押しますが、正しい場合は間違っていると別の文字/色が追加されて失われます。私はゲームの主な部分を色を含む設定している...私は苦労しているのは、ボトムラベルにプッシュされたボタンの文字を印刷し、また3をランダム化するトップラベルを取得することです。私は、ボタンが押されたときにトップのラベルにランダムな文字を印刷するゲームを手に入れることができますが、これは自分自身で始まります。 HEREJAVA Simon Game

はMY CODE IS:

//10/30/16 
package simongame1; 
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.FlowLayout; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import java.security.SecureRandom; 

public class SimonGame1 extends JFrame implements ActionListener 
{ 
    public SecureRandom rand; 
    public String randomLetters=""; 
    JButton[] numberButtons = new JButton[4]; 
    JPanel numberButtonPanel = new JPanel(); 
    JLabel labelTop; 
    JLabel labelBottom; 
    String messageTop = ""; 
    String messageBottom = ""; 
    JButton red; 
    JButton green; 
    JButton yellow; 
    JButton blue; 
    public final String letters= "RGBY"; 
    public JLabel labelDisplay; 


//constructor? 
    public SimonGame1() 
    { 


     super("Simon Game!"); 
       labelDisplay = new JLabel (""); 
     setLayout(new BorderLayout()); 
     red = new JButton(); 
       green = new JButton(); 
       blue = new JButton(); 
       yellow = new JButton(); 
     labelTop = new JLabel(""); 
       //getRandomLetter(); 
     labelBottom = new JLabel(""); 
       //System.out.print (randomLetters); 
       rand = new SecureRandom(); 


     numberButtons = new JButton[4]; 
     numberButtonPanel = new JPanel(); 
     numberButtonPanel.setLayout(new GridLayout(3,3)); 


     for(int i = 0; i < 0; i++) 
     { 
        numberButtons[i] = new JButton(); 
        numberButtonPanel.add(numberButtons[i]); 
        numberButtons[i].addActionListener(this); 
     } 
     numberButtonPanel.add(red); 
     red.setBackground(Color.red); 
     red.addActionListener(this); 

       numberButtonPanel.add(blue); 
       blue.setBackground(Color.blue); 
       blue.addActionListener(this); 

       numberButtonPanel.add(yellow); 
       yellow.setBackground (Color.yellow); 
       yellow.addActionListener(this); 

       numberButtonPanel.add (green); 
       green.setBackground (Color.green); 
       green.addActionListener(this); 

     add(labelTop, BorderLayout.NORTH); 
     add(labelBottom, BorderLayout.SOUTH); 

     add(numberButtonPanel, BorderLayout.CENTER); 


       //if (messageTop = messageBottom) 


} 
// TODO code application logic here 

    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
       rand = new SecureRandom(); 

       randomLetters+= getRandomLetter(); 
       labelTop.setText (randomLetters); 
       labelBottom.setText (letters); 

       System.out.println(e.getID()); 
     if(e.getSource() == red) 
     { 
        System.out.println("R"); 
     } 
       else if (e.getSource()==blue) 
       { 
        System.out.println ("B"); 
       } 
       else if (e.getSource()==yellow) 
       { 
        System.out.println ("Y"); 
       } 
       else if (e.getSource()==green) 
       { 
        System.out.println ("G"); 
       } 

     } 


     public char getRandomLetter() 
     { 

      char randChar = letters.charAt(rand.nextInt (4)); 
      return randChar; 
     } 
} 

、ここではテストです

package simongame1; 
import javax.swing.JFrame; 
public class NewClass { 
    public static void main(String[] args) { 
     { 
     SimonGame1 simpleFrame = new SimonGame1(); 
     simpleFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     simpleFrame.setSize(300, 300); 
     simpleFrame.setVisible(true); 
     } 

    } 
} 

なぜ、このワンクリックBEHINDは何ですか?私は赤いボタンをクリックした場合、それは何も表示さdoenstが、それは最終的には「R」を印刷したときに、私は...赤thatsの後

labelBottom.setText (messageBottom); 
      **//WHY IS IT ONE LETTER BEHIND?** 
      System.out.println(e.getID()); 
    if(e.getSource() == red) 
    { 
       messageBottom += "R"; 
       //System.out.println("R"); 
    } 
      else if (e.getSource()==blue) 
      { 
       messageBottom += "B"; 
       //System.out.println ("B"); 
      } 
      else if (e.getSource()==yellow) 
      { 
       messageBottom += "Y"; 
       //System.out.println ("Y"); 
      } 
      else if (e.getSource()==green) 
      { 
       messageBottom += "G"; 
       //System.out.println ("G"); 
      } 
+4

ヒント:私たちがあなたを助けるために時間を費やすことを望みます。だからできるだけ簡単にしてください。まずソースコードを適切に書式設定/インデントするのに必要な数分を費やすことで、私たちの非常に難しい混乱の代わりに!それから私は3回のようにあなたの説明を読んで、私はまだあなたの本当の問題がどこにあるか分からない。本当にシンプルな文章で試してみてください。見たいと思っているシークエンスの短い説明と、物事がうまくいかないところ。 – GhostCat

+0

ラベルを初期化するときに、パネルに追加する前に、必要な文字でラベルを生成し、ラベルのテキストをそこに設定するだけです。あなたがそれを追加すると、あなたは確かにそこに文字を持っているでしょう。今は、actionPerformedメソッドが呼び出されたときにのみlabelTopのテキストを設定します。これは、ボタンが押されたときにのみ呼び出されます。 – Orin

+0

@ Brittni77問題ありません!プログラミングを学び始めたのはずっと前のことだったので、それを続けてください。プログラミングには、多くの情熱とそれに興味を持ち続けるためのドライブが必要ですが、私の意見ではそれだけの価値があります。 – Orin

答えて

0

を青色のいずれかをクリックした場合、あなたはあなたにそれを追加する前に、あなたのラベルを初期化するとパネル私はちょうどあなたが必要とする文字でラベルを生成し、そこにラベルのテキストを設定します。あなたがそれを追加すると、あなたは確かにそこに文字を持っているでしょう。今は、actionPerformedメソッドが呼び出されたときにのみlabelTopのテキストを設定します。これは、ボタンが押されたときにのみ呼び出されます。

だから、次のようになります。

あなたが私に0を初期化している限り、それは小さいと言うので、またこのコードブロックは、条件が満たされることはありませんすべてのために使用されていない
public SimonGame1() { 
    //.... 

    rand = new SecureRandom(); 
    labelTop = new JLabel(""); 

    //initialize with 3 
    for(int i = 0; i < 3; i++) 
    { 
     randomLetters += getRandomLetter(); 
    } 
    labelTop.setText(randomLetters); 

    //... 

    add(labelTop, BorderLayout.NORTH); 

} 

0より:

for(int i = 0; i < 0; i++) 
{ 
     numberButtons[i] = new JButton(); 
     numberButtonPanel.add(numberButtons[i]); 
     numberButtons[i].addActionListener(this); 
} 

EDIT:あなたが質問の別の部分を追加しましたので、

、それはあなただけクリックされた文字を追加する前に反復を待っている理由を尋ねましたあなたのactionPerformedメソッドで、それは文字列に次の文字を追加する前にテキストを設定しているためです。したがって、あなたのactionPerformedメソッドは次のようになります。

public void actionPerformed(ActionEvent e) 
{ 

    if(e.getSource() == red) 
    { 
      messageBottom += "R"; 
      //System.out.println("R"); 
    } 
    else if (e.getSource()==blue) 
    { 
     messageBottom += "B"; 
     //System.out.println ("B"); 
    } 
    else if (e.getSource()==yellow) 
    { 
     messageBottom += "Y"; 
     //System.out.println ("Y"); 
    } 
    else if (e.getSource()==green) 
    { 
     messageBottom += "G"; 
     //System.out.println ("G"); 
    } 

    labelBottom.setText (messageBottom); 
} 
+1

偉大な...あなたはそれを調べる時間がかかりました!私は意志のためにそれを見つめていたが、それを把握できなかった。それは、一日の上限を打つのに必要な他のupvoteを取ってもらいたくないときには、それは時々盲目的になる。 – GhostCat

+1

@GhostCat haha​​私はあなたを聞いています。ときどき少し休憩が必要です。 – Orin

+0

うんうん。その午後9時すでに、本当に評判の仕事をやめる時間;-) – GhostCat