Skip to content

Latest commit

 

History

16 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Galago

Galago

A Galaga-style arcade shoot-'em-up written in Python with pygame, featuring the classic tractor-beam capture mechanic and a Tokyo Night color palette.

Features

  • 100 stages: wave-based enemy formations (drones, bees, boss) with swooping attack patterns, escalating difficulty
  • Boss tractor-beam capture/rescue mechanic — free your captured ship to unlock dual-fighter mode
  • A solo boss fight every 10 stages, bigger/faster/uglier each time, culminating in a multi-hit final boss (stage 100) that summons reinforcements and ends in a proper death sequence — screen flash, multiple explosions, and a victory screen
  • Classic no-combat bonus stages every 10 stages (can't lose a life, just rack up points)
  • Local Top-10 leaderboard with arcade-style 3-letter initials entry, viewable from the title screen (H)
  • Procedurally generated 8-bit chiptune sound effects plus a looping background track (no external audio assets required for the SFX)
  • Bézier-curve enemy swoop paths and a scrolling starfield
  • Optional intro screen with a portrait easter egg

Requirements

pip install pygame

Run

python galago.py

Prebuilt executables

Standalone Windows/Linux executables (no Python or pygame install required) are built automatically for tagged releases — see the Releases page. To build one yourself:

pip install -e . pyinstaller
pyinstaller galago.spec

The result is a single-file executable at dist/galago (Linux) or dist/galago.exe (Windows) — built on the OS you're targeting, PyInstaller doesn't cross-compile.

Controls

Action Keys
Move Arrow keys / WASD
Shoot Space / Up / W
Confirm / Restart Enter
High scores (from title) H
Enter initials (on a new high score) Arrows to pick letter/position, Enter to confirm
Quit Q / Esc

Architecture

The game follows a pragmatic hexagonal (ports & adapters) layout under src/galago/:

  • domain/ — entities, collisions, formation movement, the boss capture state machine, scoring. Pure Python, zero pygame import.
  • ports/ — small Protocol interfaces (Renderer, InputProvider, AudioPlayer, GameClock) that the application layer depends on.
  • app/GameApp, the screen state machine (title → wave → playing → game over) driven purely through the ports.
  • adapters/pygame_adapter/ — the only place that imports pygame: rendering, input polling, procedural audio synthesis, and the clock.

galago.py at the repo root is a thin compatibility shim so python galago.py keeps working unchanged.

Development

pip install -e ".[test]"
pytest

The domain layer (src/galago/domain/) has no dependency on pygame and its tests run even without pygame installed — that's what proves the decoupling actually holds.

Support this project

If you'd like to support ongoing development, you can sponsor via GitHub Sponsors.

Credits

Construido en HarnessOS con VS Code y Claude, por efrasoft@gmail.com.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages