# 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