From 9a5f212ef8c09cf4c809ac5f01fa68e9d982a1d7 Mon Sep 17 00:00:00 2001 From: Ferdinand Date: Tue, 31 Mar 2026 14:15:01 +0200 Subject: [PATCH] chore: initial project state with snake and design docs --- CLAUDE.md | 19 + docs/.DS_Store | Bin 0 -> 6148 bytes docs/superpowers/.DS_Store | Bin 0 -> 6148 bytes .../plans/2026-03-31-retro-arcade-platform.md | 1022 +++++++++++++++++ ...2026-03-31-retro-arcade-platform-design.md | 97 ++ snake.html | 275 +++++ 6 files changed, 1413 insertions(+) create mode 100644 CLAUDE.md create mode 100644 docs/.DS_Store create mode 100644 docs/superpowers/.DS_Store create mode 100644 docs/superpowers/plans/2026-03-31-retro-arcade-platform.md create mode 100644 docs/superpowers/specs/2026-03-31-retro-arcade-platform-design.md create mode 100644 snake.html diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..6a00325 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,19 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +Regeln +Du darfst auf keinen Fall aus dem Projektordner ausbrechen!!! + +## Project + +This is a single-file browser game (`snake.html`) — a self-contained Snake implementation in plain HTML, CSS, and JavaScript with no build step, no dependencies, and no package manager. + +## Running the game + +Open directly in a browser: +``` +open snake.html +``` + +No server, compilation, or installation required. diff --git a/docs/.DS_Store b/docs/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..52a89a9b82a7036eee1bb7f549ac80c3bc17f3af GIT binary patch literal 6148 zcmeHK-A)rh6g~r0wji=VtALtp?2QSi)Ih`-LoFC>jDb*sMZmgkhq88=X?C|%AS8VO zO?&_!z-QpbOK-gO&iDv=>y@7Q*&xPqh3SL`uR1qlq0OS1nBy$49Y#G#a4Hl-)*m~p!kby%U=?3-^Qys!8}XufVSoQ>dU|SR z!n%>3Ihe5a)9G8&6V}b?$%BKqkxX5`y;Q8Z+l;@IQvib7mb8A2A-qDTgDg&YM^BJ^ z2q*a2G{Y&zd;8AxpB*poue)3m~=73-J zxa%%*-w7PfR@Z$LJ{QpK9NXkL;tq z>HahjADs@rd?)WQm$NEHgzV$wlUdSpG5SvC=SN>1DG({}2Ne+egM~?8Mq^8%+&VCm zPXI)5jgW@ExGV^cr7@$ir4U=th@v7YD$!32qUcy}>9~x>mO@1bB1gu4^vFcNP>38I z>n#}$B%?6OBLyM_jw{fuil#XK?{$9vA16hnNP$R!|4IQ8o6paS=e<5#+a@Q@S_{)N sOu|H5OQED-rjKLkh@*G}lQe9zgoBvT*iwi!XwgML$`ECd0)JJ3AD#o>vj6}9 literal 0 HcmV?d00001 diff --git a/docs/superpowers/.DS_Store b/docs/superpowers/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2ae6d19d443fc0bbeb77b85b26f1e717aecf4217 GIT binary patch literal 6148 zcmeHKPfrs;6rX`2TToe`RX|NP_F@7mH4rhzPzy#IV<41Z5wPxVhq88=X?C|%ASC?) zn)m_y0DcB89=&+=X8Z_x^`vk9Y$#R_UW}1>$(!GsH}B2t`)zh+2O)&>jY<|F6Cq@P za!m9=^9$kQTsx#oc@ltF%n=rR<~lxeI%2g$GoTsx_ZZ;cZVw7k9TDWB_V1T(33^qlH7dX0W#qqxPI#mJ5tVcrhbcyF08--&J8 zS@B4-Y^LTIjckvSKqPn-0wL>D|7v!6YG%T^k)1i1 zu=carThkNP&FRU5gQStpT)(|kuKC-Py%dj)FlxEI(_c^$mrPE#j-i<*lw*F@W-8FJ`3`GgRE5puTreru1Bk- zh`fl3-X1BNLqCNsk;>B}*Ya*1Vp2yAG2Q)u5Gv+d*xU?BRBE$V%jQ7n2F&*tS?EO` zqpRy7kX?w#c7bj(SaAo4Ua0e-aD@aRU`I}A)eZuiR!M$$!?zvcFVH-TBDT#V`D`wu zivi&?l{~O{Et%P`lE+N$VQgHHhKVxLfTJT7TMBXJUCk2qGG&w`lbPJ28Zyv0x{Ds6 z6;wle=rwwS-l9YF9(_Vz&^O$RNAYDmj;HV)Jc}RT0)B#ByoEjdT;_MhulbUiPXP|W zXnV~&#en*ZR>2!*98WkIJypBWe=^F|RcZz_1Ao8(-ybYcjyZ)biDK)3MqB{^`EP^} zu=$Sz&#@Hd6t*P72nd#`fHD=UD+ZS7;I~v&eo3N_*rX#J_F^#<606$ l3N-3C76w0xM?i(Zn8gjioWhnw@POza0YQUqGy{K?fgi8P)zJU| literal 0 HcmV?d00001 diff --git a/docs/superpowers/plans/2026-03-31-retro-arcade-platform.md b/docs/superpowers/plans/2026-03-31-retro-arcade-platform.md new file mode 100644 index 0000000..a8a7a0b --- /dev/null +++ b/docs/superpowers/plans/2026-03-31-retro-arcade-platform.md @@ -0,0 +1,1022 @@ +# 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

