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