@undoredo.undoable<EOL><INDENT>def start(self, players):<DEDENT>
from .boardbuilder import Opt<EOL>self.reset()<EOL>if self.board.opts.get('<STR_LIT>') == Opt.debug:<EOL><INDENT>players = Game.get_debug_players()<EOL><DEDENT>self.set_players(players)<EOL>if self.options.get('<STR_LIT>') is None or self.options.get('<STR_LIT>') == '<STR_LIT>':<EOL><INDENT>logging.debug('<STR_LIT>'.format(self.options))<EOL>self.set_state(catan.states.GameStatePreGamePlacingPiece(self, catan.pieces.PieceType.settlement))<EOL><DEDENT>elif self.options.get('<STR_LIT>') == '<STR_LIT>':<EOL><INDENT>logging.debug('<STR_LIT>'.format(self.options))<EOL>self.set_state(catan.states.GameStateBeginTurn(self))<EOL><DEDENT>terrain = list()<EOL>numbers = list()<EOL>for tile in self.board.tiles:<EOL><INDENT>terrain.append(tile.terrain)<EOL>numbers.append(tile.number)<EOL><DEDENT>for (_, coord), piece in self.board.pieces.items():<EOL><INDENT>if piece.type == catan.pieces.PieceType.robber:<EOL><INDENT>self.robber_tile = hexgrid.tile_id_from_coord(coord)<EOL>logging.debug('<STR_LIT>'.format(coord, self.robber_tile))<EOL><DEDENT><DEDENT>self.catanlog.log_game_start(self.players, terrain, numbers, self.board.ports)<EOL>self.notify_observers()<EOL>
Start the game.

The value of option 'pregame' determines whether the pregame will occur or not.

- Resets the board
- Sets the players
- Sets the game state to the appropriate first turn of the game
- Finds the robber on the board, sets the robber_tile appropriately
- Logs the catanlog header

:param players: players to start the game with