diff --git a/README.md b/README.md index 606d555..2ed9a2b 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,8 @@ s / ↓ | move down d / → | move right f11 | fullscreen (graphical UI only) l | toggle tick speed limit ++ / = | increase speed (faster snake) +- / _ | decrease speed (slower snake) r | restart q | quit diff --git a/src/config/config.py b/src/config/config.py index ddb6e9a..25ecf52 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -25,7 +25,10 @@ def __init__(self): # tick speed self.limitTickSpeed = True - self.tickSpeed = 0.1 + self.tickSpeed = 0.2 + self.minTickSpeed = 0.05 + self.maxTickSpeed = 1.0 + self.tickSpeedStep = 0.05 # misc self.debug = False diff --git a/src/ophidian.py b/src/ophidian.py index b2c5c1b..27068bd 100644 --- a/src/ophidian.py +++ b/src/ophidian.py @@ -244,6 +244,24 @@ def removeEntityFromLocation(self, entity: Entity): def removeEntity(self, entity: Entity): self.removeEntityFromLocation(entity) + def increaseSnakeSpeed(self): + """Decrease tick speed to make snake faster""" + self.config.tickSpeed = max( + self.config.minTickSpeed, + self.config.tickSpeed - self.config.tickSpeedStep + ) + + def decreaseSnakeSpeed(self): + """Increase tick speed to make snake slower""" + self.config.tickSpeed = min( + self.config.maxTickSpeed, + self.config.tickSpeed + self.config.tickSpeedStep + ) + + def toggleTickSpeedLimit(self): + """Toggle tick speed limiting on/off""" + self.config.limitTickSpeed = not self.config.limitTickSpeed + def handleKeyDownEvent(self, key): # For text UI, key is a character; for pygame, it's a key code if self.config.useTextUI: @@ -281,6 +299,12 @@ def handleKeyDownEvent(self, key): elif key == 'r': self.checkForLevelProgressAndReinitialize() return "restart" + elif key == 'l': + self.toggleTickSpeedLimit() + elif key == '+' or key == '=': + self.increaseSnakeSpeed() + elif key == '-' or key == '_': + self.decreaseSnakeSpeed() else: # Pygame key handling if key == self.pygame.K_q: @@ -320,13 +344,14 @@ def handleKeyDownEvent(self, key): self.config.fullscreen = True self.initializeGameDisplay() elif key == self.pygame.K_l: - if self.config.limitTickSpeed: - self.config.limitTickSpeed = False - else: - self.config.limitTickSpeed = True + self.toggleTickSpeedLimit() elif key == self.pygame.K_r: self.checkForLevelProgressAndReinitialize() return "restart" + elif key == self.pygame.K_PLUS or key == self.pygame.K_EQUALS: + self.increaseSnakeSpeed() + elif key == self.pygame.K_MINUS or key == self.pygame.K_UNDERSCORE: + self.decreaseSnakeSpeed() def getRandomDirection(self, grid: Grid, location: Location): direction = random.randrange(0, 4)