JAVA西蒙游戏
我需要为我的Java初学者完成这个simon游戏。基本上,游戏需要随机选择顶部标签“R”、“B”、“Y”或“G”上的3个颜色字母,开始游戏。玩家将按此顺序按下颜色,如果颜色正确,将添加另一个字母/颜色。如果颜色错误,则将丢失。我有游戏的主要部分设置,包括颜色等。。。我现在很难做到的是打印底部标签上按钮的字母,同时让顶部标签随机选择3个。当按下按钮时,我可以让游戏在顶部标签上随机打印字母,但它不会自己开始,也不会添加字母 这是我的密码:JAVA西蒙游戏,java,Java,我需要为我的Java初学者完成这个simon游戏。基本上,游戏需要随机选择顶部标签“R”、“B”、“Y”或“G”上的3个颜色字母,开始游戏。玩家将按此顺序按下颜色,如果颜色正确,将添加另一个字母/颜色。如果颜色错误,则将丢失。我有游戏的主要部分设置,包括颜色等。。。我现在很难做到的是打印底部标签上按钮的字母,同时让顶部标签随机选择3个。当按下按钮时,我可以让游戏在顶部标签上随机打印字母,但它不会自己开始,也不会添加字母 这是我的密码: //10/30/16 package simongame1;
//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;
}
}
为什么这一点落后了?如果我点击红色按钮,它不会显示任何内容,但如果我点击红色按钮后的蓝色按钮,它最终会打印“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");
}
当你初始化你的标签,在你把它添加到面板之前,我会用你需要的字母生成标签,并在那里设置标签的文本。这样,当您添加它时,您肯定会在其中包含字符。现在,您仅在调用actionPerformed方法时设置labelTop的文本,该方法仅在按下按钮时调用 所以它应该看起来像:
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);
}
提示:您希望我们花时间帮助您。所以请你尽可能地简单;首先,花几分钟来正确格式化/缩进源代码;而不是我们身上很难读懂的乱七八糟!然后我把你的描述读了三遍,我仍然不明白你真正的问题在哪里。试着用简单的句子,甚至可能是你想看的序列的简短描述。。。当你初始化你的标签时,在你将它添加到面板之前,我会用你需要的字母生成标签,并在那里设置标签的文本。这样,当您添加它时,您肯定会在其中包含字符。现在,您仅在调用actionPerformed方法时设置labelTop的文本,该方法仅在按下按钮时调用。@Brittni77没问题!就在不久前我开始学习编程的时候,所以继续学习吧。编程需要很大的热情和动力来保持对它的兴趣,但在我看来完全值得。@Brittni77仅供记录:当你开始在这个网站时,有很多关于如何/问什么的好文档。但是太多的新手来到这里,却忽视了这一切。因此,在旁观者眼里,这里的“粗鲁”是非常明显的。奥林-再次感谢。如果很难阅读,我道歉。有时候,当你在争先恐后地寻求帮助时,很难弄清楚如何把一切都弄清楚。我希望我能为你做点什么花时间帮我。太好了。。。你花了时间去调查那件事!我盯着它看了一会儿,但想不出来。这就是stuid的事情,当一个人太渴望获得达到每日上限所需的其他选票时。。。有时人会被蒙蔽。@GhostCat哈哈,我听到了。有时候你只需要休息一下:)是的,很好。现在已经是晚上9点了,真的是时候停止名誉工作了;-)
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);
}
for(int i = 0; i < 0; i++)
{
numberButtons[i] = new JButton();
numberButtonPanel.add(numberButtons[i]);
numberButtons[i].addActionListener(this);
}
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);
}