private IGameBoard CreateBoard(IReadOnlyList<IPlayer> players) { var board = new DefaultBoard(); var lanes = (IList<IGameBoardLane>)board.Lanes; lanes[0] = new DefaultBoardLane(this.CreatePieces(2, players[0])); lanes[5] = new DefaultBoardLane(this.CreatePieces(5, players[1])); lanes[7] = new DefaultBoardLane(this.CreatePieces(3, players[1])); lanes[11] = new DefaultBoardLane(this.CreatePieces(5, players[0])); lanes[12] = new DefaultBoardLane(this.CreatePieces(5, players[1])); lanes[16] = new DefaultBoardLane(this.CreatePieces(3, players[0])); lanes[18] = new DefaultBoardLane(this.CreatePieces(5, players[0])); lanes[23] = new DefaultBoardLane(this.CreatePieces(2, players[1])); return board; }
public DefaultGame(IApp app, IGameBoard board, IPlayer player1, IPlayer player2, IGameRules gameRules) { if (app == null) throw new ArgumentNullException(nameof(app)); if (player1 == null) throw new ArgumentNullException(nameof(player1)); if (player2 == null) throw new ArgumentNullException(nameof(player2)); if (player1.Equals(player2)) throw new ArgumentException($"{nameof(player1)} is the same as {nameof(player2)}"); if (player1.Name == player2.Name) throw new ArgumentException( $"{nameof(player1)}.{nameof(player1.Name)} == {nameof(player2)}.{nameof(player2.Name)}"); this.App = app; this.Players = new [] { player1, player2 }; var reversedBoard = new DefaultBoard(new ReversedLanes(board.Lanes), board.Bar, board.BearedOff); this.Boards = new [] { board, reversedBoard }; this.Rules = gameRules; }