public PlayedGameInfo Play(Game game) { var stringBuilder = new StringBuilder(); while (game.State != GameState.GameOver && game.State != GameState.Error) { if (TimeLimiter.NeedStop()) break; var gameUnits = ReachableStatesGetter.Get(game.Board, game.Current, true); var finishUnit = bestPositionFinder.FindBest(gameUnits, game); var commandString = commandStringGenerator.Generate(game.Board, game.Current, finishUnit); stringBuilder.Append(commandString); for (var i = 0; i < commandString.Length; i++) { var command = commandString[i]; game = game.TryMakeStep(command); } } return new PlayedGameInfo(stringBuilder.ToString(), game.Score, bestPositionFinder.Name); }
public HistoryValidateResult Validate(Game game, string commands) { var usedPositions = new Dictionary<int, HashSet<string>>(); for (var i = 0; i <= game.UnitsSequence.Length; i ++) { usedPositions.Add(i, new HashSet<string>()); } InsertPosition(usedPositions, game); for (var i = 0; i < commands.Length; i ++) { game = game.TryMakeStep(commands[i]); if (game.State == GameState.GameOver && i != commands.Length - 1) { return new HistoryValidateResult { IsValid = false, WrongMoveNumber = i + 1, Reason = "Game is over" }; } if (game.State == GameState.GameOver && i == commands.Length - 1) { return new HistoryValidateResult { IsValid = true }; } if (IsPositionUsed(usedPositions, game)) { return new HistoryValidateResult { IsValid = false, WrongMoveNumber = i, Reason = "Position is already used" }; } InsertPosition(usedPositions, game); } return new HistoryValidateResult {IsValid = true}; }
public void TestMoveZigZag() { MagicWordsStore.AddWords(new [] { "aba" }); var board = Board.Create(new[] { ".....", ".....", ".....", ".....", ".....", }); var unit = Unit.Create(new Point(0, 0), new[] { new Point(1, 0), new Point(0, 1), }); var game = new Game(board, null, new[] { unit }, 0, 0, 200, -1, -1, string.Empty, 0).TrySpawnNew(); Console.WriteLine(board.Place(game.Current.GetAbsolutePoints())); Console.WriteLine(); Assert.AreEqual(string.Join(Environment.NewLine, new[] { "..*..", ".*...", ".....", ".....", "....." }), board.Place(game.Current.GetAbsolutePoints()).ToString()); game = game.TryMakeStep('a'); Console.WriteLine(board.Place(game.Current.GetAbsolutePoints())); Console.WriteLine(); Assert.AreEqual(string.Join(Environment.NewLine, new[] { ".....", ".*...", ".*...", ".....", "....." }), board.Place(game.Current.GetAbsolutePoints()).ToString()); game = game.TryMakeStep('a'); Console.WriteLine(board.Place(game.Current.GetAbsolutePoints())); Console.WriteLine(); Assert.AreEqual(string.Join(Environment.NewLine, new[] { ".....", ".....", ".*...", "*....", "....." }), board.Place(game.Current.GetAbsolutePoints()).ToString()); }