1 /* 2 * Copyright (c) 2001-2021 Mathew A. Nelson and Robocode contributors 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * https://robocode.sourceforge.io/license/epl-v10.html 7 */ 8 package sample; 9 10 11 import robocode.HitRobotEvent; 12 import robocode.Robot; 13 import robocode.ScannedRobotEvent; 14 15 import java.awt.*; 16 17 18 /** 19 * Walls - a sample robot by Mathew Nelson, and maintained by Flemming N. Larsen 20 * <p> 21 * Moves around the outer edge with the gun facing in. 22 * 23 * @author Mathew A. Nelson (original) 24 * @author Flemming N. Larsen (contributor) 25 */ 26 public class Walls extends Robot { 27 28 boolean peek; // Don't turn if there's a robot there 29 double moveAmount; // How much to move 30 31 /** 32 * run: Move around the walls 33 */ run()34 public void run() { 35 // Set colors 36 setBodyColor(Color.black); 37 setGunColor(Color.black); 38 setRadarColor(Color.orange); 39 setBulletColor(Color.cyan); 40 setScanColor(Color.cyan); 41 42 // Initialize moveAmount to the maximum possible for this battlefield. 43 moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight()); 44 // Initialize peek to false 45 peek = false; 46 47 // turnLeft to face a wall. 48 // getHeading() % 90 means the remainder of 49 // getHeading() divided by 90. 50 turnLeft(getHeading() % 90); 51 ahead(moveAmount); 52 // Turn the gun to turn right 90 degrees. 53 peek = true; 54 turnGunRight(90); 55 turnRight(90); 56 57 while (true) { 58 // Look before we turn when ahead() completes. 59 peek = true; 60 // Move up the wall 61 ahead(moveAmount); 62 // Don't look now 63 peek = false; 64 // Turn to the next wall 65 turnRight(90); 66 } 67 } 68 69 /** 70 * onHitRobot: Move away a bit. 71 */ onHitRobot(HitRobotEvent e)72 public void onHitRobot(HitRobotEvent e) { 73 // If he's in front of us, set back up a bit. 74 if (e.getBearing() > -90 && e.getBearing() < 90) { 75 back(100); 76 } // else he's in back of us, so set ahead a bit. 77 else { 78 ahead(100); 79 } 80 } 81 82 /** 83 * onScannedRobot: Fire! 84 */ onScannedRobot(ScannedRobotEvent e)85 public void onScannedRobot(ScannedRobotEvent e) { 86 fire(2); 87 // Note that scan is called automatically when the robot is moving. 88 // By calling it manually here, we make sure we generate another scan event if there's a robot on the next 89 // wall, so that we do not start moving up it until it's gone. 90 if (peek) { 91 scan(); 92 } 93 } 94 } 95