/* * ---------------------------------------------------------------------------------- * "THE BEER-WARE LICENSE" (Revision 42): * <martinv@students.zcu.cz> wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. Martin Vítek * ---------------------------------------------------------------------------------- */ package cz.zcu.martinv.MyRobocodeRobots; import robocode.*; import java.awt.Color; import java.awt.event.KeyEvent; import static java.awt.event.KeyEvent.*; /** * Manualy controlled robot. * This simple robot is controlled by user using keyboard. * Keyboard keys can be changed in KeyboardKey constructors. * Accelerate with ARROW UP. * Deccelerate with ARROW DOWN. * Turn left with ARROW LEFT. * Turn right with ARROR RIGHT. * Fire with SPACEBAR. * Add firepower with NUM+. * Reduce firepower with NUM-. * * @author Martin Vítek */ public class ManualBot extends RateControlRobot { private KeyboardKey keyUp; private KeyboardKey keyDown; private KeyboardKey keyLeft; private KeyboardKey keyRight; private KeyboardKey keyFire; private KeyboardKey keyAddPower; private KeyboardKey keyReducePower; private double firePower = 1; /** * Main method - here is all robot logic. * It's called by RoboCode. */ @Override public void run() { out.format("Hi, I'm your robot!%n"); keyUp = new KeyboardKey(VK_UP); keyDown = new KeyboardKey(VK_DOWN); keyLeft = new KeyboardKey(VK_LEFT); keyRight = new KeyboardKey(VK_RIGHT); keyFire = new KeyboardKey(VK_SPACE); keyAddPower = new KeyboardKey(VK_ADD); keyReducePower = new KeyboardKey(VK_SUBTRACT); setBodyColor(Color.YELLOW); setRadarColor(Color.CYAN); setGunColor(Color.PINK); setBulletColorWrapper(firePower); setAdjustGunForRobotTurn(false); //Gun is turnig with body setAdjustRadarForGunTurn(true); //Radar movement is independent setAdjustRadarForRobotTurn(true); //Radar movement is independent setRadarRotationRate(4); while (true) { keyboard_handler(); execute(); } } /** * This method is called on key press. * It's called by RoboCode. * @param e passed by RoboCode */ @Override public void onKeyPressed(KeyEvent e) { //out.format("Key pressed:\t%d%n", e.getKeyCode()); int keyCode = e.getKeyCode(); keyUp.event(keyCode, true); keyDown.event(keyCode, true); keyLeft.event(keyCode, true); keyRight.event(keyCode, true); keyFire.event(keyCode, true); keyAddPower.event(keyCode, true); keyReducePower.event(keyCode, true); } /** * This method is called on key release. * It's called by RoboCode. * @param e passed by RoboCode */ @Override public void onKeyReleased(KeyEvent e) { //out.format("Key released:\t%d%n", e.getKeyCode()); int keyCode = e.getKeyCode(); keyUp.event(keyCode, false); keyDown.event(keyCode, false); keyLeft.event(keyCode, false); keyRight.event(keyCode, false); keyFire.event(keyCode, false); keyAddPower.event(keyCode, false); keyReducePower.event(keyCode, false); } /** * This method is called when this robot wins. * It's called by RoboCode. * @param e passed by RoboCode */ @Override public void onWin(WinEvent e) { setRadarRotationRate(100); turnRight(-360); execute(); } /** * Handling keyboard inputs. */ private void keyboard_handler() { /** * Down */ if (keyUp.isPressed() && !keyDown.isPressed()) { if (keyUp.getCount() < 2) setVelocityRate(2); if ((keyUp.getCount() >= 2) && (keyUp.getCount() < 15)) setVelocityRate(4); if ((keyUp.getCount() >= 15) && (keyUp.getCount() < 30)) setVelocityRate(8); if (keyUp.getCount() >= 30) setVelocityRate(12); } else if (!keyDown.isPressed()) setVelocityRate(0); /** * Down */ if (keyDown.isPressed() && !keyUp.isPressed()) { if (keyDown.getCount() < 2) setVelocityRate(-1); if ((keyDown.getCount() >= 2) && (keyDown.getCount() < 15)) setVelocityRate(-2); if ((keyDown.getCount() >= 15) && (keyDown.getCount() < 30)) setVelocityRate(-3); if (keyDown.getCount() >= 30) setVelocityRate(-4); } else if (!keyUp.isPressed()) setVelocityRate(0); /** * Left */ if (keyLeft.isPressed() && !keyRight.isPressed())setTurnRate(-5); else if (!keyRight.isPressed()) setTurnRate(0); /** * Right */ if (keyRight.isPressed() && !keyLeft.isPressed()) setTurnRate(5); else if (!keyLeft.isPressed()) setTurnRate(0); /** * Fire */ if (keyFire.isPressed()) setFire(firePower); /** * Add Power */ if (keyAddPower.getAndServicePress() && !keyReducePower.isPressed()) { if (firePower <= 2.5) firePower += 0.5; setBulletColorWrapper(firePower); out.format("Fire power is now: %f%n", firePower); } /** * Reduce Power */ if (keyReducePower.getAndServicePress() && !keyAddPower.isPressed()) { if (firePower >= 0.5) firePower -= 0.5; setBulletColorWrapper(firePower); out.format("Fire power is now: %f%n", firePower); } } /** * Wrapper for setBulletColor(). * Sets bullet color based on power. * @param power bullet power in range 0.0 - 3.0 */ private void setBulletColorWrapper(double power) { if ((firePower >= 0.0) && (firePower < 1.0)) setBulletColor(Color.WHITE); else if ((firePower >= 1.0) && (firePower < 2.0)) setBulletColor(Color.YELLOW); else if ((firePower >= 2.0) && (firePower <= 3.0)) setBulletColor(Color.RED); else return; } }