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;
        }
Example #2
0
        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;
        }