コード例 #1
0
        public void Update(Hacker hacker)
        {
            InitStart(hacker);
            InitMap(hacker);
            Astar       astar = new Astar(map1, start, end, lenX, lenZ);
            List <Grid> path  = astar.Run();

            if (path[1].x - path[0].x == 1)
            {
                hacker.MoveEast();
            }
            if (path[1].x - path[0].x == -1)
            {
                hacker.MoveWest();
            }
            if (path[1].z - path[0].z == 1)
            {
                hacker.MoveNorth();
            }
            if (path[1].z - path[0].z == -1)
            {
                hacker.MoveSouth();
            }
        }
コード例 #2
0
ファイル: Controller.cs プロジェクト: Excaive/12th-Turing-Cup
        public void Update(Hacker hacker)
        {
            //bool updateTargetFlag = false;
            if (!infoGot)
            {
                //获取当前角色序号
                index = hacker.GetIndex();

                //获取地图尺寸
                mapSize = hacker.GetMapInfo();  // 20  2  22

                //获取地图
                foreach (int x in Range(mapSize[0]))
                {
                    List <List <int?> > nextX = new List <List <int?> >();
                    foreach (int y in Range(1, mapSize[1] + 1))
                    {
                        List <int?> nextY = new List <int?>();
                        foreach (int z in Range(mapSize[2]))
                        {
                            nextY.Add(hacker.GetMapType(x, y, z));
                        }
                        nextX.Add(nextY);
                    }
                    map.Add(nextX);
                }

                //获取钥匙位置
                int[] temp = { 0, 0, 0 };
                keysPosition.Add(temp);
                foreach (int i in Range(1, 4))
                {
                    string sOut = "Key" + i + "  ";
                    keysPosition.Add(hacker.GetKeysPosition(i));
                    sOut += keysPosition[i][0] + "  " + keysPosition[i][1] + "  " + keysPosition[i][2];
                    //logger.info(sOut);
                }

                //获取出口位置
                foreach (int i in Range(4))
                {
                    string sOut = "Exit" + i + "  ";
                    exitPosition.Add(hacker.GetExitPosition(i));
                    sOut += exitPosition[i][0] + "  " + exitPosition[i][1] + "  " + exitPosition[i][2];
                    //logger.info(sOut);
                }

                //获取电梯位置
                foreach (int i in Range(1, 3))
                {
                    string       sOut         = "Elevator" + i + "  ";
                    List <int[]> elevatorTemp = new List <int[]>();
                    int[]        ele          = hacker.GetElevatorPosition(i);
                    int[]        eleF1        = { ele[0], 1, ele[1] };
                    int[]        eleF2        = { ele[0], 2, ele[1] };
                    elevatorTemp.Add(eleF1);
                    elevatorTemp.Add(eleF2);
                    elevatorPosition.Add(elevatorTemp);
                    sOut += elevatorPosition[i - 1][0][0] + "  " + elevatorPosition[i - 1][0][1] + "  " + elevatorPosition[i - 1][0][2] + "\n";
                    sOut += elevatorPosition[i - 1][1][0] + "  " + elevatorPosition[i - 1][1][1] + "  " + elevatorPosition[i - 1][1][2] + "\n";
                    //logger.info(sOut);
                }

                //获取逃跑者位置
                foreach (int i in Range(1, 4))
                {
                    hackerPosition.Add(hacker.HackerPosition(i));
                }

                //估计抓捕者位置
                policePosition = exitPosition[0];
                //updateTargetFlag = true;
                selfPosition = hacker.GetPosition();
                target       = ChooseTargetV2();

                infoGot = true;

                //LOG

                /*
                 * logger.info("index  " + index);
                 * logger.info("mapSize  " + mapSize[0] + "  " + mapSize[1] + "  " + mapSize[2] + "  ");
                 *
                 * for (int z = mapSize[2] - 1; z >= 0; z--)
                 * {
                 *  string sOut = "[1]";
                 *  for (int x = 0; x < mapSize[0]; x++)
                 *  {
                 *      sOut += map[x][0][z].ToString() + ",";
                 *  }
                 *  logger.info(sOut);
                 * }
                 * logger.info(" ");
                 *
                 * for (int z = mapSize[2] - 1; z >= 0; z--)
                 * {
                 *  string sOut = "[2]";
                 *  for (int x = 0; x < mapSize[0]; x++)
                 *  {
                 *      sOut += map[x][1][z].ToString() + ",";
                 *  }
                 *  logger.info(sOut);
                 * }
                 * logger.info(" ");
                 */

                //初始化
                selfPosition = hacker.GetPosition();


                string log2 = "POINTLIST ";
                pointList = SearchShortest();

                foreach (int[] point in pointList)
                {
                    log2 += "(" + point[0] + ", " + point[1] + ", " + point[2] + ") ";
                }
                //logger.info(log2);
            }

            //实时更新逃跑者位置与抓捕者(可能的)位置
            foreach (int i in Range(1, 4))
            {
                int[] tempPosition = hacker.HackerPosition(i);

                if ((tempPosition == null) && (hackerPosition[i - 1] != null))
                {
                    bool someoneIsArrestedTemp = true;
                    foreach (int j in Range(4))
                    {
                        /*
                         * if (FindWayWholeMap(hackerPosition[i - 1], exitPosition[j]).Count > 1)
                         * {
                         *  policePosition = hackerPosition[i - 1];
                         *  someoneIsArrested = true;
                         *  updateTargetFlag = true;
                         *  logger.info("Hacker " + i + " is arrested!  PolicePosition: (" + policePosition[0] + ", " + policePosition[1] + ", " + policePosition[2] + ")");
                         *  break;
                         * }
                         */
                        if (FindWayWholeMap(hackerPosition[i - 1], exitPosition[j]).Count <= 1)
                        {
                            someoneIsArrestedTemp = false;
                        }
                        //logger.info("DISTANCE[" + j + "]: " + FindWayWholeMap(hackerPosition[i - 1], exitPosition[j]).Count);
                    }
                    if (someoneIsArrestedTemp)
                    {
                        policePosition    = hackerPosition[i - 1];
                        someoneIsArrested = true;
                        //updateTargetFlag = true;
                        if (myKey != 0)
                        {
                            target = ChooseTargetV2();
                        }
                        //logger.info("Hacker " + i + " is arrested!  PolicePosition: (" + policePosition[0] + ", " + policePosition[1] + ", " + policePosition[2] + "), " + "policePositionUpdateSteps: " + policePositionUpdateSteps);
                    }
                }
                hackerPosition[i - 1] = hacker.HackerPosition(i);
            }

            if (hacker.Warning())
            {
                int[] policeNewPosition = hacker.GetPolicePosition();
                if (!(policeNewPosition[0] == policePosition[0] && policeNewPosition[1] == policePosition[1] && policeNewPosition[2] == policePosition[2]))
                {
                    target = ChooseTargetV2();
                }
                policePosition = hacker.GetPolicePosition();
                //updateTargetFlag = true;
                //target = ChooseTargetV2();
                policePositionUpdateSteps = 0;
                //logger.info("Warning!  PolicePosition: (" + policePosition[0] + ", " + policePosition[1] + ", " + policePosition[2] + ")" + ", SelfPosition: (" + selfPosition[0] + ", " + selfPosition[1] + ", " + selfPosition[2] + "), " + "policePositionUpdateSteps: " + policePositionUpdateSteps);
            }



            //实时更新自己拥有的钥匙
            int newMyKey = hacker.haveKey();

            if ((myKey == 0) && (newMyKey != 0))
            {
                //logger.info("GET KEY " + newMyKey + "!");
                //updateTargetFlag = true;
                myKey  = newMyKey;
                target = ChooseTargetV2();
            }
            myKey = newMyKey;

            if (!hacker.isMoving())//不在移动
            {
                selfPosition = hacker.GetPosition();

                if (FindWaySafe(selfPosition, target).Count == 0)
                {
                    target = ChooseTargetV2();
                }

                //int[] target = ChooseTarget();

                /*
                 * if (updateTargetFlag == true)
                 * {
                 *  target = ChooseTargetV2();
                 * }
                 */

                track = FindWaySafe(selfPosition, target);

                if (track.Count > 0)
                {
                    switch (track[0].direction)
                    {
                    case "U":
                        hacker.MoveNorth();
                        break;

                    case "D":
                        hacker.MoveSouth();
                        break;

                    case "L":
                        hacker.MoveWest();
                        break;

                    case "R":
                        hacker.MoveEast();
                        break;
                    }
                    track.Remove(track[0]);
                }
                int timeRest = hacker.GetGameTime();
                //logger.info("timeRest: " + timeRest);

                if (!hacker.Warning())
                {
                    policePositionUpdateSteps += 1;
                }
            }
        }
