diff --git a/src/RumbleBot.java b/src/RumbleBot.java index 07046ed..453aa75 100644 --- a/src/RumbleBot.java +++ b/src/RumbleBot.java @@ -1,18 +1,22 @@ import java.util.LinkedList; import java.util.Queue; +import java.util.Random; public class RumbleBot extends Bot { protected final static String obstacles = "~#X*"; protected final static String targets = "v^<>"; - protected boolean offByOne = true; - protected int currentStepCount = 0; + + protected Random random = new Random(); protected int steps = 0; public static void main(String[] args) { if(args.length == 0) { String[] dummyArgs = {"localhost", "63187"}; - Bot dummy = new EnemyBot(dummyArgs); - new Thread(dummy).start(); + new Thread(new EnemyBot(dummyArgs)).start(); + new Thread(new EnemyBot(dummyArgs)).start(); + new Thread(new EnemyBot(dummyArgs)).start(); + new Thread(new EnemyBot(dummyArgs)).start(); + new Thread(new EnemyBot(dummyArgs)).start(); } Bot bot = new RumbleBot(args); @@ -45,7 +49,10 @@ public class RumbleBot extends Bot { protected char[][] dataToGrid(String data, int size) { char[][] grid = new char[size][size]; for (int i = 0; i < data.length(); i++) { - grid[i % size][i / size] = data.charAt(i); + char c = data.charAt(i); + if("ABCDEFGHIJKLMNOPQRSTUVWYZ".contains("" + c)) + c = 'A'; + grid[i % size][i / size] = c; } return grid; } @@ -54,26 +61,34 @@ public class RumbleBot extends Bot { int size = grid.length; for (int x = 0; x < size; x++) { for (int y = 0; y < size; y++) { + int[][] dir = {{0, -1}, {0, 1}, {1, 0}, {-1, 0}}; + switch (grid[x][y]) { - case 'v' -> markLine(grid, x, y, 0, 1); - case '^' -> markLine(grid, x, y, 0, -1); - case '>' -> markLine(grid, x, y, 1, 0); - case '<' -> markLine(grid, x, y, -1, 0); + case '^' -> markLine(grid, x, y, dir[0], '*'); + case 'v' -> markLine(grid, x, y, dir[1], '*'); + case '>' -> markLine(grid, x, y, dir[2], '*'); + case '<' -> markLine(grid, x, y, dir[3], '*'); + } + + if(targets.contains("" + grid[x][y])) { + for (int[] direction : dir) { + markLine(grid, x, y, direction, 'o'); + } } } } } - private void markLine(char[][] grid, int x, int y, int dx, int dy) { + private void markLine(char[][] grid, int x, int y, int[] dir, char c) { int size = grid.length; - x += dx; - y += dy; + x += dir[0]; + y += dir[1]; while (x >= 0 && x < size && y >= 0 && y < size && !obstacles.contains("" + grid[x][y])) { if (grid[x][y] == '.') { - grid[x][y] = '*'; + grid[x][y] = c; } - x += dx; - y += dy; + x += dir[0]; + y += dir[1]; } } @@ -91,12 +106,7 @@ public class RumbleBot extends Bot { protected char walkAround(char[][] grid) { if (steps == 0) { - currentStepCount = (currentStepCount + 1) % 10; - if (offByOne) { - currentStepCount++; - } - offByOne = !offByOne; - steps = currentStepCount; + steps = random.nextInt(20); return '>'; } else { steps--;