/** * 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; ifalse
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;
}
}
}