From bfb80d50a389f8ffa96e289b686d88185dcfe3d1 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 23:27:48 +0000 Subject: [PATCH 1/4] Initial plan From 0e5dd83b221f4b901aee33cd8317e1cb621c8fb6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 1 Nov 2025 23:30:47 +0000 Subject: [PATCH 2/4] Increase tick speed from 0.1 to 0.2 seconds to slow down snake movement Co-authored-by: dmccoystephenson <21204351+dmccoystephenson@users.noreply.github.com> --- src/config/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/config.py b/src/config/config.py index ddb6e9a..e522a36 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -25,7 +25,7 @@ def __init__(self): # tick speed self.limitTickSpeed = True - self.tickSpeed = 0.1 + self.tickSpeed = 0.2 # misc self.debug = False From 27805b95d74389dccd5c96f5ce8d768b38c2490f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 00:22:37 +0000 Subject: [PATCH 3/4] Add runtime tick speed controls with key bindings for text UI Co-authored-by: dmccoystephenson <21204351+dmccoystephenson@users.noreply.github.com> --- README.md | 2 ++ src/config/config.py | 3 +++ src/ophidian.py | 29 +++++++++++++++++++++++++++++ 3 files changed, 34 insertions(+) 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 e522a36..25ecf52 100644 --- a/src/config/config.py +++ b/src/config/config.py @@ -26,6 +26,9 @@ def __init__(self): # tick speed self.limitTickSpeed = True 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..bbbcf42 100644 --- a/src/ophidian.py +++ b/src/ophidian.py @@ -281,6 +281,23 @@ def handleKeyDownEvent(self, key): elif key == 'r': self.checkForLevelProgressAndReinitialize() return "restart" + elif key == 'l': + if self.config.limitTickSpeed: + self.config.limitTickSpeed = False + else: + self.config.limitTickSpeed = True + elif key == '+' or key == '=': + # Decrease tick speed (faster snake) + self.config.tickSpeed = max( + self.config.minTickSpeed, + self.config.tickSpeed - self.config.tickSpeedStep + ) + elif key == '-' or key == '_': + # Increase tick speed (slower snake) + self.config.tickSpeed = min( + self.config.maxTickSpeed, + self.config.tickSpeed + self.config.tickSpeedStep + ) else: # Pygame key handling if key == self.pygame.K_q: @@ -327,6 +344,18 @@ def handleKeyDownEvent(self, key): elif key == self.pygame.K_r: self.checkForLevelProgressAndReinitialize() return "restart" + elif key == self.pygame.K_PLUS or key == self.pygame.K_EQUALS: + # Decrease tick speed (faster snake) + self.config.tickSpeed = max( + self.config.minTickSpeed, + self.config.tickSpeed - self.config.tickSpeedStep + ) + elif key == self.pygame.K_MINUS or key == self.pygame.K_UNDERSCORE: + # Increase tick speed (slower snake) + self.config.tickSpeed = min( + self.config.maxTickSpeed, + self.config.tickSpeed + self.config.tickSpeedStep + ) def getRandomDirection(self, grid: Grid, location: Location): direction = random.randrange(0, 4) From 6a220d8a9306a9d6d3b745999006fed16eb52496 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 00:24:16 +0000 Subject: [PATCH 4/4] Refactor tick speed controls to reduce code duplication Co-authored-by: dmccoystephenson <21204351+dmccoystephenson@users.noreply.github.com> --- src/ophidian.py | 52 +++++++++++++++++++++++-------------------------- 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/src/ophidian.py b/src/ophidian.py index bbbcf42..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: @@ -282,22 +300,11 @@ def handleKeyDownEvent(self, key): self.checkForLevelProgressAndReinitialize() return "restart" elif key == 'l': - if self.config.limitTickSpeed: - self.config.limitTickSpeed = False - else: - self.config.limitTickSpeed = True + self.toggleTickSpeedLimit() elif key == '+' or key == '=': - # Decrease tick speed (faster snake) - self.config.tickSpeed = max( - self.config.minTickSpeed, - self.config.tickSpeed - self.config.tickSpeedStep - ) + self.increaseSnakeSpeed() elif key == '-' or key == '_': - # Increase tick speed (slower snake) - self.config.tickSpeed = min( - self.config.maxTickSpeed, - self.config.tickSpeed + self.config.tickSpeedStep - ) + self.decreaseSnakeSpeed() else: # Pygame key handling if key == self.pygame.K_q: @@ -337,25 +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: - # Decrease tick speed (faster snake) - self.config.tickSpeed = max( - self.config.minTickSpeed, - self.config.tickSpeed - self.config.tickSpeedStep - ) + self.increaseSnakeSpeed() elif key == self.pygame.K_MINUS or key == self.pygame.K_UNDERSCORE: - # Increase tick speed (slower snake) - self.config.tickSpeed = min( - self.config.maxTickSpeed, - self.config.tickSpeed + self.config.tickSpeedStep - ) + self.decreaseSnakeSpeed() def getRandomDirection(self, grid: Grid, location: Location): direction = random.randrange(0, 4)