Beispiel #1
0
        public EatingSnake(EatingSnake snake)
        {
            var newGraph = new GridState[GridWidth, GridHeight];

            for (int i = 0; i < GridWidth; ++i)
            {
                for (int j = 0; j < GridHeight; ++j)
                {
                    newGraph[i, j] = snake._graph[i, j];
                }
            }

            _graph = newGraph;

            foreach (var c in snake._snakeBody)
            {
                _snakeBody.AddLast(c);
            }

            _currentDirection = snake.CurrentDirection;
            EggPos            = snake.EggPos;
        }
Beispiel #2
0
        Coordinate?GetTheSafePath()
        {
            var fakeSnake = new EatingSnake(this);
            var path      = fakeSnake.BfsSearch(fakeSnake.Head, EggPos);

            if (path == null)
            {
                return(null);
            }
            Coordinate res = path.Last();

            while (true)
            {
                //每走一步做一次 Bfs
                fakeSnake.CurrentDirection = GetDirection(fakeSnake.Head, path.Last());
                switch (fakeSnake.Move())
                {
                case GridState.Egg:
                    if (fakeSnake.BfsSearch(fakeSnake.Head, fakeSnake.Tail) != null)
                    {
                        return(res);
                    }
                    return(null);

                case GridState.Wall:
                case GridState.Snake:
                    throw new InvalidOperationException();

                case GridState.Nothing:
                    break;
                }
                path = fakeSnake.BfsSearch(fakeSnake.Head, EggPos);
                if (path == null)
                {
                    return(null);
                }
            }
        }
 private void InitializeSnake()
 {
     _snake = new EatingSnake(_graph);
 }