0

我目前正在开发一个简单的程序,该程序将根据相应的按键突出显示一个正方形(q 表示左上角,e 表示右上角等),我似乎无法让矩形从我的键事件中触发。触发键事件,并且每个事件都满足 if 语句(在颜色 if 语句中放入 system.out 并在按下键时显示),但是,对象根本没有更新。这是我的代码:

package acm;
import acm.graphics.*;
import acm.program.*;

import java.util.*;
import java.awt.*;
import java.awt.event.*;

public class NewFinalGame extends GraphicsProgram {

    private GObject redBrick, blueBrick, yellowBrick, greenBrick;
    private GRectangle redBounds, blueBounds, yellowBounds, greenBounds;
    Color dullRed = new Color(102, 0, 0);
    Color dullBlue = new Color(0, 0, 51);
    Color dullYellow = new Color(100, 100, 0);
    Color dullGreen = new Color(0, 51, 0);
    int level = 1;

    public void init() {
        addKeyListeners();
        addMouseListeners();
        setSize(500, 500);
        setBackground(Color.black);
        mainMenu();
    }

    public void run() {
        waitForClick();
        removeAll();
        addSquares();
        redBounds = redBrick.getBounds();
        blueBounds = blueBrick.getBounds();
        yellowBounds = yellowBrick.getBounds();
        greenBounds = yellowBrick.getBounds();
    }

    public void mainMenu() {
        GLabel welcome = new GLabel("Welcome to Simon.");
        welcome.setColor(Color.white);
        add(welcome, 100, 100);
        GLabel clickToContinue = new GLabel("Click to continue...");
        clickToContinue.setColor(Color.white);
        add(clickToContinue, 150, 150);
    }

    public void addSquares() {
        yellowBrick = new GRect(50, 50, 175, 175);
        ((GRect) yellowBrick).setFilled(true);
        yellowBrick.setColor(dullYellow);
        add(yellowBrick);
        blueBrick = new GRect(275, 50, 175, 175);
        ((GRect) blueBrick).setFilled(true);
        blueBrick.setColor(dullBlue);
        add(blueBrick);
        redBrick = new GRect(50, 275, 175, 175);
        ((GRect) redBrick).setFilled(true);
        redBrick.setColor(dullRed);
        add(redBrick);
        greenBrick = new GRect(275, 275, 175, 175);
        ((GRect) greenBrick).setFilled(true);
        greenBrick.setColor(dullGreen);
        add(greenBrick);
    }

    public void highlight(GObject rect) {
        if (rect.getColor() == dullYellow) {
            System.out.println("Success!");
            rect.setColor(Color.yellow);
            pause(1000);
            rect.setColor(dullYellow);
        }
        if (rect.getColor() == dullBlue) {
            rect.setColor(Color.blue);
            pause(1000);
            rect.setColor(dullBlue);
        }
        if (rect.getColor() == dullRed) {
            rect.setColor(Color.red);
            pause(1000);
            rect.setColor(dullRed);
        }
        if (rect.getColor() == dullGreen) {
            rect.setColor(Color.green);
            pause(1000);
            rect.setColor(dullGreen);
        }
    }

    public void keyPressed(KeyEvent e) {
        switch (e.getKeyCode()) {

            case KeyEvent.VK_Q:
                highlight(yellowBrick);
                break;

            case KeyEvent.VK_W:
                highlight(blueBrick);
                break;

            case KeyEvent.VK_A:
                highlight(redBrick);
                break;

            case KeyEvent.VK_S:
                highlight(greenBrick);
                break;
        }
    }
}

感谢您的任何帮助。

4

0 回答 0