// Build the board with predetermined values for each object in the game private void buildBoardValue(Gameboard gameboard, Player player, Opponent opponent) { // resets the tilevalue, inReachTurrent and inReachBullet values for (int i = 0; i < gameboard.getWidth(); i++) { for (int j = 0; j < gameboard.getHeight(); j++) { tileValue[i][j] = 0; for (int k = 0; k < 4; k++) { inReachTurret[i][j][k] = null; inReachBullet[i][j][k] = null; } } } ArrayList<PowerUp> allPowerUps = gameboard.getPowerUps(); // set the value for each powertype for (int i = 0; i < allPowerUps.size(); i++) { switch (allPowerUps.get(i).getPowerUpType()) { case SHIELD: tileValue[allPowerUps.get(i).getX()][allPowerUps.get(i).getY()] = 50; break; case LASER: tileValue[allPowerUps.get(i).getX()][allPowerUps.get(i).getY()] = 45; break; case TELEPORT: tileValue[allPowerUps.get(i).getX()][allPowerUps.get(i).getY()] = 40; break; } } ArrayList<Turret> allTurrets = gameboard.getTurrets(); // sets the value according to condition of the bot for (int i = 0; i < allTurrets.size(); i++) { Turret t = allTurrets.get(i); tileValue[t.getX()][t.getY()] = -1000; if (!t.isDead()) { Boolean[] goDir = {true, true, true, true}; int shieldVal = 0; if (player.isShieldActive()) { shieldVal = 100; } else if (player.getLaserCount() > 0) { shieldVal = 60; } else if (player.getShieldCount() > 0) { shieldVal = 43; } else { shieldVal = -10; } for (int j = 1; j <= 5; j++) { try { int nx, ny; nx = (t.getX() + j) % gameboard.getWidth(); ny = t.getY(); if (gameboard.isWallAtTile(nx, ny)) goDir[0] = false; else if (goDir[0]) { tileValue[nx][ny] = shieldVal; inReachTurret[nx][ny][returnNextIndex(inReachTurret[nx][ny])] = t; } nx = (t.getX() - j + gameboard.getWidth()) % gameboard.getWidth(); ny = t.getY(); if (gameboard.isWallAtTile(nx, ny)) goDir[1] = false; else if (goDir[1]) { tileValue[nx][ny] = shieldVal; inReachTurret[nx][ny][returnNextIndex(inReachTurret[nx][ny])] = t; } nx = t.getX(); ny = (t.getY() + j) % gameboard.getHeight(); if (gameboard.isWallAtTile(nx, ny)) goDir[2] = false; else if (goDir[2]) { tileValue[nx][ny] = shieldVal; inReachTurret[nx][ny][returnNextIndex(inReachTurret[nx][ny])] = t; } nx = t.getX(); ny = (t.getY() - j + gameboard.getHeight()) % gameboard.getHeight(); if (gameboard.isWallAtTile(nx, ny)) goDir[3] = false; else if (goDir[3]) { tileValue[nx][ny] = shieldVal; inReachTurret[nx][ny][returnNextIndex(inReachTurret[nx][ny])] = t; } } catch (Exception e) { } } } } // Adjust the tile values to incorporate whether the opponent has laser or not Boolean[] goDir = {true, true, true, true}; if (opponent.getLaserCount() >= 1) { try { for (int j = 1; j <= 5; j++) { int nx, ny; nx = (opponent.getX() + j) % gameboard.getWidth(); ny = opponent.getY(); if (gameboard.isWallAtTile(nx, ny)) goDir[0] = false; else if (goDir[0]) { if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -1; } nx = (opponent.getX() - j + gameboard.getWidth()) % gameboard.getWidth(); ny = opponent.getY(); if (gameboard.isWallAtTile(nx, ny)) goDir[1] = false; else if (goDir[1]) { if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -1; } nx = opponent.getX(); ny = (opponent.getY() + j) % gameboard.getHeight(); if (gameboard.isWallAtTile(nx, ny)) goDir[2] = false; else if (goDir[2]) { if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -1; } nx = opponent.getX(); ny = (opponent.getY() - j + gameboard.getHeight()) % gameboard.getHeight(); if (gameboard.isWallAtTile(nx, ny)) goDir[3] = false; else if (goDir[3]) { if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -1; } } } catch (Exception e) { } } // modifies the gameboard tile vales to incorporate bullets for (int i = 0; i < gameboard.getBullets().size(); i++) { Bullet b = gameboard.getBullets().get(i); int h = gameboard.getHeight(); int w = gameboard.getWidth(); int nx, ny; switch (b.getDirection()) { case UP: nx = b.getX(); ny = (b.getY() + h - 1) % h; if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -2; inReachBullet[nx][ny][returnNextIndex(inReachBullet[nx][ny])] = b; break; case RIGHT: nx = (b.getX() + 1) % w; ny = b.getY(); if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -2; inReachBullet[nx][ny][returnNextIndex(inReachBullet[nx][ny])] = b; break; case DOWN: nx = b.getX(); ny = (b.getY() + 1) % h; if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -2; inReachBullet[nx][ny][returnNextIndex(inReachBullet[nx][ny])] = b; break; case LEFT: nx = (b.getX() + w - 1) % w; ny = b.getY(); if (nx == player.getX() && ny == player.getY()) tileValue[nx][ny] = -4; else tileValue[nx][ny] = -2; inReachBullet[nx][ny][returnNextIndex(inReachBullet[nx][ny])] = b; break; } } ArrayList<Wall> allWalls = gameboard.getWalls(); for (int i = 0; i < allWalls.size(); i++) { tileValue[allWalls.get(i).getX()][allWalls.get(i).getY()] = -1000; } }