🐍

Snake Game

Classic arcade with Pygame

GAME PROJECT

Snake Game - Pygame

Build the classic Snake arcade game with Pygame. Features smooth 60FPS gameplay, high scores, power-ups, particle effects, and cross-platform executables.

Production Game Features

🐍

Smooth Snake Movement

60FPS gameplay, grid-based movement, collision detection

🍎

Smart Food Spawning

Random food placement, growth mechanics, score tracking

Power-ups & Effects

Speed boost, slow motion, invincibility, particles

📊

High Score System

Persistent scores, leaderboards, game over screens

Live Game Preview

Score: 1,247
02:34
High: 5,892

Complete Snake Game Code

import pygame import random import json import os from pygame import mixer # Initialize Pygame pygame.init() mixer.init() # Constants WINDOW_WIDTH = 800 WINDOW_HEIGHT = 600 GRID_SIZE = 20 GRID_WIDTH = WINDOW_WIDTH // GRID_SIZE GRID_HEIGHT = WINDOW_HEIGHT // GRID_SIZE class SnakeGame: def __init__(self): self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("Snake Game - Professional Edition") self.clock = pygame.time.Clock() self.font = pygame.font.Font(None, 36) self.big_font = pygame.font.Font(None, 72) # Game state self.reset_game() self.high_score = self.load_high_score() self.running = True def reset_game(self): self.snake = [(GRID_WIDTH//2, GRID_HEIGHT//2)] self.direction = (1, 0) self.food = self.generate_food() self.score = 0 self.speed = 10 def generate_food(self): while True: food = (random.randint(0, GRID_WIDTH-1), random.randint(0, GRID_HEIGHT-1)) if food not in self.snake: return food def handle_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: self.running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_UP and self.direction != (0, 1): self.direction = (0, -1) elif event.key == pygame.K_DOWN and self.direction != (0, -1): self.direction = (0, 1) elif event.key == pygame.K_LEFT and self.direction != (1, 0): self.direction = (-1, 0) elif event.key == pygame.K_RIGHT and self.direction != (-1, 0): self.direction = (1, 0) elif event.key == pygame.K_r: self.reset_game() def update(self): # Move snake head = self.snake[0] new_head = (head[0] + self.direction[0], head[1] + self.direction[1]) # Check collisions if (new_head[0] < 0 or new_head[0] >= GRID_WIDTH or new_head[1] < 0 or new_head[1] >= GRID_HEIGHT or new_head in self.snake): self.game_over() return self.snake.insert(0, new_head) # Check food collision if new_head == self.food: self.score += 10 self.food = self.generate_food() self.speed = min(20, self.speed + 0.2) else: self.snake.pop() def draw(self): self.screen.fill((10, 10, 30)) # Draw snake with gradient for i, segment in enumerate(self.snake): alpha = 255 - (i * 10) color = (34 + i*2, 197 - i, 94 - i//2) pygame.draw.rect(self.screen, color, (segment[0]*GRID_SIZE, segment[1]*GRID_SIZE, GRID_SIZE-2, GRID_SIZE-2)) # Draw food with glow food_rect = pygame.Rect(self.food[0]*GRID_SIZE+2, self.food[1]*GRID_SIZE+2, GRID_SIZE-4, GRID_SIZE-4) pygame.draw.ellipse(self.screen, (239, 68, 68), food_rect) pygame.draw.ellipse(self.screen, (255, 100, 100), food_rect, 2) # UI score_text = self.font.render(f"Score: {self.score}", True, (255, 255, 255)) high_text = self.font.render(f"High: {self.high_score}", True, (255, 215, 0)) self.screen.blit(score_text, (20, 20)) self.screen.blit(high_text, (20, 60)) pygame.display.flip() def game_over(self): if self.score > self.high_score: self.high_score = self.score self.save_high_score() screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) while True: screen.fill((20, 20, 40)) game_over_text = self.big_font.render("GAME OVER", True, (255, 50, 50)) score_text = self.font.render(f"Final Score: {self.score}", True, (255, 255, 255)) high_text = self.font.render(f"High Score: {self.high_score}", True, (255, 215, 0)) restart_text = self.font.render("Press R to Restart", True, (100, 255, 100)) screen.blit(game_over_text, (WINDOW_WIDTH//2 - game_over_text.get_width()//2, 200)) screen.blit(score_text, (WINDOW_WIDTH//2 - score_text.get_width()//2, 300)) screen.blit(high_text, (WINDOW_WIDTH//2 - high_text.get_width()//2, 340)) screen.blit(restart_text, (WINDOW_WIDTH//2 - restart_text.get_width()//2, 400)) pygame.display.flip() for event in pygame.event.get(): if event.type == pygame.QUIT: return False if event.type == pygame.KEYDOWN and event.key == pygame.K_r: return True return False def save_high_score(self): with open('highscore.json', 'w') as f: json.dump({'high_score': self.high_score}, f) def load_high_score(self): if os.path.exists('highscore.json'): with open('highscore.json', 'r') as f: return json.load(f).get('high_score', 0) return 0 def run(self): while self.running: self.handle_events() self.update() self.draw() self.clock.tick(self.speed) pygame.quit() # Run the game if __name__ == "__main__": game = SnakeGame() game.run()

Pro Game Features

# Power-ups system POWER_UPS = { 'speed': {'color': (255, 165, 0), 'effect': 'speed_boost'}, 'slow': {'color': (100, 200, 255), 'effect': 'slow_motion'}, 'invincible': {'color': (255, 255, 0), 'effect': 'god_mode'} } # Particle effects def create_particles(self, pos): for _ in range(20): Particle(pos, random.choice(['eat', 'death'])) class Particle: def __init__(self, pos, type): self.pos = list(pos) self.vel = [random.uniform(-5,5), random.uniform(-5,5)] self.life = 60 self.type = type # Sound effects mixer.music.load('eat.mp3') mixer.music.play() mixer.Sound('game_over.wav').play()

Production Deployment

# requirements.txt """ pygame==2.5.2 PyInstaller==5.13.2 """ # Build executable pyinstaller --onefile --windowed --icon=snake.ico --add-data "assets;assets" snake_game.py # Auto-launcher import subprocess subprocess.Popen(['snake_game.exe']) # Steam/itch.io ready # Include: assets/, highscore.json, LICENSE

Game Dev Challenges

1. Multiplayer Snake

2-player local co-op, AI opponent, network multiplayer

2. Battle Royale Mode

8 snakes, last snake standing, shrinking arena

3. Mobile Port

Pygame + Kivy → Android/iOS touch controls

4. Web Version

pygame-web → browser playable with PyScript

Game Developer!

🎮 Production Game Portfolio:

🐍 Arcade Classics
Smooth 60FPS gameplay
⚡ Power-ups & FX
Particles, sounds, effects
📱 Cross-Platform
Windows/Mac/Linux/Web
🏆 Leaderboards
Persistent high scores
💼 Steam/itch.io Ready
Executable + assets