Difference between revisions of "Thread:User talk:Gertjan1996/I have to make a 1v1 robot/reply (2)"

From Robowiki
Jump to navigation Jump to search
m
m
 
Line 55: Line 55:
 
peek = true;
 
peek = true;
 
turnGunRight(90);
 
turnGunRight(90);
turnRight(90);
 
 
while (true) {
 
// Look before we turn when ahead() completes.
 
peek = true;
 
// Move up the wall
 
ahead(moveAmount);
 
// Don't look now
 
peek = false;
 
// Turn to the next wall
 
turnRight(90);
 
}
 
}
 
 
/**
 
* onHitRobot:  Move away a bit.
 
*/
 
public void onHitRobot(HitRobotEvent e) {
 
// If he's in front of us, set back up a bit.
 
if (e.getBearing() > -90 && e.getBearing() < 90) {
 
back(100);
 
} // else he's in back of us, so set ahead a bit.
 
else {
 
ahead(100);
 
}
 
}
 
 
/**
 
* onScannedRobot:  Fire!
 
*/
 
public void onScannedRobot(ScannedRobotEvent e) {
 
fire(2);
 
// Note that scan is called automatically when the robot is moving.
 
// By calling it manually here, we make sure we generate another scan event if there's a robot on the next
 
// wall, so that we do not start moving up it until it's gone.
 
if (peek) {
 
scan();
 
}
 
}
 
}
 
</syntaxhighlight>
 
<syntaxhighlight>
 
/*******************************************************************************
 
* Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
 
* All rights reserved. This program and the accompanying materials
 
* are made available under the terms of the Eclipse Public License v1.0
 
* which accompanies this distribution, and is available at
 
* http://robocode.sourceforge.net/license/epl-v10.html
 
*******************************************************************************/
 
package sample;
 
 
 
import robocode.HitRobotEvent;
 
import robocode.Robot;
 
import robocode.ScannedRobotEvent;
 
 
import java.awt.*;
 
 
 
/**
 
* Walls - a sample robot by Mathew Nelson, and maintained by Flemming N. Larsen
 
* <p/>
 
* Moves around the outer edge with the gun facing in.
 
*
 
* @author Mathew A. Nelson (original)
 
* @author Flemming N. Larsen (contributor)
 
*/
 
public class Walls extends Robot {
 
 
boolean peek; // Don't turn if there's a robot there
 
double moveAmount; // How much to move
 
 
/**
 
* run: Move around the walls
 
*/
 
public void run() {
 
// Set colors
 
setBodyColor(Color.black);
 
setGunColor(Color.black);
 
setRadarColor(Color.orange);
 
setBulletColor(Color.cyan);
 
setScanColor(Color.cyan);
 
 
// Initialize moveAmount to the maximum possible for this battlefield.
 
moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight());
 
// Initialize peek to false
 
peek = false;
 
 
// turnLeft to face a wall.
 
// getHeading() % 90 means the remainder of
 
// getHeading() divided by 90.
 
turnLeft(getHeading() % 90);
 
ahead(moveAmount);
 
// Turn the gun to turn right 90 degrees.
 
peek = true;
 
import robocode.util.Utils;
 
 
public void run() {
 
    // ...
 
 
    turnRadarRightRadians(Double.POSITIVE_INFINITY);
 
    do {
 
        // Check for new targets.
 
        // Only necessary for Narrow Lock because sometimes our radar is already
 
        // pointed at the enemy and our onScannedRobot code doesn't end up telling
 
        // it to turn, so the system doesn't automatically call scan() for us
 
        // [see the javadocs for scan()].
 
        scan();
 
    } while (true);
 
}
 
 
public void onScannedRobot(ScannedRobotEvent e) {
 
    double radarTurn =
 
        // Absolute bearing to target
 
        getHeadingRadians() + e.getBearingRadians()
 
        // Subtract current radar heading to get turn required
 
        - getRadarHeadingRadians();
 
 
    setTurnRadarRightRadians(Utils.normalRelativeAngle(radarTurn));
 
 
    // ...
 
}
 
 
turnRight(90);
 
turnRight(90);
  

Latest revision as of 21:13, 21 May 2014

http://robowiki.net/wiki/One_on_One_Radar

/*******************************************************************************
 * Copyright (c) 2001-2014 Mathew A. Nelson and Robocode contributors
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://robocode.sourceforge.net/license/epl-v10.html
 *******************************************************************************/
package sample;


import robocode.HitRobotEvent;
import robocode.Robot;
import robocode.ScannedRobotEvent;

import java.awt.*;


/**
 * Walls - a sample robot by Mathew Nelson, and maintained by Flemming N. Larsen
 * <p/>
 * Moves around the outer edge with the gun facing in.
 *
 * @author Mathew A. Nelson (original)
 * @author Flemming N. Larsen (contributor)
 */
public class Walls extends Robot {

	boolean peek; // Don't turn if there's a robot there
	double moveAmount; // How much to move

	/**
	 * run: Move around the walls
	 */
	public void run() {
		// Set colors
		setBodyColor(Color.black);
		setGunColor(Color.black);
		setRadarColor(Color.orange);
		setBulletColor(Color.cyan);
		setScanColor(Color.cyan);

		// Initialize moveAmount to the maximum possible for this battlefield.
		moveAmount = Math.max(getBattleFieldWidth(), getBattleFieldHeight());
		// Initialize peek to false
		peek = false;

		// turnLeft to face a wall.
		// getHeading() % 90 means the remainder of
		// getHeading() divided by 90.
		turnLeft(getHeading() % 90);
		ahead(moveAmount);
		// Turn the gun to turn right 90 degrees.
		peek = true;
		turnGunRight(90);
		turnRight(90);

		while (true) {
			// Look before we turn when ahead() completes.
			peek = true;
			// Move up the wall
			ahead(moveAmount);
			// Don't look now
			peek = false;
			// Turn to the next wall
			turnRight(90);
		}
	}

	/**
	 * onHitRobot:  Move away a bit.
	 */
	public void onHitRobot(HitRobotEvent e) {
		// If he's in front of us, set back up a bit.
		if (e.getBearing() > -90 && e.getBearing() < 90) {
			back(100);
		} // else he's in back of us, so set ahead a bit.
		else {
			ahead(100);
		}
	}

	/**
	 * onScannedRobot:  Fire!
	 */
	public void onScannedRobot(ScannedRobotEvent e) {
		fire(2);
		// Note that scan is called automatically when the robot is moving.
		// By calling it manually here, we make sure we generate another scan event if there's a robot on the next
		// wall, so that we do not start moving up it until it's gone.
		if (peek) {
			scan();
		}
	}
}