+ + + + + + +``` + +- [ ] **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" +``` diff --git a/docs/superpowers/specs/2026-03-31-retro-arcade-platform-design.md b/docs/superpowers/specs/2026-03-31-retro-arcade-platform-design.md new file mode 100644 index 0000000..109b45b --- /dev/null +++ b/docs/superpowers/specs/2026-03-31-retro-arcade-platform-design.md @@ -0,0 +1,97 @@ +# Retro Arcade Platform — Design Spec + +**Date:** 2026-03-31 + +## Overview + +Erweiterung des bestehenden Snake-Spiels zu einer kleinen Retro-Arcade-Plattform mit vier Spielen. Alle Dateien sind plain HTML/CSS/JS, kein Build-Schritt, kein Server, kein Package Manager — direkt im Browser öffenbar. + +## Spiele + +1. **Snake** — bestehendes `snake.html`, minimal angepasst +2. **Tetris** — neu +3. **Breakout** — neu +4. **Space Invaders** — neu + +## Dateistruktur + +``` +testprojekt/ +├── index.html ← Startmenü (neu) +├── style.css ← gemeinsame Styles (neu) +├── scores.js ← Highscore-Logik (neu) +├── snake.html ← angepasst (shared assets einbinden) +├── tetris.html ← neu +├── breakout.html ← neu +└── spaceinvaders.html ← neu +``` + +## Architektur + +### Gemeinsame Assets + +**`style.css`** +- Navy/Teal-Theme: Hintergrund `#1a1a2e`, Akzent `#4ecca3`, Schrift `Courier New` +- Gemeinsame Klassen: Body-Layout, Überschriften, HUD, Canvas-Border, Overlay, Buttons, Game-Kacheln +- Wird von allen HTML-Dateien via `` eingebunden + +**`scores.js`** +- `getHighscore(game)` — liest aus `localStorage` (`hs_snake`, `hs_tetris`, `hs_breakout`, `hs_spaceinvaders`), gibt `0` zurück wenn kein Eintrag +- `setHighscore(game, score)` — speichert nur wenn `score > getHighscore(game)` +- Wird via `` eingebunden + +### Startmenü (`index.html`) + +- Titel: "RETRO ARCADE" in Teal, zentriert +- 2×2 Grid mit einer Kachel pro Spiel +- Jede Kachel zeigt: Spielname + aktuellen Highscore (gelesen beim Seitenload via `scores.js`) +- Klick auf Kachel → öffnet die jeweilige Spieldatei (`href="snake.html"` etc.) +- Highscores werden beim Öffnen von `index.html` frisch aus `localStorage` gelesen — immer aktuell + +### Einzelne Spiele + +Jedes Spiel bekommt: +- `` und `` im Head +- "← Menü"-Button oben links, verlinkt auf `index.html` +- Beim Game Over: `setHighscore('tetris', score)` (bzw. jeweiliger Spielname) aufrufen, bevor der Overlay angezeigt wird +- Spielspezifische Styles (z.B. Tetris-Blockfarben) inline im jeweiligen ` + + +

SNAKE

+
+ Score: 0    Highscore: 0 +
+ +
+ +
+

SNAKE

+

Steuere die Schlange mit den Pfeiltasten oder WASD

+ +
+
+ +
Pfeiltasten / WASD  |  P = Pause
+ + + +