# Retro Arcade Platform Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Erweitere das bestehende Snake-Spiel zu einer Retro-Arcade-Plattform mit vier Spielen (Snake, Tetris, Breakout, Space Invaders), einem gemeinsamen Startmenü und localStorage-Highscores. **Architecture:** Shared `style.css` und `scores.js` werden von allen Spielen eingebunden. `index.html` dient als Startmenü mit Spielkacheln und Highscores. Jedes Spiel ist eine eigenständige HTML-Datei. Kein Build-Schritt, kein Server — direkt im Browser öffenbar. **Tech Stack:** Plain HTML5, CSS3, JavaScript (Canvas API), localStorage --- ## Dateiübersicht | Datei | Aktion | Verantwortung | |---|---|---| | `style.css` | Neu | Navy/Teal-Theme, gemeinsame Klassen | | `scores.js` | Neu | getHighscore / setHighscore via localStorage | | `index.html` | Neu | Startmenü, 2×2 Spielkacheln mit Highscores | | `snake.html` | Anpassen | shared assets einbinden, Menü-Link, setHighscore aufrufen | | `tetris.html` | Neu | Tetris-Implementierung | | `breakout.html` | Neu | Breakout-Implementierung | | `spaceinvaders.html` | Neu | Space Invaders-Implementierung | --- ### Task 1: Gemeinsames Stylesheet **Files:** - Create: `style.css` - [ ] **Schritt 1: `style.css` erstellen** ```css * { margin: 0; padding: 0; box-sizing: border-box; } body { background: #1a1a2e; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 100vh; font-family: 'Courier New', monospace; color: #e0e0e0; } h1 { font-size: 2rem; margin-bottom: 12px; color: #4ecca3; letter-spacing: 4px; } .hud { display: flex; gap: 40px; margin-bottom: 12px; font-size: 1rem; color: #a0a0c0; } .hud span { color: #4ecca3; font-weight: bold; } canvas { border: 2px solid #4ecca3; box-shadow: 0 0 20px rgba(78, 204, 163, 0.3); display: block; } .overlay { position: absolute; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; } .overlay h2 { color: #4ecca3; font-size: 1.5rem; letter-spacing: 3px; } .overlay p { color: #a0a0c0; font-size: 0.9rem; } .retro-btn { background: transparent; border: 2px solid #4ecca3; color: #4ecca3; padding: 10px 24px; font-family: 'Courier New', monospace; font-size: 0.9rem; letter-spacing: 2px; cursor: pointer; text-transform: uppercase; } .retro-btn:hover { background: #4ecca3; color: #1a1a2e; } .menu-link { position: absolute; top: 16px; left: 16px; color: #4ecca3; text-decoration: none; font-size: 0.85rem; letter-spacing: 2px; opacity: 0.7; } .menu-link:hover { opacity: 1; } ``` - [ ] **Schritt 2: Im Browser prüfen** Erstelle eine temporäre `test.html` mit `` und einem ``. Öffne im Browser — Button muss transparent mit Teal-Border erscheinen, Hover muss den Hintergrund füllen. Danach `test.html` löschen. - [ ] **Schritt 3: Commit** ```bash git add style.css git commit -m "feat: add shared retro arcade stylesheet" ``` --- ### Task 2: Highscore-Modul **Files:** - Create: `scores.js` - [ ] **Schritt 1: `scores.js` erstellen** ```js function getHighscore(game) { return parseInt(localStorage.getItem('hs_' + game) || '0', 10); } function setHighscore(game, score) { if (score > getHighscore(game)) { localStorage.setItem('hs_' + game, score); } } ``` - [ ] **Schritt 2: Im Browser-Konsole prüfen** Öffne eine beliebige HTML-Datei mit ``. In der DevTools-Konsole: ```js setHighscore('test', 100); getHighscore('test'); // → 100 setHighscore('test', 50); getHighscore('test'); // → 100 (nicht überschrieben, da niedriger) setHighscore('test', 200); getHighscore('test'); // → 200 localStorage.removeItem('hs_test'); ``` - [ ] **Schritt 3: Commit** ```bash git add scores.js git commit -m "feat: add localStorage highscore module" ``` --- ### Task 3: Startmenü **Files:** - Create: `index.html` - [ ] **Schritt 1: `index.html` erstellen** ```html Retro Arcade

RETRO ARCADE

SNAKE
HIGHSCORE
TETRIS
HIGHSCORE
BREAKOUT
HIGHSCORE
SPACE INV.
HIGHSCORE
``` - [ ] **Schritt 2: Im Browser prüfen** `open index.html` — Vier Kacheln müssen im 2×2-Grid erscheinen, alle Highscores zeigen „—". Links zu den Spielen müssen vorhanden sein (noch 404, da Spiele noch nicht existieren). Hover-Effekt auf Kacheln muss sichtbar sein. - [ ] **Schritt 3: Commit** ```bash git add index.html git commit -m "feat: add retro arcade start menu" ``` --- ### Task 4: Snake anpassen **Files:** - Modify: `snake.html` Das bestehende `snake.html` muss folgende Änderungen bekommen: 1. `style.css` und `scores.js` einbinden 2. Den bestehenden ` ← Menü

TETRIS

GAME OVER

← MENÜ
``` - [ ] **Schritt 2: Im Browser prüfen** `open tetris.html`. Prüfen: - Blöcke fallen automatisch - Pfeiltasten links/rechts bewegen, oben rotiert, unten beschleunigt, Leertaste lässt fallen - Vollständige Reihen verschwinden, Score steigt - Level steigt nach je 10 Zeilen, Fallgeschwindigkeit nimmt zu - Game Over erscheint wenn Stapel die Decke erreicht - „← Menü" führt zu index.html - Nach Game Over: `hs_tetris` in localStorage vorhanden (DevTools prüfen) - index.html zeigt den Tetris-Highscore - [ ] **Schritt 3: Commit** ```bash git add tetris.html git commit -m "feat: add Tetris game" ``` --- ### Task 6: Breakout **Files:** - Create: `breakout.html` - [ ] **Schritt 1: `breakout.html` erstellen** ```html Breakout ← Menü

BREAKOUT

SCORE 0
LIVES 3
BEST 0

GAME OVER

← MENÜ
``` - [ ] **Schritt 2: Im Browser prüfen** `open breakout.html`. Prüfen: - Paddle bewegt sich mit Pfeiltasten links/rechts - Ball prallt von Wänden, Paddle und Steinen ab - Steine verschwinden bei Treffer, Score steigt um 10 - Bei 3 verlorenen Leben: Game Over-Overlay - Wenn alle Steine weg: „GEWONNEN!"-Overlay - Highscore in localStorage unter `hs_breakout` nach Game Over - index.html zeigt Breakout-Highscore - [ ] **Schritt 3: Commit** ```bash git add breakout.html git commit -m "feat: add Breakout game" ``` --- ### Task 7: Space Invaders **Files:** - Create: `spaceinvaders.html` - [ ] **Schritt 1: `spaceinvaders.html` erstellen** ```html Space Invaders ← Menü

SPACE INVADERS

SCORE 0
LIVES 3
BEST 0

GAME OVER

← MENÜ
``` - [ ] **Schritt 2: Im Browser prüfen** `open spaceinvaders.html`. Prüfen: - Spieler bewegt sich links/rechts mit Pfeiltasten - Leertaste schießt (max. 3 gleichzeitige Bullets) - Aliens bewegen sich seitwärts und rücken nach unten wenn sie den Rand erreichen - Aliens schießen zufällig zurück - Treffer: Alien verschwindet, Score steigt - Leben sinkt bei Treffer durch Alien-Bullet oder wenn Aliens den Boden erreichen - Game Over / Gewonnen-Overlay erscheint korrekt - Highscore in localStorage unter `hs_spaceinvaders` - index.html zeigt Space-Invaders-Highscore - [ ] **Schritt 3: Commit** ```bash git add spaceinvaders.html git commit -m "feat: add Space Invaders game" ``` --- ### Task 8: Abschlusscheck - [ ] **Schritt 1: Alle Spiele von index.html aus starten** `open index.html` — alle vier Kacheln klickbar, Links funktionieren, Highscores werden angezeigt (oder — wenn noch keine gespielt). - [ ] **Schritt 2: Highscore-Persistenz prüfen** In jedem Spiel ein Game Over provozieren. Dann `index.html` öffnen und prüfen, ob alle vier Highscores korrekt angezeigt werden. - [ ] **Schritt 3: Finaler Commit** ```bash git add . git commit -m "feat: complete retro arcade platform with 4 games" ```