public Mice(Mice mice) { memory = new Memory(mice.getMemory()); curPoint = new Point(mice.getCurPoint().X, mice.getCurPoint().Y); this.healthPoint = mice.getHealthPoint(); this.manaPoint = mice.getManaPoint(); }
public void scan(int scanX, int scanY) { if (ShortestPath.count >= 0) //마나가 10 이상이고, 도착지를 찾지 못했을 때 스캔 { int temp = 0; int hp = mice.getHealthPoint(); if ((MAX_HP - hp) % (MAX_HP / 100) < 10) //에너지가 1% 소모되면 목적지를 스캔 { scanX = ShortestPath.end_row; scanY = ShortestPath.end_col; if (ShortestPath.end_row == 1) { scanX--; scanY++; } // 위쪽 벽일 때 if (ShortestPath.end_col == 1) { scanX++; scanY++; } // 왼쪽 벽일 때 if (ShortestPath.end_row == maze.getRow()) { scanX--; scanY++; } //아래쪽 벽일 때 if (ShortestPath.end_col == maze.getCol()) { scanX--; scanY--; } //오른쪽 벽일 때 temp ^= 1; } mice.scan(new Point(scanX, scanY), maze); for (int j = scanX - 1; j <= scanX + 1; j++) { for (int k = scanY - 1; k <= scanY + 1; k++) { revealCanvas(j, k); if ((j == maze.getRow() || (k == maze.getCol() && j < maze.getRow() - 1) || (j == 1 && k < maze.getCol()) || k == 1) && maze.isAvailable(j, k)) { ShortestPath.end_row = j; ShortestPath.end_col = k; ShortestPath.count = -1; } } } if (temp == 0) //시작지점부터 시계방향으로 3X3 스캔 { if (scan_row < 3 && scan_col <= maze.getCol() - 3) { scan_row = 1; scan_col += 3; } else if (scan_row <= maze.getRow() - 3 && scan_col > maze.getCol() - 3) { scan_row += 3; scan_col = maze.getCol() - 2; } else if (scan_row > maze.getRow() - 3 && scan_col >= 3) { scan_row = maze.getRow() - 2; scan_col -= 3; } else if (scan_row >= 3 && scan_col < 3) { scan_row -= 3; scan_col = 1; } } } else if (ShortestPath.count >= -4) //마나가 10 이상이고, 도착지를 찾았을 때 스캔 - 도착지 주변을 추가로 4번 스캔 { mice.scan(new Point(scanX, scanY), maze); for (int j = scanX - 1; j <= scanX + 1; j++) { for (int k = scanY - 1; k <= scanY + 1; k++) { revealCanvas(j, k); } } if (ShortestPath.count == -1) { if (scan_row < 3 && scan_col < maze.getCol() - 3) { scan_row += 3; } else if (scan_row < maze.getRow() - 3 && scan_col >= maze.getCol() - 3) { scan_col -= 3; } else if (scan_row >= maze.getRow() - 3 && scan_col > 3) { scan_row -= 3; } else if (scan_row > 3 && scan_col < 3) { scan_col += 3; } } else if (ShortestPath.count == -2) { if (scan_row < 6 && scan_col < maze.getCol() - 3) { scan_col -= 3; } else if (scan_row < maze.getRow() - 3 && scan_col >= maze.getCol() - 6) { scan_row -= 3; } else if (scan_row >= maze.getRow() - 6 && scan_col > 3) { scan_col += 3; } else if (scan_row > 3 && scan_col < 6) { scan_row += 3; } } else if (ShortestPath.count == -3) { if (scan_row < 6 && scan_col < maze.getCol() - 6) { scan_col -= 3; } else if (scan_row < maze.getRow() - 6 && scan_col >= maze.getCol() - 6) { scan_row -= 3; } else if (scan_row >= maze.getRow() - 6 && scan_col > 6) { scan_col += 3; } else if (scan_row > 6 && scan_col < 6) { scan_row += 3; } } ShortestPath.count--; } }