/** * World.java * * @author Zuo Yan * @version 1.2 */ package world; import java.util.ArrayList; import java.util.Iterator; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.Dimension; import java.awt.geom.AffineTransform; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.KeyListener; import java.awt.event.KeyEvent; import javax.swing.JPanel; import javax.swing.Timer; import background.*; import vehicle.*; /** * The World class contains all the world management code.

* * It handles the events that occur when buttons are clicked or * keys are pressed.

* * It governs the speed of the simulation and calls necessary methods * of objects in the world. */ public class World implements ActionListener, KeyListener { private WinEnv environment; // Our windows and buttons private Timer timer; // Frame timer public static final int FPS = 20; // Frames per second private ArrayList characters; //list of dynamic/moving world objects private ArrayList background; //list of static/non-moving world objects private boolean[] keysPressed; //list of keys monitored // Key codes to be used by the getKeyPressed() method public static final int KEY_LEFT = 0; public static final int KEY_UP = 1; public static final int KEY_RIGHT = 2; public static final int KEY_DOWN = 3; public static final int KEY_A = 4; public static final int KEY_S = 5; public static final int KEY_D = 6; public static final int KEY_W = 7; public static final int KEY_SPACE = 8; public static final int NUM_KEYS = 9; // total number of keys being monitored /** * Creates our World, empty. */ public World() { characters = new ArrayList(); background = new ArrayList(); environment = new WinEnv(this); keysPressed = new boolean[NUM_KEYS]; for (int i=0; itrue if the button is currently down and * false if the buttone is up */ public boolean getKeyPressed(int key) { assert key > -1 && key < NUM_KEYS; return keysPressed[key]; } /** Handle the key typed event */ public void keyTyped(KeyEvent e) {} /** Handle the key pressed event */ public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: keysPressed[KEY_LEFT] = true; break; case KeyEvent.VK_RIGHT: keysPressed[KEY_RIGHT] = true; break; case KeyEvent.VK_UP: keysPressed[KEY_UP] = true; break; case KeyEvent.VK_DOWN: keysPressed[KEY_DOWN] = true; break; case KeyEvent.VK_A: keysPressed[KEY_A] = true; break; case KeyEvent.VK_S: keysPressed[KEY_S] = true; break; case KeyEvent.VK_D: keysPressed[KEY_D] = true; break; case KeyEvent.VK_W: keysPressed[KEY_W] = true; break; case KeyEvent.VK_SPACE: keysPressed[KEY_SPACE] = true; break; } } /** Handle the key released event */ public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: keysPressed[KEY_LEFT] = false; break; case KeyEvent.VK_RIGHT: keysPressed[KEY_RIGHT] = false; break; case KeyEvent.VK_UP: keysPressed[KEY_UP] = false; break; case KeyEvent.VK_DOWN: keysPressed[KEY_DOWN] = false; break; case KeyEvent.VK_A: keysPressed[KEY_A] = false; break; case KeyEvent.VK_S: keysPressed[KEY_S] = false; break; case KeyEvent.VK_D: keysPressed[KEY_D] = false; break; case KeyEvent.VK_W: keysPressed[KEY_W] = false; break; case KeyEvent.VK_SPACE: keysPressed[KEY_SPACE] = false; break; } } }