8-bit game using pygame

Pygame is an open-source Python library used for making games. It provides various functions and tools for creating games, sound processing, and graphics. Pygame is a cross-platform library that works on Windows, Linux, and macOS.

What is an 8-bit Game?

8-bit games were very popular in the 1980s. These video games featured graphics and sound created using 8-bit technology ? a limited color palette and sound range that fall within the 8-bit range. In this article, we will create an 8-bit style game using pygame with minimal graphics.

Before creating an 8-bit game using pygame, we need to install pygame using pip ?

pip install pygame

Setting Up the Game Window

First, we create a game window with specified dimensions ?

import pygame
import sys
import random

# Initialize Pygame
pygame.init()

# Set up the display
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('8-Bit Game')

# Set up the clock for frame rate
clock = pygame.time.Clock()

Creating Game Sprites

Player Class

We create a player sprite using pygame's Sprite class ?

class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((32, 32))
        self.image.fill((255, 0, 0))  # Red color
        self.rect = self.image.get_rect()
        self.rect.x = WIDTH // 2
        self.rect.y = HEIGHT // 2
        self.speed = 5
        self.health = 100

    def update(self):
        pass

Enemy Class

Enemies move horizontally across the screen ?

class Enemy(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface((32, 32))
        self.image.fill((0, 0, 255))  # Blue color
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 2

    def update(self):
        self.rect.x += self.speed
        if self.rect.left > WIDTH:
            self.rect.right = 0

PowerUp Class

PowerUps provide health or speed boosts to the player ?

class PowerUp(pygame.sprite.Sprite):
    def __init__(self, x, y, power):
        super().__init__()
        self.image = pygame.Surface((16, 16))
        self.image.fill((0, 255, 0))  # Green color
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.power = power

    def update(self):
        pass

Complete 8-bit Game Implementation

Here's the complete working game code ?

import pygame
import sys
import random

# Initialize Pygame
pygame.init()

# Set up the display
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('8-Bit Game')

# Set up the clock
clock = pygame.time.Clock()

# Define the Player class
class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((32, 32))
        self.image.fill((255, 0, 0))
        self.rect = self.image.get_rect()
        self.rect.x = WIDTH // 2
        self.rect.y = HEIGHT // 2
        self.speed = 5
        self.health = 100

    def update(self):
        pass

# Define the Enemy class
class Enemy(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface((32, 32))
        self.image.fill((0, 0, 255))
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 2

    def update(self):
        self.rect.x += self.speed
        if self.rect.left > WIDTH:
            self.rect.right = 0

# Define the PowerUp class
class PowerUp(pygame.sprite.Sprite):
    def __init__(self, x, y, power):
        super().__init__()
        self.image = pygame.Surface((16, 16))
        self.image.fill((0, 255, 0))
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.power = power

    def update(self):
        pass

# Create sprite groups
all_sprites = pygame.sprite.Group()
enemies = pygame.sprite.Group()
powerups = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

# Create 5 enemies
for i in range(5):
    enemy = Enemy(random.randint(0, WIDTH), random.randint(0, HEIGHT))
    enemies.add(enemy)
    all_sprites.add(enemy)

# Create 3 powerups
for i in range(3):
    power = random.choice(['health', 'speed'])
    powerup = PowerUp(random.randint(0, WIDTH), random.randint(0, HEIGHT), power)
    powerups.add(powerup)
    all_sprites.add(powerup)

# Game loop
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()

    # Player movement
    if keys[pygame.K_LEFT] and player.rect.x > 0:
        player.rect.x -= player.speed
    elif keys[pygame.K_RIGHT] and player.rect.x < WIDTH - 32:
        player.rect.x += player.speed
    elif keys[pygame.K_UP] and player.rect.y > 0:
        player.rect.y -= player.speed
    elif keys[pygame.K_DOWN] and player.rect.y < HEIGHT - 32:
        player.rect.y += player.speed

    # Check for collisions with enemies
    if pygame.sprite.spritecollide(player, enemies, True):
        player.health -= 10
        print(f"Player health: {player.health}")

    # Check for collisions with power-ups
    powerups_collected = pygame.sprite.spritecollide(player, powerups, True)
    for powerup in powerups_collected:
        if powerup.power == 'health':
            player.health += 20
            print(f"Health boost! Player health: {player.health}")
        elif powerup.power == 'speed':
            player.speed += 1
            print(f"Speed boost! Player speed: {player.speed}")
    
    # Update enemies
    enemies.update()

    # Draw everything
    screen.fill((0, 0, 0))
    all_sprites.draw(screen)
    
    pygame.display.flip()
    clock.tick(60)  # 60 FPS

pygame.quit()
sys.exit()
Health boost! Player health: 120
Player health: 110
Speed boost! Player speed: 6

Game Features

Component Color Function
Player Red Controlled by arrow keys
Enemies Blue Move horizontally, damage player
PowerUps Green Boost health or speed

Controls

  • Arrow Keys: Move the player up, down, left, right
  • Close Window: Exit the game

Conclusion

This 8-bit style game demonstrates pygame's sprite system with collision detection and basic game mechanics. You can extend this by adding sound effects, scoring systems, and more complex graphics to create a fully featured retro-style game.

Updated on: 2026-03-27T01:01:12+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements