Retro Pixel Multiplayer Arena
A local multiplayer game for 2โ4 players on a shared keyboard. Pure HTML5 Canvas โ one file, zero dependencies.
Built with Kiro
๐ฉ๐ช Deutsche Version
- ๐ฎ 2โ4 players on a single keyboard (local multiplayer)
- ๐ฃ Bombs, chain explosions and destructible walls
- โก Power-ups (extra bombs, bigger range, speed boost)
- ๐จ Pixel-art retro graphics with HTML5 Canvas
- ๐ฆ Zero dependencies โ a single HTML file
- ๐ Randomly generated maps for every round
- ๐ Bilingual โ German and English UI (auto-detected, switchable)
Note: The game auto-detects browser language (DE/EN). A toggle button is available on the start screen.
# Option 1: Just open the file
open index.html
# Option 2: Clone and open
git clone https://github.com/achimbarczok/boomerboy.git
cd boomerboy
open index.htmlNo server, no build, no installation. Works in any modern browser.
| Player | Move | Bomb |
|---|---|---|
| ๐ด Player 1 | W A S D |
Space |
| ๐ก Player 2 | โ โ โ โ |
Enter |
| ๐ข Player 3 | I J K L |
U |
| ๐ต Player 4 | Num8 Num4 Num5 Num6 |
Num0 |
Note: Player 4 requires NumLock to be enabled.
- Select player count on the start screen (2, 3, or 4)
- Place bombs to destroy walls and eliminate opponents
- Collect power-ups hidden under destructible walls:
| Power-Up | Symbol | Effect |
|---|---|---|
| Extra Bomb | B (purple) | +1 bomb capacity |
| Bigger Explosion | E (orange) | +1 explosion range |
| Speed | S (cyan) | +0.3 movement speed |
- Last player standing wins the round
- Simultaneous elimination of all remaining players โ draw
| Component | Technology |
|---|---|
| Rendering | HTML5 Canvas (pixel-art, imageSmoothingEnabled: false) |
| Game logic | Vanilla JavaScript (ES Modules) |
| Game loop | requestAnimationFrame with delta-time |
| Testing | Vitest + fast-check (property-based) |
| Architecture | Single-file (inline) + modular test version |
โโโ index.html # Complete game (playable without build)
โโโ src/
โ โโโ game.js # Game logic as ES module (for tests)
โโโ tests/
โ โโโ board.test.js # Board generation tests
โ โโโ bomb.test.js # Bomb & explosion tests
โ โโโ player.test.js # Player movement tests
โ โโโ powerup.test.js # Power-up tests
โ โโโ input.test.js # Input handling tests
โ โโโ gamestate.test.js # Game state tests
โ โโโ generators.js # Shared fast-check generators
โโโ screenshot/
โ โโโ gameplay.png
โโโ package.json
โโโ vitest.config.js
npm install # Install dev dependencies
npm test # Run all tests
npm run test:watch # Watch mode165 tests including 18 property-based tests validating universal correctness properties.
npm test โ tests/board.test.js (20)
โ tests/bomb.test.js (28)
โ tests/gamestate.test.js (22)
โ tests/input.test.js (40)
โ tests/player.test.js (31)
โ tests/powerup.test.js (15)
โ tests/setup.test.js (9)
Test Files 7 passed (7)
Tests 165 passed (165)
Property-based tests verify:
- Board structure invariants (dimensions, borders, grid pattern)
- Start zone placement for 2/3/4 players
- Movement exactly one cell per step
- Collision blocking (walls, bombs)
- Explosion calculation with wall blocking
- Chain explosion propagation
- Player elimination on explosion cells
- Power-up spawn validity and effect application
- Simultaneous input independence
- Win condition correctness
This project was developed using Kiro, an AI-powered IDE. Development followed the Spec-Driven Development methodology:
- Requirements as user stories with acceptance criteria
- Technical design with correctness properties
- Implementation plan with referenced requirements
- Property-based tests (fast-check) for verification
Spec documents are in .kiro/specs/.
