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; }
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); }