Мне нужно закончить эту игру simon для моего начинающего класса Java. В принципе, игра должна рандомизировать 3 буквы COLOR на верхней метке «R», «B», «Y» или «G», чтобы начать играть в игру. Игрок будет нажимать цвета в этой последовательности, и если они верны, он добавит другую букву/цвет, если они ошибаются, они проиграют. У меня есть основная часть игры, включая цветной и т. Д. То, что у меня с трудом, - это печатать буквы кнопок, расположенных на нижней этикетке, а также получать верхнюю метку для рандомизации 3 для начала. Я могу заставить игру печатать случайные буквы на верхней метке, когда кнопка нажата, но она не сделает это самостоятельно, чтобы начать, и она не добавит буквы?JAVA Simon Game
Вот мой код:
//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
Когда вы инициализируете свой ярлык, перед тем как добавить его на панель, я бы просто сгенерировал метку с нужными буквами и установил текст ярлыка прямо там. Таким образом, когда вы его добавите, у вас наверняка будут персонажи. Прямо сейчас вы устанавливаете только текст меткиTop, когда вызывается метод actionPerformed, который вызывается только при нажатии кнопки. – Orin
@ Brittni77 Нет проблем! Не так давно, когда я начал изучать программирование, так продолжайте. Программирование требует много страсти и стремления оставаться в этом заинтересованы, но, на мой взгляд, стоит того. – Orin