0

I am currently working on a simple program that will highlight a square depending on the corresponding key press (q for top left, e for top right, etc), and I cannot seem to get the rectangles to trigger from my key events. The key events are triggered, and the if statements are met for each one (put in a system.out in the color if statement and it displayed when key was pressed), however, the objects are not updating at all. Here is my code:

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;
        }
    }
}

Thank you for any help.

Martijn Pieters
  • 1,048,767
  • 296
  • 4,058
  • 3,343
Fenster
  • 11
  • 5
  • Your main processing loop will be blocking on the `pause` calls, so the `flashing` that you are hoping for will not happen. if you were to simply change the color and continue it should work. – Scary Wombat Dec 15 '15 at 05:55
  • @ScaryWombat Thanks! Thats really helpful, It worked. However, what is a way that I could get it to flash? I tried making another method to wait then bring it back to it's dull color, however, the pause is probably blocking. I'm pretty new to java (first quarter) and could really use some help. – Fenster Dec 15 '15 at 06:03
  • try using a timer see http://stackoverflow.com/questions/8281525/how-to-handle-timers-correctly-in-java for a simplistic example – Scary Wombat Dec 15 '15 at 06:17

0 Answers0