git-subtree-dir: solution/H00 git-subtree-split: 38bca6b3b94b8413dd3377f62b730a6fd4fb892d
121 lines
3.4 KiB
Java
121 lines
3.4 KiB
Java
package h00;
|
|
|
|
import fopbot.Direction;
|
|
import fopbot.Robot;
|
|
import fopbot.RobotFamily;
|
|
import fopbot.World;
|
|
|
|
/**
|
|
* Main entry point in executing the program.
|
|
*/
|
|
public class Main {
|
|
|
|
/**
|
|
* The subtask to run.
|
|
*/
|
|
public static int runToSubtask = -1;
|
|
|
|
/**
|
|
* The world speed in milliseconds.
|
|
*/
|
|
public static int delay = 300;
|
|
|
|
/**
|
|
* Main entry point in executing the program.
|
|
*
|
|
* @param args program arguments, currently ignored
|
|
*/
|
|
public static void main(String[] args) {
|
|
// This sets up the FOPBot World with a 4x4 grid. (DO NOT TOUCH)
|
|
setupWorld();
|
|
|
|
// TODO: H0.4 - Initializing FOPBot
|
|
Robot kasper = new Robot(0, 0, Direction.DOWN, 4, RobotFamily.SQUARE_BLUE);
|
|
Robot alfred = new Robot(0, 3, Direction.DOWN, 0, RobotFamily.SQUARE_GREEN);
|
|
|
|
if (runToSubtask == 0) return; // DO NOT TOUCH!
|
|
// TODO: H0.5.1 - Turning with repeated instructions
|
|
alfred.turnLeft();
|
|
alfred.turnLeft();
|
|
|
|
if (runToSubtask == 1) return; // DO NOT TOUCH!
|
|
// TODO: H0.5.2 - Turning with for-loop
|
|
int numberOfTurns = 2;
|
|
for (int i = 0; i < numberOfTurns; i++) {
|
|
alfred.turnLeft();
|
|
}
|
|
|
|
if (runToSubtask == 2) return; // DO NOT TOUCH!
|
|
// TODO: H0.5.3 - Turning with while-loop
|
|
while (!kasper.isFacingRight()) {
|
|
kasper.turnLeft();
|
|
}
|
|
|
|
if (runToSubtask == 3) return; // DO NOT TOUCH!
|
|
// TODO: H0.6.1 - Put with repeated instructions
|
|
kasper.putCoin();
|
|
kasper.move();
|
|
kasper.move();
|
|
kasper.move();
|
|
kasper.turnLeft();
|
|
|
|
if (runToSubtask == 4) return; // DO NOT TOUCH!
|
|
// TODO: H0.6.2 - Pick with repeated instructions
|
|
alfred.move();
|
|
alfred.move();
|
|
alfred.move();
|
|
alfred.pickCoin();
|
|
alfred.turnLeft();
|
|
|
|
if (runToSubtask == 5) return; // DO NOT TOUCH!
|
|
// TODO: H0.6.3 - Put with for-loop
|
|
kasper.putCoin();
|
|
int numberOfSteps = 3;
|
|
for (int i = 0; i < numberOfSteps; i++) {
|
|
kasper.move();
|
|
}
|
|
kasper.turnLeft();
|
|
|
|
if (runToSubtask == 6) return; // DO NOT TOUCH!
|
|
// TODO: H0.7.1 - Pick with while-loop
|
|
while (alfred.isFrontClear()) {
|
|
alfred.move();
|
|
}
|
|
alfred.pickCoin();
|
|
alfred.turnLeft();
|
|
|
|
if (runToSubtask == 7) return; // DO NOT TOUCH!
|
|
// TODO: H0.7.2 - Pick and put with while-loop
|
|
kasper.putCoin();
|
|
while (alfred.isFrontClear()) {
|
|
kasper.move();
|
|
alfred.move();
|
|
}
|
|
alfred.pickCoin();
|
|
alfred.turnLeft();
|
|
kasper.turnLeft();
|
|
|
|
if (runToSubtask == 8) return; // DO NOT TOUCH!
|
|
// TODO: H0.7.3 - Put with reversed for-loop
|
|
for (int i = alfred.getNumberOfCoins(); i > 0; i--) {
|
|
alfred.putCoin();
|
|
alfred.move();
|
|
}
|
|
alfred.turnLeft();
|
|
}
|
|
|
|
public static void setupWorld() {
|
|
// variable representing width/size of world
|
|
final int worldSize = 4;
|
|
|
|
// setting world size symmetrical, meaning height = width
|
|
World.setSize(worldSize, worldSize);
|
|
|
|
// speed of how fast the world gets refreshed (e.g. how fast the robot(s) act)
|
|
// the lower the number, the faster the refresh
|
|
World.setDelay(delay);
|
|
|
|
// make it possible to see the world window
|
|
World.setVisible(true);
|
|
}
|
|
}
|