Example #1
0
        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};
        }
Example #3
0
        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());
        }