private IEnumerable <Move> GetAvailableMovesForColor(PawnColor color) { List <Move> result = new List <Move>(); bool hasAnyJumps = false; foreach (var field in Fields) { if (field.Pawn?.Color != color) { continue; } var directions = GetPawnDirections(field.Index); var jumps = GetJumpsForIndex(field.Index, directions); result.AddRange(jumps); if (jumps.Any()) { hasAnyJumps = true; result.RemoveAll(x => !x.IsJump); } if (!hasAnyJumps) { var simpleMoves = GetSimpleMovesForIndex(field.Index, directions); result.AddRange(simpleMoves); } } return(result); }
public static Player Create(Guid id, string name, PawnColor color) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException("New name can not be null", nameof(name)); } return(new Player { Id = id, Name = name, Color = color }); }
public static Board FromStanpshot(BoardDbModel dbModel) { var board = new Board { Size = dbModel.Size, isLongMoveAllowed = dbModel.LongMoveAllowed, CurrentTurn = PawnColor.FromName(dbModel.CurrentTurn) }; board.InitializeEmptyFields(); foreach (PawnDbModel pawn in dbModel.Pawns) { var color = PawnColor.FromName(pawn.Color); board.Fields[pawn.Index].PutPawn(new Pawn(color, pawn.IsKing)); } return(board); }
public void AddPlayer(Guid playerId, string playerName) { if (_hasStarted || _players.Count > 1) { throw new InvalidGameOperation($"Cannot join a game a running game"); } PawnColor randomColor = GetRandomPlayerColor(); if (_players.ContainsKey(playerId)) { return; } Player newPlayer = Player.Create(playerId, playerName, randomColor); _players.Add(playerId, newPlayer); if (BlackPlayer != null && WhitePlayer != null) { _hasStarted = true; } }
public int GetNumberOfPawns(PawnColor color) { return(Fields.Where(f => !Field.IsEmpty(f) && f.Pawn.Color.Equals(color)).Count()); }
private void SwitchTurns() { CurrentTurn = CurrentTurn.Equals(PawnColor.White) ? PawnColor.Black : PawnColor.White; _multipleMovesIndex = null; }
public Pawn(PawnColor color, bool isKing = false) { Color = color; IsKing = isKing; }