import logging import config from lamps.LampGroup import PLAYER_LAMPS from lamps.Lamp import CREDIT from itertools import cycle from time import sleep class GameState: players = None credits = config.BALLS_PER_GAME isPlaying = False isStarted = False def __init__(self, playerStateFactory, highscore, specialDisplay, currentPlayerID = 0): CREDIT.activate() self.highscore = highscore self.playerStateFactory = playerStateFactory self.dummyPlayer = playerStateFactory.createDummyPlayerState() self._currentPlayer = self.dummyPlayer self.gameStateID = currentPlayerID self.highscore = highscore self.specialDisplay = specialDisplay self.specialDisplay.printCredits(self.credits) def nextPlayer(self): self.currentPlayer = next(self.players) def startGame(self, playerCount): self.isStarted = True self.isPlaying = True self.createPlayers(playerCount) self.nextPlayer() logging.info("Game Started") def endGame(self): self.writeHighscore() self.players = None self.isPlaying = False self.isStarted = False logging.info("Game ended") def startIdleLoop(self): pass def stopIdleLoop(self): pass def idleLoop(self): pass def createPlayers(self, playerCount): players = [] for i in range(playerCount): player = self.playerStateFactory.createPlayerState(i) players.append(player) self.players = cycle(players) @property def currentPlayer(self): return self._currentPlayer @currentPlayer.setter def currentPlayer(self, player): logging.info("Set active player to player " + str(player.id)) self._currentPlayer = self.dummyPlayer player.activate() self._currentPlayer = player def writeHighscore(self): for player in self.players: if player.hasHighscore: with open(config.HIGHSCORE_FILE, "w+") as file: file.seek(0) file.truncate() file.write(player.score)