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