Umbau zu "Wanted!"-Minigame
- Neues Spielprinzip: Fahndungsplakat + Feld voller Fuesse/Deko, gesuchten Fuss antippen bevor Timer ablaeuft; sofort neue Runde mit anderer Farbe. - Progression: Raster -> wild verteilt -> Bewegung (2-3 Gruppen -> einzeln), Anzahl + Tempo steigen mit Score. - Farben: 8 klar unterscheidbare Fuss-Farben (kein Braun/Hautton-Doppel) -> die gesuchte Farbe kommt garantiert nur EINMAL vor. - Serverseitige Rangliste (data/leaderboard.json), Top 10 auf der Startseite, Name einmalig abgefragt + in localStorage gecacht. - Reset per Befehl: npm run reset-stats - Server stark vereinfacht (/api/feet, /api/leaderboard, /api/score); Pan/Zoom-, Wimmelbild- und Szenen-Generator-Code entfernt. - WANTED-Plakat groesser, Timer schlanker, Startseite sauber zentriert. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
113
README.md
113
README.md
@@ -1,98 +1,73 @@
|
||||
# fuesse.sexy — „Where's the Feet" 🦶
|
||||
# fuesse.sexy — „Wanted!" 🦶
|
||||
|
||||
Ein Wimmel-Suchspiel im Stil von „Wo ist Waldo?" — nur werden **Füße** in einem
|
||||
detailreichen Wimmelbild gesucht. Pro Szene sind **3 verschiedene Füße** versteckt;
|
||||
finde alle drei, dann kommt die nächste zufällige Szene.
|
||||
Ein kleines Arcade-Spiel nach dem Vorbild des **„Wanted!"-Minispiels aus New Super Mario
|
||||
Bros.**: Oben ein Fahndungsplakat mit *einem* gesuchten Fuß, unten wuseln viele Füße (in
|
||||
verschiedenen Farben) + etwas Deko herum. **Schnapp dir den gesuchten Fuß, bevor die Zeit
|
||||
abläuft** — dann kommt sofort ein neues Plakat mit einer anderen Farbe.
|
||||
|
||||
- **Kein Start-Screen, keine Auswahl** — Seite öffnen und sofort losspielen.
|
||||
- **Google-Maps-Gefühl:** ziehen, Mausrad-Zoom am PC, Zwei-Finger-Pinch am Handy.
|
||||
- **Prozedural generiert:** Der Server würfelt jede Szene aus einer gemeinsamen
|
||||
**Library** neu zusammen und prüft Klick-Treffer serverseitig (nicht durch „im Code
|
||||
spicken" austrickbar).
|
||||
- **Library statt Level:** Normale Szenen ziehen Deko + Füße aus `library/`. Themen sind
|
||||
unsichtbar/zufällig gemischt. **Spezial-Level** (z.B. Emoji-Chaos) sind die Ausnahme.
|
||||
- **Zeitdruck:** Countdown; jeder Treffer gibt Zeit dazu, Fehlklick zieht Zeit ab. Bei 0 → Game-Over.
|
||||
- **Wird schwerer:** erst ordentliches **Raster**, dann **wild verteilt**, dann **Bewegung**
|
||||
(erst in 2–3 Gruppen, später einzeln) — und je weiter, desto **schneller** und **mehr** Füße.
|
||||
- **Gesucht ist immer ein Fuß, aber die Farbe wechselt jede Runde** — nicht auf Autopilot klicken!
|
||||
- **Rangliste:** die Top 10 auf der Startseite, serverseitig gespeichert. Nach dem Spiel
|
||||
wird **einmal** nach dem Namen gefragt (danach gecacht).
|
||||
|
||||
## Installation
|
||||
|
||||
```sh
|
||||
./install.sh # prüft Node, installiert Abhängigkeiten
|
||||
npm start # startet den Server
|
||||
./install.sh
|
||||
```
|
||||
|
||||
Dann im Browser: **http://localhost:3000**
|
||||
Das Skript installiert alles Nötige, startet den Server **im Hintergrund** und zeigt die
|
||||
URL. Dann im Browser öffnen: **http://<server-ip>:3000** (lokal: http://localhost:3000).
|
||||
|
||||
(Alternativ: `npm run setup` statt `./install.sh`.)
|
||||
Manuell: `npm install && npm start`.
|
||||
|
||||
## Die Library erweitern (der Normalfall)
|
||||
## Die Füße & Deko erweitern
|
||||
|
||||
Normale Szenen ziehen ihre Bildchen aus der gemeinsamen Library:
|
||||
Alle Bildchen liegen in `library/`:
|
||||
|
||||
```
|
||||
library/
|
||||
props/ ← Deko-Bildchen (alles, was KEIN Fuß ist: Ball, Muschel, Krabbe …)
|
||||
feet/ ← Fuß-Bildchen. Der Server wählt pro Szene 3 als Ziele aus,
|
||||
die übrigen streut er als Ablenker mit ein.
|
||||
feet/ ← die Füße (= die gesuchten Figuren). Farbe = Dateiname.
|
||||
props/ ← Deko ("andere Bildchen") als Zusatz-Ablenker.
|
||||
```
|
||||
|
||||
Zum Erweitern einfach neue Bildchen in den passenden Ordner legen und **Server neu
|
||||
starten** — fertig. Kein Code, kein Level.
|
||||
Neue Bildchen einfach in den passenden Ordner legen und **Server neu starten** — fertig.
|
||||
Formate: `.svg`, `.png`, `.webp`, `.jpg`. Für Füße gilt: **mind. 2** in `library/feet/`
|
||||
(mehr = mehr Farb-Vielfalt). Am besten freigestellt (transparenter Hintergrund), grob
|
||||
quadratisch.
|
||||
|
||||
- **Deko** (kein Fuß) → `library/props/`
|
||||
- **Füße** (zum Suchen) → `library/feet/` · **mind. 3** müssen vorhanden sein
|
||||
- **Formate:** `.svg`, `.png`, `.webp`, `.jpg`
|
||||
- **Tipp:** freigestellte Bildchen mit **transparentem Hintergrund**, grob quadratisch —
|
||||
dann sitzt die Trefferzone gut. Der Dateiname wird zum Namen in der „Gesucht"-Leiste.
|
||||
### Woher Bildchen nehmen?
|
||||
openclipart.org (CC0), svgrepo.com (CC0-Filter), kenney.nl (CC0), pixabay.com. Bei
|
||||
Flaticon/Freepik Namensnennung beachten.
|
||||
|
||||
## Spezial-Level (die Ausnahme)
|
||||
## Feintuning
|
||||
|
||||
Ein Spezial-Level ist ein eigenständiger Ordner unter `scenes/` mit eigener `config.json`.
|
||||
Es taucht gelegentlich zwischen den normalen Library-Szenen auf.
|
||||
In `public/js/app.js` oben:
|
||||
- `START_TIME`, `MAX_TIME`, `BONUS`, `PENALTY` — Timer/Balance.
|
||||
- `difficulty(score)` — Anzahl, Bewegungs-Stufen (`grid`/`scatter`/`groups`/`individual`)
|
||||
und Tempo je Score.
|
||||
|
||||
- `emoji` — Emojis statt Bilddateien; man sucht den Fuß 🦶 im Emoji-Gewimmel.
|
||||
Siehe `scenes/emoji-chaos/config.json`. Einheitlicher Look: `public/emoji/README.md`.
|
||||
- `photo` — freigestellte Fotos statt Zeichnungen (eigene `props/` + `targets/`).
|
||||
Vorlage: `scenes/strand-foto/README.md`.
|
||||
## Rangliste
|
||||
|
||||
Wie oft normale Library-Szenen im Vergleich zu Spezial-Leveln kommen, steuert
|
||||
`LIBRARY_WEIGHT` in `server/index.js`.
|
||||
|
||||
## Woher bekomme ich Bildchen? (Gratis-Quellen)
|
||||
|
||||
**Clipart (SVG/PNG):**
|
||||
- **openclipart.org** — gemeinfrei (CC0), riesig. *Sicherste Quelle.*
|
||||
- **svgrepo.com** — nach Lizenz „CC0 / Public Domain" filtern.
|
||||
- **kenney.nl** — hochwertige Asset-Packs, CC0.
|
||||
- **pixabay.com** — Vektoren + freigestellte PNGs (kommerziell ok).
|
||||
- **flaticon.com / freepik.com** — riesig, aber Gratis-Tier braucht Namensnennung.
|
||||
- **game-icons.net** — 4000+ SVG-Icons (CC-BY).
|
||||
|
||||
**Fotos (für Foto-Level, danach freistellen):**
|
||||
- **pexels.com**, **unsplash.com**, **pixabay.com** (kostenlos, kommerziell nutzbar)
|
||||
- Freistellen: **remove.bg** (1-Klick) oder **photopea.com** (Gratis-Editor)
|
||||
|
||||
**Emoji:** OpenMoji / Twemoji / Noto — siehe `public/emoji/README.md`.
|
||||
|
||||
> Achte pro Datei auf die jeweilige Lizenz. Am sorgenfreisten sind openclipart, SVGRepo
|
||||
> (CC0-Filter), Kenney und Pixabay.
|
||||
- Gespeichert in `data/leaderboard.json` (wird automatisch angelegt, überlebt Neustarts).
|
||||
- Endpoints: `GET /api/leaderboard` (Top 10), `POST /api/score` `{name, score}`.
|
||||
- Namen werden beim Anzeigen escaped (kein XSS). Kein Anti-Cheat — Spaßspiel.
|
||||
|
||||
## Deployment (Ausblick)
|
||||
|
||||
Das Spiel ist ein normaler Node-Server. Zum Livestellen auf **fuesse.sexy**:
|
||||
|
||||
1. Auf einen Node-Host bringen (z.B. **Railway**, **Render**, oder ein **VPS**).
|
||||
2. `npm install` und `npm start` (Standard-Port 3000; via `PORT`-Env änderbar).
|
||||
3. Die Domain **fuesse.sexy** per DNS/Reverse-Proxy auf den Server zeigen (HTTPS via
|
||||
dem Host oder z.B. Caddy/Nginx + Let's Encrypt).
|
||||
Normaler Node-Server. Auf einen Node-Host bringen (VPS/LXC/Railway/Render), `./install.sh`,
|
||||
Domain **fuesse.sexy** per Reverse-Proxy (z.B. Nginx Proxy Manager) darauf zeigen. Für
|
||||
HTTPS hinter Cloudflare: DNS-Challenge (Cloudflare-Token) im Proxy nutzen.
|
||||
|
||||
## Projektstruktur
|
||||
|
||||
```
|
||||
server/ Express-Server + Szenen-Generator (die "Wimmelbild-Fabrik")
|
||||
public/ Frontend (Vanilla JS + SVG, Szene wird als 1 Bild gerendert)
|
||||
emoji/ optionales Emoji-Bildset
|
||||
library/ die Fundgrube für normale Szenen
|
||||
props/ Deko (kein Fuß)
|
||||
feet/ Fuß-Bildchen (Ziele + Ablenker)
|
||||
scenes/ Spezial-Level (Ausnahmen: emoji, photo)
|
||||
install.sh Ein-Befehl-Setup
|
||||
server/index.js schlanker Express-Server (Bildchen-Liste + Rangliste)
|
||||
public/ Frontend (Startseite, Spiel, Game-Over) — Vanilla JS
|
||||
library/feet/ die Füße (gesuchte Figuren)
|
||||
library/props/ Deko-Ablenker
|
||||
data/ Rangliste (leaderboard.json, zur Laufzeit)
|
||||
install.sh Ein-Befehl-Setup + detached Start
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user