public Result TryMakeTurn(int start, int end)
        {
            var gameTurn = GameTurnUtils.CreateTurnByTwoCells(_curField, Side, start, end);

            if (gameTurn == null || (gameTurn.IsSimple && _requiredJumps.Any()))
            {
                return(Result.Fail);
            }

            _turns.Add(gameTurn);

            GameFieldUtils.TryCreateField(_curField, gameTurn, out GameField newField);

            // Not the last jump
            if (!gameTurn.IsSimple && !gameTurn.IsLevelUp &&
                GameTurnUtils.FindTurnsForCell(newField, gameTurn.Steps.Last(), TurnType.Jump).Any())
            {
                _statusReporter.Status = $"{Side}: {Resources.WpfPlayer_JumpTurn_Continue}";

                DoJumpsContinue = true;

                _curField = newField;

                return(Result.Continue);
            }

            _sender?.Send(GameTurnUtils.CreateCompositeJump(_turns));

            return(Result.Ok);
        }
Example #2
0
        public void CreateCompositeTurn()
        {
            var gameField = CommonValues.LongJumpsField;

            var firstTurn     = GameTurnUtils.CreateTurnByTwoCells(gameField, PlayerSide.Black, 55, 37);
            var compositeJump = TestUtils.CreateCompositeJump(
                gameField, PlayerSide.Black, new[] { 55, 37, 23, 5, 19 });

            Assert.IsNull(GameTurnUtils.CreateCompositeJump(new GameTurn[0]));
            Assert.IsNull(GameTurnUtils.CreateCompositeJump(new GameTurn[] { null }));
            Assert.IsNull(GameTurnUtils.CreateCompositeJump(new GameTurn[] { null, null }));
            Assert.IsNull(GameTurnUtils.CreateCompositeJump(new GameTurn[] { firstTurn, null }));

            Assert.AreEqual(compositeJump.Steps, new[] { 55, 46, 37, 30, 23, 14, 5, 12, 19 });
        }
        private static IEnumerable <GameTurn> GetCompositeJumps(GameField oldField, IEnumerable <GameTurn> jumps)
        {
            foreach (var jump in jumps)
            {
                GameFieldUtils.TryCreateField(oldField, jump, out GameField newField);
                var subJumps = GetCompositeJumps(newField, GameTurnUtils.FindTurnsForCell(newField, jump.Steps.Last(), TurnType.Jump));

                if (subJumps.Any() && !jump.IsLevelUp)
                {
                    foreach (var subJump in subJumps)
                    {
                        yield return(GameTurnUtils.CreateCompositeJump(new[] { jump, subJump }));
                    }
                }
                else
                {
                    yield return(jump);
                }
            }
        }