Add replay ball
This commit is contained in:
26
GameState.py
26
GameState.py
@@ -14,8 +14,8 @@ class GameState:
|
|||||||
|
|
||||||
def __init__(self, playerStateFactory, highscore, specialDisplay, currentPlayerID = 0):
|
def __init__(self, playerStateFactory, highscore, specialDisplay, currentPlayerID = 0):
|
||||||
CREDIT.activate()
|
CREDIT.activate()
|
||||||
|
self.highscore = highscore
|
||||||
self.playerStateFactory = playerStateFactory
|
self.playerStateFactory = playerStateFactory
|
||||||
#self.players = cycle(players)
|
|
||||||
self.dummyPlayer = playerStateFactory.createDummyPlayerState()
|
self.dummyPlayer = playerStateFactory.createDummyPlayerState()
|
||||||
self._currentPlayer = self.dummyPlayer
|
self._currentPlayer = self.dummyPlayer
|
||||||
self.gameStateID = currentPlayerID
|
self.gameStateID = currentPlayerID
|
||||||
@@ -34,6 +34,23 @@ class GameState:
|
|||||||
logging.info("Game Started")
|
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):
|
def createPlayers(self, playerCount):
|
||||||
players = []
|
players = []
|
||||||
for i in range(playerCount):
|
for i in range(playerCount):
|
||||||
@@ -56,3 +73,10 @@ class GameState:
|
|||||||
|
|
||||||
self._currentPlayer = player
|
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)
|
||||||
@@ -21,6 +21,8 @@ from solenoids.BottomLeftBankSolenoid import BottomLeftBankSolenoid
|
|||||||
from solenoids.BottomRightBankSolenoid import BottomRightBankSolenoid
|
from solenoids.BottomRightBankSolenoid import BottomRightBankSolenoid
|
||||||
from solenoids.TopCentralBankSolenoid import TopCentralBankSolenoid
|
from solenoids.TopCentralBankSolenoid import TopCentralBankSolenoid
|
||||||
|
|
||||||
|
from solenoids.MainFlipper import MainFlipper
|
||||||
|
|
||||||
TUNNEL_SCORES = [20000, 30000, 50000]
|
TUNNEL_SCORES = [20000, 30000, 50000]
|
||||||
BONUS_MULTIPLIER = [1, 10, 20, 50]
|
BONUS_MULTIPLIER = [1, 10, 20, 50]
|
||||||
UPPER_PLAYFIELD_TIME = [5, 10, 20, 30]
|
UPPER_PLAYFIELD_TIME = [5, 10, 20, 30]
|
||||||
@@ -46,9 +48,9 @@ class PlayerState:
|
|||||||
tunnelScore = 0
|
tunnelScore = 0
|
||||||
tunnelLit = 0
|
tunnelLit = 0
|
||||||
ballsLeft = 0
|
ballsLeft = 0
|
||||||
replayBall = False
|
|
||||||
hasBallScored = False
|
hasBallScored = False
|
||||||
isActive = False
|
isActive = False
|
||||||
|
hasHighscore = False
|
||||||
|
|
||||||
redSpecial = 0
|
redSpecial = 0
|
||||||
redSpecialLit = False
|
redSpecialLit = False
|
||||||
@@ -66,6 +68,10 @@ class PlayerState:
|
|||||||
upperPlayfieldTimeIter = iter(UPPER_PLAYFIELD_TIME)
|
upperPlayfieldTimeIter = iter(UPPER_PLAYFIELD_TIME)
|
||||||
upperPlayfieldTime = 0
|
upperPlayfieldTime = 0
|
||||||
|
|
||||||
|
replayBall = False
|
||||||
|
bonusTime = config.BEGINNING_BONUS_TIME
|
||||||
|
replayBallTimer = None
|
||||||
|
|
||||||
def __init__(self, display, specialDisplay, id, ballsToPlay, banks):
|
def __init__(self, display, specialDisplay, id, ballsToPlay, banks):
|
||||||
self.banks = banks
|
self.banks = banks
|
||||||
self.display = display
|
self.display = display
|
||||||
@@ -76,8 +82,6 @@ class PlayerState:
|
|||||||
|
|
||||||
self.enableTiming()
|
self.enableTiming()
|
||||||
|
|
||||||
self.bonusTime = config.BEGINNING_BONUS_TIME
|
|
||||||
|
|
||||||
self.specialDisplay.printBallsToPlay(self.ballsLeft)
|
self.specialDisplay.printBallsToPlay(self.ballsLeft)
|
||||||
self.specialDisplay.printGameTimeBonus(self.bonusTime)
|
self.specialDisplay.printGameTimeBonus(self.bonusTime)
|
||||||
|
|
||||||
@@ -286,7 +290,26 @@ class PlayerState:
|
|||||||
def setReplayBall(self):
|
def setReplayBall(self):
|
||||||
if not self.isActive:
|
if not self.isActive:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.replayBall = True
|
self.replayBall = True
|
||||||
|
self.replayBallTimer = Timer(interval=1, function=self.updateReplayBall)
|
||||||
|
|
||||||
|
def updateReplayBall(self):
|
||||||
|
self.bonusTime -= 1
|
||||||
|
self.printSpecial()
|
||||||
|
|
||||||
|
if self.bonusTime == 0:
|
||||||
|
self.stopReplayBall()
|
||||||
|
return
|
||||||
|
|
||||||
|
self.replayBallTimer = Timer(interval = 1, function=self.updateReplayBall)
|
||||||
|
def stopReplayBall(self):
|
||||||
|
if not self.isActive:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.replayBall = False
|
||||||
|
self.replayBallTimer = None
|
||||||
|
MainFlipper().deactivate()
|
||||||
|
|
||||||
def addPoints(self, points):
|
def addPoints(self, points):
|
||||||
if points == 0:
|
if points == 0:
|
||||||
|
|||||||
@@ -34,3 +34,4 @@ NETWORK_SLEEP_TIME_SECONDS = 0.1
|
|||||||
BANK_SLEEP_TIME = 0.1
|
BANK_SLEEP_TIME = 0.1
|
||||||
BONUS_SLEEP_TIME = 0.1
|
BONUS_SLEEP_TIME = 0.1
|
||||||
PLAYER_CHOOSE_INTERVAL = 2
|
PLAYER_CHOOSE_INTERVAL = 2
|
||||||
|
HIGHSCORE_FILE = "./high.score"
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import config
|
import config
|
||||||
from Event import Event
|
from Event import Event
|
||||||
|
|
||||||
from events.EndGameEvent import EndGameEvent
|
|
||||||
from events.StartBallEvent import StartBallEvent
|
from events.StartBallEvent import StartBallEvent
|
||||||
|
|
||||||
from solenoids.MainFlipper import MainFlipper
|
from solenoids.MainFlipper import MainFlipper
|
||||||
@@ -33,7 +32,7 @@ class EndBallEvent(Event):
|
|||||||
self.gameState.currentPlayer.deactivate()
|
self.gameState.currentPlayer.deactivate()
|
||||||
|
|
||||||
if self.gameState.currentPlayer.ballsLeft == 0 and self.gameState.currentPlayer.id == config.MAX_PLAYERS - 1:
|
if self.gameState.currentPlayer.ballsLeft == 0 and self.gameState.currentPlayer.id == config.MAX_PLAYERS - 1:
|
||||||
EndGameEvent().trigger(None)
|
self.gameState.endGame()
|
||||||
return
|
return
|
||||||
|
|
||||||
self.gameState.nextPlayer()
|
self.gameState.nextPlayer()
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
from Event import Event
|
|
||||||
from solenoids.MainFlipper import MainFlipper
|
|
||||||
from solenoids.TopFlipper import TopFlipper
|
|
||||||
|
|
||||||
#todo temporary
|
|
||||||
import sys
|
|
||||||
|
|
||||||
class EndGameEvent(Event):
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__("End Game Event")
|
|
||||||
|
|
||||||
def trigger(self, target):
|
|
||||||
super().trigger(target)
|
|
||||||
MainFlipper().deactivate()
|
|
||||||
TopFlipper().deactivate()
|
|
||||||
#sys.exit(0)
|
|
||||||
@@ -7,7 +7,6 @@ from events.LeftFlapEvent import LeftFlapEvent
|
|||||||
from events.RightKickerEvent import RightKickerEvent
|
from events.RightKickerEvent import RightKickerEvent
|
||||||
from events.EnterUpperPlayfieldEvent import EnterUpperPlayfieldEvent
|
from events.EnterUpperPlayfieldEvent import EnterUpperPlayfieldEvent
|
||||||
from events.StartGameEvent import StartGameEvent
|
from events.StartGameEvent import StartGameEvent
|
||||||
from events.EndGameEvent import EndGameEvent
|
|
||||||
from events.StartBallEvent import StartBallEvent
|
from events.StartBallEvent import StartBallEvent
|
||||||
from events.BottomRightBankEvent import BottomRightBankEvent
|
from events.BottomRightBankEvent import BottomRightBankEvent
|
||||||
from events.BottomLeftBankEvent import BottomLeftBankEvent
|
from events.BottomLeftBankEvent import BottomLeftBankEvent
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import config
|
||||||
from __main__ import networking
|
from __main__ import networking
|
||||||
|
|
||||||
from factories.PlayerStateFactory import PlayerStateFactory
|
from factories.PlayerStateFactory import PlayerStateFactory
|
||||||
@@ -29,15 +30,20 @@ class GameFactory:
|
|||||||
|
|
||||||
PLAYER_LAMPS.activateNext()
|
PLAYER_LAMPS.activateNext()
|
||||||
|
|
||||||
|
def getHighScore(self):
|
||||||
|
with open(config.HIGHSCORE_FILE, "rw+") as file:
|
||||||
|
score_str = file.readline()
|
||||||
|
|
||||||
|
if score_str == "":
|
||||||
|
score_str = "0"
|
||||||
|
|
||||||
|
return int(score_str)
|
||||||
|
|
||||||
def createGame(self):
|
def createGame(self):
|
||||||
inputHandler = InputHandler(self.targets)
|
inputHandler = InputHandler(self.targets)
|
||||||
|
|
||||||
gameState = GameState(self.playerStateFactory, self.getHighScore(), self.specialDisplay)
|
gameState = GameState(self.playerStateFactory, self.getHighScore(), self.specialDisplay)
|
||||||
|
|
||||||
eventFactory = EventFactory(self.targets, gameState)
|
eventFactory = EventFactory(self.targets, gameState)
|
||||||
events = eventFactory.allEvents()
|
events = eventFactory.allEvents()
|
||||||
|
|
||||||
return Game(inputHandler, gameState, events)
|
return Game(inputHandler, gameState, events)
|
||||||
|
|
||||||
def getHighScore(self): # todo
|
|
||||||
return 0
|
|
||||||
Reference in New Issue
Block a user