Module/Movement/KeyboardMovement
Jump to navigation
Jump to search
package jab.movement; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import jab.Module; import jab.Movement; public class KeyboardMovement extends Movement { /** * Credits * Interactive - a sample robot by Flemming N. Larsen. */ public KeyboardMovement(Module bot) { super(bot); } // Move direction: 1 = move forward, 0 = stand still, -1 = move backward int moveDirection; // Turn direction: 1 = turn right, 0 = no turning, -1 = turn left int turnDirection; // Amount of pixels/units to move double moveAmount; public void move() { // Sets the robot to move forward, backward or stop moving depending // on the move direction and amount of pixels to move bot.setAhead(moveAmount * moveDirection); // Decrement the amount of pixels to move until we reach 0 pixels // This way the robot will automatically stop if the mouse wheel // has stopped it's rotation moveAmount = Math.max(0, moveAmount - 1); // Sets the robot to turn right or turn left (at maximum speed) or // stop turning depending on the turn direction bot.setTurnRight(45 * turnDirection); // degrees } public void listenInput(InputEvent e) { if (e instanceof KeyEvent) { if (((KeyEvent) e).getID() == KeyEvent.KEY_PRESSED) switch (((KeyEvent) e).getKeyCode()) { case KeyEvent.VK_UP: moveDirection = 1; moveAmount = Double.POSITIVE_INFINITY; break; case KeyEvent.VK_DOWN: moveDirection = -1; moveAmount = Double.POSITIVE_INFINITY; break; case KeyEvent.VK_RIGHT: turnDirection = 1; break; case KeyEvent.VK_LEFT: turnDirection = -1; break; } else if (((KeyEvent) e).getID() == KeyEvent.KEY_RELEASED) switch (((KeyEvent) e).getKeyCode()) { case KeyEvent.VK_UP: case KeyEvent.VK_DOWN: // Arrow up and down keys: move direction = stand still moveDirection = 0; break; case KeyEvent.VK_RIGHT: case KeyEvent.VK_LEFT: // Arrow right and left keys: turn direction = stop turning turnDirection = 0; break; } } } }