def __init__(self, variant='ofc', playerCount=2, gameState={}): """ Initialises game handler object Game handler communicates between server and back end logic :return: None """ assert isinstance(variant, basestring) assert variant.lower() in ['ofc', 'pineapple'] assert isinstance(playerCount, int) assert 1 < playerCount <= 4 assert isinstance(gameState, dict) self.playerCount = playerCount self.gameState = gameState # Set defaults - overridden if gameState is passed firstToAct, nextToAct, actingOrderPointer, roundNumber, roundActionNumber, deck, deckPointer = 1, 1, 0, 1, 1, None, 0 if (gameState != {}): # Game state info overrides existing variables e.g. playerCount self.interpretPlayerCount(gameState) firstToAct, nextToAct, actingOrderPointer, roundNumber, roundActionNumber, deck, deckPointer = \ self.interpretGameVars(gameState['gameState']) self.game = None # Create a game object for the desired variant using any read in variables if (variant.lower() == 'ofc'): self.game = OFC(playerCount=self.playerCount, firstToAct=firstToAct, nextToAct=nextToAct, \ actingOrderPointer=actingOrderPointer, roundNumber=roundNumber, variant='ofc', \ roundActionNumber=roundActionNumber, deck=deck, deckPointer=deckPointer) elif (variant.lower() == 'pineapple'): self.game = Pineapple(playerCount=self.playerCount, firstToAct=firstToAct, nextToAct=nextToAct, \ actingOrderPointer=actingOrderPointer, roundNumber=roundNumber, variant='pineapple', \ roundActionNumber=roundActionNumber, deck=deck, deckPointer=deckPointer) if (gameState != {}): # Update game state objects with read in information self.interpretGameStatePlacements(gameState) self.interpretPlayerCards(gameState)