- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在开始之前,我已经检查了我的代码 4 个小时,直到我无法再看为止,来到这里是最后的手段,不想在愚蠢的问题上浪费任何人的时间,但是,无论如何;致力于我的 simon 游戏,以帮助自学 Java,并解决一些问题。首先,showPattern 方法似乎很奇怪。值得注意的是,它似乎并没有按预期每次都显示一种新颜色的相同图案。此外,当单击正确的按钮时,当前/高分不会更新。这些是迄今为止我检测到的唯一错误,可能还有其他错误。
我只是发布整个程序,以便您可以复制并测试它。抱歉,如果有点长。我真的很感谢任何帮助,请不要像其他人一样愤世嫉俗。
package simon;
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color.*;
import javax.swing.Timer;
/**
* Main Class
* @author Chris Mailloux
*/
class Simon
{
public static void main (String[] args)
{
window.setBackground(Color.BLACK);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// Static object creations.
public static GameWindow window = new GameWindow();
// Variable declarations.
public static final String[] colors = {"Green", "Red", "Yellow", "Blue"};
public static ArrayList<String> pattern = new ArrayList<String>();
public static int currentScore = 0;
public static int iterator = 0;
public static boolean isPlayerTurn = false;
public static int highScore = 0; // TEMPORARY
}
/**
* Class for main game window.
* @author Chris
*/
class GameWindow extends JFrame
{
GameWindow()
{
// Set basic properties of frame.
setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
setTitle("Simon");
setResizable(true);
setLocation(DEFAULT_HORIZONTAL_LOCATION, DEFAULT_VERTICAL_LOCATION);
// PLACEHOLDER FOR IMAGE ICON
// Adding Border layout helper panel.
BorderPanel borderPanel = new BorderPanel();
add(borderPanel);
}
// Declaring window positioning constants.
public static final int DEFAULT_WIDTH = 800;
public static final int DEFAULT_HEIGHT = 800;
// TEMPORARY PLACEHOLDER FOR SCREENSIZE CALCULATIONS
public static final int DEFAULT_HORIZONTAL_LOCATION = 0;
public static final int DEFAULT_VERTICAL_LOCATION = 0;
}
/**
* Class to hold the buttonsPanel
* @author Chris
*/
class ButtonsPanel extends JPanel
{
// Creating JButtons for gameplay.
public static JButton greenButton = new JButton();
public static JButton redButton = new JButton();
public static JButton yellowButton = new JButton();
public static JButton blueButton = new JButton();
ButtonsPanel()
{
setBackground(Color.BLACK);
// Setting grid layout (with spaces)
setLayout(new GridLayout(2, 2, 20, 20));
// Setting background color of buttons.
greenButton.setBackground(Color.GREEN); // NEED COLOR CONSTANTS
redButton.setBackground(Color.RED);
yellowButton.setBackground(Color.YELLOW);
blueButton.setBackground(Color.BLUE);
// Add buttons to panel. (In order)
add(greenButton);
add(redButton);
add(yellowButton);
add(blueButton);
// Creating ActionListeners for 4 main buttons.
ActionListener greenAction = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
greenClicked();
}
};
ActionListener redAction = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
redClicked();
}
};
ActionListener yellowAction = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
yellowClicked();
}
};
ActionListener blueAction = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
blueClicked();
}
};
// Associate actions with buttons.
greenButton.addActionListener(greenAction);
redButton.addActionListener(redAction);
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
}
public static final int delay = 400;
// Handling button activations.
public static void greenClicked()
{
// Handling button Coloring/timing.
greenButton.setBackground(Color.WHITE);
greenButton.repaint();
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
greenButton.setBackground(Color.GREEN);
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setRepeats(false);
timer.start();
// Handling button Action
if(Game.isPlayerTurn == true)
{
Game.check("Green");
}
}
public static void redClicked()
{
// Handling button color and timing.
redButton.setBackground(Color.WHITE);
redButton.repaint();
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
redButton.setBackground(Color.RED);
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setRepeats(false);
timer.start();
// Handling button actions.
if(Game.isPlayerTurn == true)
{
Game.check("Red");
}
}
public static void yellowClicked()
{
// Handling button color and timing.
yellowButton.setBackground(Color.WHITE);
yellowButton.repaint();
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
yellowButton.setBackground(Color.YELLOW);
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setRepeats(false);
timer.start();
// Handling button actions.
if(Game.isPlayerTurn == true)
{
Game.check("Yellow");
}
}
public static void blueClicked()
{
// Handling button color and timing.
blueButton.setBackground(Color.WHITE);
blueButton.repaint();
ActionListener taskPerformer = new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
blueButton.setBackground(Color.BLUE);
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setRepeats(false);
timer.start();
// Handling button actions.
if(Game.isPlayerTurn == true)
{
Game.check("Blue");
}
}
}
/**
* Menu buttons panel.
* @author Chris Mailloux
*/
class MenuPanel extends JPanel
{
static JButton startButton;
static JButton scoreDisplay;
static JButton highScoreDisplay;
public MenuPanel()
{
setBackground(Color.BLACK);
// Menu panel buttons.
startButton = new JButton("Start");
scoreDisplay = new JButton(String.valueOf(Simon.currentScore));
highScoreDisplay = new JButton(String.valueOf(Simon.highScore));
// Adding Buttons
add(startButton);
add(scoreDisplay);
add(highScoreDisplay);
// Setting background colors
scoreDisplay.setBackground(Color.BLACK);
highScoreDisplay.setBackground(Color.BLACK);
startButton.setBackground(Color.BLUE);
// Disabling displays
scoreDisplay.setEnabled(false);
highScoreDisplay.setEnabled(false);
// ActionListeners for menu buttons.
ActionListener startButtonAction = new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
Game.startGame();
}
};
startButton.addActionListener(startButtonAction);
startButton.setFocusable(false);
}
}
/**
* Border Panel support class.
* @author Chris Mailloux
*/
class BorderPanel extends JPanel
{
BorderPanel()
{
setLayout(new BorderLayout());
add(new MenuPanel(), BorderLayout.NORTH);
add(new ButtonsPanel(), BorderLayout.CENTER);
}
}
/**
* Main game logic class.
* @author Chris
*/
class Game extends Simon
{
// Resets variables for new game.
public static void startGame()
{
isPlayerTurn = false;
pattern.clear();
currentScore = 0;
iterator = 0;
gamePlay(); // Should Start game
}
public static void gamePlay()
{
if (isPlayerTurn == false)
{
computerTurn();
}
else
{
playerTurn();
}
}
public static void computerTurn()
{
// Isn't working.
ButtonsPanel.greenButton.setEnabled(false);
ButtonsPanel.redButton.setEnabled(false);
ButtonsPanel.yellowButton.setEnabled(false);
ButtonsPanel.blueButton.setEnabled(false);
iterator = 0; // So CPU can use iterator to show pattern.
Random generator = new Random();
int randInt = generator.nextInt(4);
String randColor = colors[randInt];
System.out.println(randColor); // For testing.
pattern.add(new String(randColor));
showPattern();
}
public static void playerTurn()
{
iterator = 0;
ButtonsPanel.greenButton.setEnabled(true);
ButtonsPanel.redButton.setEnabled(true);
ButtonsPanel.yellowButton.setEnabled(true);
ButtonsPanel.blueButton.setEnabled(true);
}
/**
* Handles scoring and checks inputs for correctness.
* @author Chris Mailloux
*/
public static void check(String lastInput)
{
if (lastInput.equals(pattern.get(iterator)))
{
iterator++;
if(iterator > currentScore)
{
currentScore++;
MenuPanel.scoreDisplay.repaint();
if(currentScore > highScore)
{
highScore++;
// PLACEHOLDER TO WRITE HIGHSCORE TO FILE.
}
}
if (iterator == pattern.size());
{
isPlayerTurn = false;
computerTurn();
}
}
else
{
gameOver();
}
}
public static void showPattern()
{
int j = 0;
while (j < pattern.size())
{
String showerHelper = pattern.get(j); // Helper variable.
switch (showerHelper)
{
case "Green" : ButtonsPanel.greenClicked();
case "Red" : ButtonsPanel.redClicked();
case "Yellow" : ButtonsPanel.yellowClicked();
case "Blue" : ButtonsPanel.blueClicked();
break; // Fallthrough handler.
default: System.out.println("Error: Invalid value for pattern"
+ " ArrayList, or improper storage of variable in the"
+ " showerHelper variable.");
}
j++;
}
isPlayerTurn = true;
gamePlay();
}
public static void gameOver()
{
System.out.println("YOU LOSE!");
// PLACEHOLDER TO PLAY GAMEOVER SOUND
}
} // End of game class.
作为一个附带问题,当按钮被激活时,我将如何播放声音,就像西蒙掌上游戏一样?另外,如何以某种方式保存高分,以便在程序关闭时保存高分以供下次使用?
最佳答案
Thread
将阻塞 UI。您应该使用 Timer 。所以不要使用线程
try
{
Thread.sleep(400);
}
catch(InterruptedException e)
{
}
blueButton.setBackground(Color.BLUE);
代码可能是:
int delay = 400; //milliseconds
ActionListener taskPerformer = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
//...Perform a task...
blueButton.setBackground(Color.BLUE);
}
};
Timer timer = new Timer(delay, taskPerformer);
timer.setRepeats(false);
timer.start();
关于Java Swing---没有错误或异常,但程序似乎无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21358440/
问题很简单:我正在寻找一种优雅的使用方式 CompletableFuture#exceptionally与 CompletableFuture#supplyAsync 一起.这是行不通的: priva
对于 Web 服务,我们通常使用 maven-jaxb2-plugin 生成 java bean,并在 Spring 中使用 JAXB2 编码。我想知道如何处理 WSDL/XSD 中声明的(SOAP-
这个问题已经有答案了: Array index out of bound behavior (10 个回答) 已关闭 8 年前。 我对下面的 C 代码感到好奇 int main(){
当在类的开头使用上下文和资源初始化 MediaPlayer 对象时,它会抛出 NullPointer 异常,但是当在类的开头声明它时(因此它是 null),然后以相同的方式初始化它在onCreate方
嘿 我尝试将 java 程序连接到 REST API。 使用相同的代码部分,我在 Java 6 中遇到了 Java 异常,并且在 Java 8 中运行良好。 环境相同: 信任 机器 unix 用户 代
我正在尝试使用 Flume 和 Hive 进行 Twitter 分析。为了从 twitter 获取推文,我在 flume.conf 文件中设置了所有必需的参数(consumerKey、consumer
我在 JavaFX 异常方面遇到一些问题。我的项目在我的 Eclipse 中运行,但现在我的 friend 也尝试访问该项目。我们已共享并直接保存到保管箱文件夹中。但他根本无法让它发挥作用。他在控制台
假设我使用 blur() 事件验证了电子邮件 ID,我正在这样做: $('#email').blur(function(){ //make ajax call , check if dupli
我这样做是为了从 C 代码调用非托管函数。 pCallback 是一个函数指针,因此在托管端是一个委托(delegate)。 [DllImport("MyDLL.dll")] public stati
为什么这段代码是正确的: try { } catch(ArrayOutOfBoundsException e) {} 这是错误的: try { } catch(IOException e) {} 这段
我遇到了以下问题:有导出函数的DLL。 代码示例如下:[动态链接库] __declspec(dllexport) int openDevice(int,void**) [应用] 开发者.h: __de
从其他线程,我知道我们不应该在析构函数中抛出异常!但是对于下面的例子,它确实有效。这是否意味着我们只能在一个实例的析构函数中抛出异常?我们应该如何理解这个代码示例! #include using n
为什么需要异常 引出 public static void main(String[
1. Java的异常机制 Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内
我是 Python 的新手,我对某种异常方法的实现有疑问。这是代码(缩写): class OurException(Exception): """User defined Exception"
我已经创建了以下模式来表示用户和一组线程之间的关联,这些线程按他们的最后一条消息排序(用户已经阅读了哪些线程,哪些没有): CREATE TABLE table(user_id bigint, mes
我正在使用 Python 编写一个简单的自动化脚本,它可能会在多个位置引发异常。在他们每个人中,我都想记录一条特定的消息并退出程序。为此,我在捕获异常并处理它(执行特定的日志记录操作等)后引发 Sys
谁能解释一下为什么这会导致错误: let xs = [| "Mary"; "Mungo"; "Midge" |] Array.iter printfn xs 虽然不是这样: Array.iter pr
在我使用 Play! 的网站上,我有一个管理部分。所有 Admin Controller 都有一个 @With 和一个 @Check 注释。 断开连接后,一切正常。连接后,每次加载页面(任何页面,无论
我尝试连接到 azure 表存储并添加一个对象。它在本地主机上工作得很好,但是在我使用的服务器上我得到以下异常及其内部异常: Exception of type 'Microsoft.Wind
我是一名优秀的程序员,十分优秀!