Add input buffering, auto-start, and gameplay improvements
Input buffer system: - Added 3-slot direction input buffer to handle rapid key presses - Buffer ignores duplicate inputs (same key pressed multiple times) - Opposite direction replaces last buffered input (e.g., LEFT→RIGHT replaces LEFT) - Buffer overflow replaces last slot when full - Multi-segment snakes skip invalid 180° turns when consuming buffer - Head-only snakes (length=1) can turn 180° for flexibility Gameplay improvements: - Desktop client auto-starts game on connect (no SPACE needed) - Field populates with 3 apples when no players connected - HTTP server now binds to 0.0.0.0 for network access (matches game server) Testing: - Added 7 new tests for input buffer functionality - Added test for zero-player apple spawning - All 19 tests passing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -35,6 +35,7 @@ class Snake:
|
||||
stuck: bool = False # True when snake is blocked and shrinking
|
||||
color_index: int = 0 # Index in COLOR_SNAKES array for persistent color
|
||||
player_name: str = "" # Human-readable player name
|
||||
input_buffer: List[Tuple[int, int]] = field(default_factory=list) # Buffer for pending direction changes (max 3)
|
||||
|
||||
def get_head(self) -> Position:
|
||||
"""Get the head position of the snake."""
|
||||
@@ -51,6 +52,7 @@ class Snake:
|
||||
"stuck": self.stuck,
|
||||
"color_index": self.color_index,
|
||||
"player_name": self.player_name,
|
||||
"input_buffer": self.input_buffer,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
@@ -64,6 +66,7 @@ class Snake:
|
||||
snake.stuck = data.get("stuck", False) # Default to False for backward compatibility
|
||||
snake.color_index = data.get("color_index", 0) # Default to 0 for backward compatibility
|
||||
snake.player_name = data.get("player_name", "") # Default to empty string for backward compatibility
|
||||
snake.input_buffer = [tuple(d) for d in data.get("input_buffer", [])] # Default to empty list for backward compatibility
|
||||
return snake
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user