コード例 #3
0
        public void Update(Hacker hacker)
        {
            if (!infoGot)
            {
                //获取当前角色序号
                index = hacker.GetIndex();

                //获取地图尺寸
                mapSize = hacker.GetMapInfo();  // 20  2  22

                //获取地图
                foreach (int x in Range(mapSize[0]))
                {
                    List <List <int?> > nextX = new List <List <int?> >();
                    foreach (int y in Range(1, mapSize[1] + 1))
                    {
                        List <int?> nextY = new List <int?>();
                        foreach (int z in Range(mapSize[2]))
                        {
                            nextY.Add(hacker.GetMapType(x, y, z));
                        }
                        nextX.Add(nextY);
                    }
                    map.Add(nextX);
                }

                //获取钥匙位置
                int[] temp = { 0, 0, 0 };
                keysPosition.Add(temp);
                foreach (int i in Range(1, 4))
                {
                    string sOut = "Key" + i + "  ";
                    keysPosition.Add(hacker.GetKeysPosition(i));
                    sOut += keysPosition[i][0] + "  " + keysPosition[i][1] + "  " + keysPosition[i][2];
                    //logger.info(sOut);
                }

                //获取出口位置
                foreach (int i in Range(4))
                {
                    string sOut = "Exit" + i + "  ";
                    exitPosition.Add(hacker.GetExitPosition(i));
                    sOut += exitPosition[i][0] + "  " + exitPosition[i][1] + "  " + exitPosition[i][2];
                    //logger.info(sOut);
                }

                //估计抓捕者位置
                policePosition = exitPosition[0];

                //获取电梯位置
                foreach (int i in Range(1, 3))
                {
                    string       sOut         = "Elevator" + i + "  ";
                    List <int[]> elevatorTemp = new List <int[]>();
                    int[]        ele          = hacker.GetElevatorPosition(i);
                    int[]        eleF1        = { ele[0], 1, ele[1] };
                    int[]        eleF2        = { ele[0], 2, ele[1] };
                    elevatorTemp.Add(eleF1);
                    elevatorTemp.Add(eleF2);
                    elevatorPosition.Add(elevatorTemp);
                    sOut += elevatorPosition[i - 1][0][0] + "  " + elevatorPosition[i - 1][0][1] + "  " + elevatorPosition[i - 1][0][2] + "\n";
                    sOut += elevatorPosition[i - 1][1][0] + "  " + elevatorPosition[i - 1][1][1] + "  " + elevatorPosition[i - 1][1][2] + "\n";
                    //logger.info(sOut);
                }

                //获取逃跑者位置
                foreach (int i in Range(1, 4))
                {
                    hackerPosition.Add(hacker.HackerPosition(i));
                }

                infoGot = true;

                //LOG

                /*
                 * logger.info("index  " + index);
                 * logger.info("mapSize  " + mapSize[0] + "  " + mapSize[1] + "  " + mapSize[2] + "  ");
                 *
                 * for (int z = mapSize[2] - 1; z >= 0; z--)
                 * {
                 *  string sOut = "[1]";
                 *  for (int x = 0; x < mapSize[0]; x++)
                 *  {
                 *      sOut += map[x][0][z].ToString() + ",";
                 *  }
                 *  logger.info(sOut);
                 * }
                 * logger.info(" ");
                 *
                 * for (int z = mapSize[2] - 1; z >= 0; z--)
                 * {
                 *  string sOut = "[2]";
                 *  for (int x = 0; x < mapSize[0]; x++)
                 *  {
                 *      sOut += map[x][1][z].ToString() + ",";
                 *  }
                 *  logger.info(sOut);
                 * }
                 * logger.info(" ");
                 */

                //初始化
                selfPosition = hacker.GetPosition();

                /*
                 * string log2 = "POINTLIST ";
                 * // pointList = SearchShortest();
                 *
                 * foreach (int[] point in pointList)
                 * {
                 *  log2 += "(" + point[0] + ", " + point[1] + ", " + point[2] + ") ";
                 * }
                 * logger.info(log2);
                 */
            }

            //实时更新逃跑者位置与抓捕者(可能的)位置
            foreach (int i in Range(1, 4))
            {
                int[] tempPosition = hacker.HackerPosition(i);

                if ((tempPosition == null) && (hackerPosition[i - 1] != null))
                {
                    foreach (int j in Range(4))
                    {
                        if (FindWayWholeMap(hackerPosition[i - 1], exitPosition[j]).Count > 1)
                        {
                            policePosition    = hackerPosition[i - 1];
                            someoneIsArrested = true;
                            //logger.info("Hacker " + i + " is arrested!  PolicePosition: (" + policePosition[0] + ", " + policePosition[1] + ", " + policePosition[2] + ")");
                            break;
                        }
                    }
                }
                hackerPosition[i - 1] = hacker.HackerPosition(i);
            }

            if (hacker.Warning())
            {
                policePosition = hacker.GetPolicePosition();
                //logger.info("Warning!  PolicePosition: (" + policePosition[0] + ", " + policePosition[1] + ", " + policePosition[2] + ")");
            }


            //实时更新自己拥有的钥匙
            myKey = hacker.haveKey();

            if (!hacker.isMoving())//不在移动
            {
                selfPosition = hacker.GetPosition();
                int[] target = ChooseTarget();

                track = FindWaySafe(selfPosition, target);

                if (track.Count > 0)
                {
                    switch (track[0].direction)
                    {
                    case "U":
                        hacker.MoveNorth();
                        break;

                    case "D":
                        hacker.MoveSouth();
                        break;

                    case "L":
                        hacker.MoveWest();
                        break;

                    case "R":
                        hacker.MoveEast();
                        break;
                    }
                    track.Remove(track[0]);
                }
            }
        }