def new(cls, starting_domino=None, starting_player=0):
        '''
        :param Domino starting_domino: the domino that should be played
                                       to start the game. The player
                                       with this domino in their hand
                                       will play first.
        :param int starting_player: the player that should play first.
                                    This value is ignored if a starting
                                    domino is provided. Players are
                                    referred to by their indexes: 0, 1,
                                    2, and 3. 0 and 2 are on one team,
                                    and 1 and 3 are on another team.
        :return: a new game, initialized according to
                 starting_domino and starting_player
        :raises NoSuchDominoException: if starting_domino is invalid
        :raises NoSuchPlayerException: if starting_player is invalid
        '''
        board = dominoes.Board()

        hands = _randomized_hands()

        moves = []

        result = None

        if starting_domino is None:
            _validate_player(starting_player)
            valid_moves = tuple((d, True) for d in hands[starting_player])
            game = cls(board, hands, moves, starting_player,
                       valid_moves, starting_player, result)
        else:
            starting_player = _domino_hand(starting_domino, hands)
            valid_moves = ((starting_domino, True),)
            game = cls(board, hands, moves, starting_player,
                       valid_moves, starting_player, result)
            game.make_move(*valid_moves[0])

        return game
:param Domino starting_domino: the domino that should be played
                                       to start the game. The player
                                       with this domino in their hand
                                       will play first.
        :param int starting_player: the player that should play first.
                                    This value is ignored if a starting
                                    domino is provided. Players are
                                    referred to by their indexes: 0, 1,
                                    2, and 3. 0 and 2 are on one team,
                                    and 1 and 3 are on another team.
        :return: a new game, initialized according to
                 starting_domino and starting_player
        :raises NoSuchDominoException: if starting_domino is invalid
        :raises NoSuchPlayerException: if starting_player is invalid