2
我正在参加西蒙说游戏。我遇到的一个问题是,在第一级后,我的颜色不会改变/点亮。我追踪了代码并包含了打印语句以确保代码正常工作。颜色类别不更改颜色
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.PathIterator;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
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 level = 1;
//speed of the light up sequence
private int lightUpSpd = 500;
//chooses random color based on numbers 0-3
private int random;
//keeps track of user inputs
private int compCounter = 0;
ArrayList<Integer> comp = new ArrayList<Integer>();
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.setFocusable(true);
label.setOpaque(true);
label.addKeyListener(this);
this.add(label);
setVisible(true);
label.requestFocusInWindow();
randomColorChange();
}
private void randomColorChange()
{
try
{
JOptionPane.showMessageDialog(this, "Level " + level);
random = (int) (Math.random() * 4);
comp.add(random);
//light up sequence
for (int i = 0; i < level; i++)
{
if (comp.get(i) == 0)
{
green = green.brighter();
System.out.println("light");
repaint();
Thread.sleep(lightUpSpd);
System.out.println("dark");
green = green.darker();
repaint();
}
else if (comp.get(i) == 1)
{
red = red.brighter();
repaint();
System.out.println("light");
Thread.sleep(lightUpSpd);
System.out.println("dark");
red = red.darker();
repaint();
}
else if (comp.get(i) == 2)
{
blue = blue.brighter();
repaint();
System.out.println("light");
Thread.sleep(lightUpSpd);
System.out.println("dark");
blue = blue.darker();
repaint();
}
else {
yellow = yellow.brighter();
repaint();
System.out.println("light");
Thread.sleep(lightUpSpd);
System.out.println("dark");
yellow = yellow.darker();
repaint();
}
Thread.sleep(lightUpSpd/2);
}
}
catch (InterruptedException e){
e.printStackTrace();
}
}
public void keyPressed(KeyEvent e)
{
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();
}
}
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP)
{
green = green.darker();
repaint();
if (0 == comp.get(compCounter))
{
compCounter++;
if (compCounter == comp.size())
{
// next level
// reset compCounter
JOptionPane.showMessageDialog(this, "Correct!");
lightUpSpd = lightUpSpd - 5;
level++;
compCounter = 0;
randomColorChange();
}
}
else
{
//incorrect, end game;
JOptionPane.showMessageDialog(this, "Incorrect");
this.setVisible(false);
this.dispose();
return;
}
}
if (e.getKeyCode() == KeyEvent.VK_DOWN)
{
blue = blue.darker();
repaint();
if (2 == comp.get(compCounter))
{
compCounter++;
if (compCounter == comp.size())
{
// next level
// reset compCounter
JOptionPane.showMessageDialog(this, "Correct!");
lightUpSpd = lightUpSpd - 5;
level++;
compCounter = 0;
randomColorChange();
}
}
else
{
//incorrect; end game;
JOptionPane.showMessageDialog(this, "Incorrect");
this.setVisible(false);
this.dispose();
return;
}
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT)
{
yellow = yellow.darker();
repaint();
if (3 == comp.get(compCounter))
{
compCounter++;
if (compCounter == comp.size())
{
// next level
// reset compCounter
JOptionPane.showMessageDialog(this, "Correct!");
lightUpSpd = lightUpSpd - 5;
level++;
compCounter = 0;
randomColorChange();
}
}
else
{
//incorrect; end game;
JOptionPane.showMessageDialog(this, "Incorrect");
this.setVisible(false);
this.dispose();
return;
}
}
if (e.getKeyCode() == KeyEvent.VK_LEFT)
{
red = red.darker();
repaint();
//user.add(1);
if (1 == comp.get(compCounter))
{
compCounter++;
if (compCounter == comp.size())
{
// next level
// reset compCounter
JOptionPane.showMessageDialog(this, "Correct!");
lightUpSpd = lightUpSpd - 5;
level++;
compCounter = 0;
randomColorChange();
}
}
else
{
//incorrect; end game;
JOptionPane.showMessageDialog(this, "Incorrect");
this.setVisible(false);
this.dispose();
return;
}
}
}
public void keyTyped(KeyEvent e) {}
public void paint(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
// Blue Section
g2.setStroke(new BasicStroke(1.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));
}
}
@igknighton:我在我的回答开始时概述了我的建议。 –