/*******************************************************************************
* Copyright (c) 2001, 2010 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
*
* Contributors:
* Pavel Savara
* - Initial implementation
*******************************************************************************/
package tested.robots;
import robocode.AdvancedRobot;
import robocode.SkippedTurnEvent;
import robocode.StatusEvent;
/**
* @author Pavel Savara (original)
*/
public class SkipTurns extends AdvancedRobot {
private volatile int skipped = 0;
static final int LIMIT = 5;
@Override
public void run() {
// noinspection InfiniteLoopStatement
for (;;) {
if (skipped > LIMIT) {
throw new Error("satisfied, end battle please");
}
turnLeft(10);
if (skipped > LIMIT) {
// satisfied, end battle please
throw new Error();
}
ahead(1);
if (skipped > LIMIT) {
// satisfied, end battle please
throw new Error();
}
turnLeft(10);
if (skipped > LIMIT) {
// satisfied, end battle please
throw new Error();
}
back(1);
}
}
@Override
public void onStatus(StatusEvent e) {
out.println("live");
slowResponse();
}
@Override
public void onSkippedTurn(SkippedTurnEvent event) {
out.println("Skipped!!!");
skipped++;
}
private final Object w = new Object();
private void slowResponse() {
synchronized (w) {
try {
if (skipped > 3) {
w.wait(3000);
} else {
w.wait(130);
}
} catch (InterruptedException e) {
// eat interrupt
e.printStackTrace(out);
}
}
}
}