Files
flippr-game/GameState.py
Jonas Zeunert 4da7a3110d Add replay ball
2022-08-31 14:50:11 +02:00

82 lines
2.1 KiB
Python

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)