1
我正在做一个Simon说游戏,当我在KeyListener pressed的pressed()方法中调用randomColorChange()方法时,它保持winow关闭。 randomColorChange()方法随机更改颜色。该方法完成后,我想的keyPressed()方法,以点亮键:方法保持窗口关闭
public void randomColorChange(){
decrement = simonIncrease;
try{
int random;
for (int i = 0; i < simonIncrease; i++)
{
random = (int) (Math.random() * 4);
Thread.sleep(lightUpSpd);
if (random == 0)
{
green = green.brighter();
repaint();
Thread.sleep(lightUpSpd);
green= green.darker();
repaint();
}
if (random == 1)
{
red = red.brighter();
repaint();
Thread.sleep(lightUpSpd);
red = red.darker();
repaint();
}
if (random == 2)
{
blue = blue.brighter();
repaint();
Thread.sleep(lightUpSpd);
blue = blue.darker();
repaint();
}
if (random == 3)
{
yellow = yellow.brighter();
repaint();
Thread.sleep(lightUpSpd);
yellow = yellow.darker();
repaint();
}
}
}
catch (InterruptedException e){
e.printStackTrace();
}
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
blue = blue.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT)
{
red = red.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_UP)
{
green = green.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
yellow = yellow.brighter();
repaint();
}
decrement--;
if (decrement == 0)
{
simonIncrease++;
randomColorChange();
decrement = simonIncrease;
}
}
的问题是,该段将亮起,但是当我simonIncrease ++程序后添加randomColorChange()方法在所有的不工作,我不能关闭窗口
这里是全班同学:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.Arc2D;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class SimonShape extends JFrame implements KeyListener {
private int width;
private int height;
private int x;
private int y;
private int TURN = 45;
private int simonIncrease = 1;
private int lightUpSpd = 1000;
private int decrement = simonIncrease;
private Color blue = Color.BLUE.darker();
private Color red = Color.RED.darker();
private Color yellow = Color.YELLOW.darker();
private Color green = Color.GREEN.darker();
public SimonShape(int width, int height, int x, int y) {
this.width = width;
this.height = height;
this.x = x;
this.y = y;
JLabel label = new JLabel();
setSize(800, 800);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
label.addKeyListener(this);
label.setFocusable(true);
label.setOpaque(true);
label.addKeyListener(this);
this.add(label);
setVisible(true);
label.requestFocusInWindow();
randomColorChange();
}
public void randomColorChange() {
decrement = simonIncrease;
try {
int random;
for (int i = 0; i < simonIncrease; i++) {
random = (int) (Math.random() * 4);
Thread.sleep(lightUpSpd);
if (random == 0) {
green = green.brighter();
repaint();
Thread.sleep(lightUpSpd);
green = green.darker();
repaint();
}
if (random == 1) {
red = red.brighter();
repaint();
Thread.sleep(lightUpSpd);
red = red.darker();
repaint();
}
if (random == 2) {
blue = blue.brighter();
repaint();
Thread.sleep(lightUpSpd);
blue = blue.darker();
repaint();
}
if (random == 3) {
yellow = yellow.brighter();
repaint();
Thread.sleep(lightUpSpd);
yellow = yellow.darker();
repaint();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void keyPressed(KeyEvent e) {
// TODO Auto-generated method stub
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
blue = blue.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
red = red.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_UP) {
green = green.brighter();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
yellow = yellow.brighter();
repaint();
}
decrement--;
if (decrement == 0) {
simonIncrease++;
randomColorChange();
decrement = simonIncrease;
}
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
green = green.darker();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
blue = blue.darker();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
yellow = yellow.darker();
repaint();
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
red = red.darker();
repaint();
}
}
public void keyTyped(KeyEvent e) {
}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
// Blue Section
g2.setStroke(new BasicStroke(2.0f));
g2.setPaint(blue);
g2.fill(new Arc2D.Double(x, y, width, height, 180 + TURN, 90, Arc2D.PIE));
// Red Section
g2.setStroke(new BasicStroke(2.0f));
g2.setPaint(red);
g2.fill(new Arc2D.Double(x, y, width, height, 90 + TURN, 90, Arc2D.PIE));
// Yellow Section
g2.setStroke(new BasicStroke(2.0f));
g2.setPaint(yellow);
g2.fill(new Arc2D.Double(x, y, width, height, -90 + TURN, 90, Arc2D.PIE));
// Green Section
g2.setStroke(new BasicStroke(2.0f));
g2.setPaint(green);
g2.fill(new Arc2D.Double(x, y, width, height, 360 + TURN, 90, Arc2D.PIE));
}
}
测试类:
public class SimonTest {
public static void main(String[] args)
{
new SimonShape(500,500,150,150);
}
}
它是冷冻和反应迟钝?您的代码中可能存在无限循环。 – Ring