我需要爲我的初學Java類完成這個西蒙遊戲。基本上,遊戲需要隨機選擇頂部標籤「R」,「B」,「Y」或「G」上的3個顏色字母來開始玩遊戲。玩家將按照這個順序按下顏色,如果他們是正確的,如果他們錯了,他們會失去另一個字母/顏色。我已經設置了遊戲的主要部分,包括顏色等......我遇到的困難是打印底部標籤上推送的按鈕的字母,並獲得頂部標籤隨機3開始。當按鈕被按下時,我可以讓遊戲在頂部的標籤上打印隨機字母,但是它不會自己開啓並且不會添加字母?JAVA西蒙遊戲
這裏是我的代碼:
//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);
}
}
}
這是爲什麼點擊背後?如果我點擊紅色按鈕,它doenst顯示任何東西,但如果我點擊藍色一個紅色的多數民衆贊成後,當它打印「R」終於......
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");
}
提示:你希望我們花時間幫助你。所以你請儘可能簡單地做到這一點;對於初學者來說,花幾分鐘時間來正確格式化/縮進源代碼;而不是非常難以閱讀的混亂在我們身上!然後我讀了你的描述3次,我還是不明白你真正的問題在哪裏。試着用非常簡單的句子,甚至可以簡要描述你想要看到的序列...以及哪些地方不起作用。 – GhostCat
初始化標籤時,在將其添加到面板之前,我只需生成帶有所需字母的標籤,並將標籤的文本設置在那裏。這樣當你添加它時,你肯定會有那裏的角色。現在,只有在調用actionPerformed方法時才設置labelTop的文本,只有在按下按鈕時纔會調用該方法。 – Orin
@ Brittni77沒問題!很久以前,當我開始學習編程時,請繼續。編程需要很多激情和動力來保持對它的興趣,但在我看來完全值得。 – Orin