Пример #1
0
        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--;
            }
        }