96 lines
3 KiB
Markdown
96 lines
3 KiB
Markdown
# 🚀 Tab Shooter
|
||
|
||
A small Chrome browser game that turns your open tabs into targets.
|
||
Pilot a spaceship, blast the tabs you no longer need, and they really get closed.
|
||
|
||
> Für alle, die zu viele Tabs offen haben. Schieß sie ab — und sie verschwinden wirklich.
|
||
|
||
---
|
||
|
||
## 📦 Installation (in Chrome laden)
|
||
|
||
1. Chrome öffnen → `chrome://extensions` aufrufen.
|
||
2. Oben rechts den **Entwicklermodus** (Developer mode) einschalten.
|
||
3. Auf **„Entpackt laden“** (Load unpacked) klicken.
|
||
4. Den Ordner `tab-shooter` auswählen.
|
||
5. Das Tab-Shooter-Icon 🚀 erscheint in der Toolbar. Anklicken → Spiel startet.
|
||
|
||
> Nach Code-Änderungen in `popup.js`/`manifest.json` die Extension auf
|
||
> `chrome://extensions` einfach neu laden (🔄-Button).
|
||
|
||
---
|
||
|
||
## 🎮 Spielen
|
||
|
||
1. Auf das Toolbar-Icon klicken.
|
||
2. Wählen: **Aktuelles Fenster** oder **Alle Fenster**.
|
||
3. **SPIEL STARTEN** drücken.
|
||
4. Deine echten Tabs erscheinen als gegnerische Raumschiffe (mit echtem Favicon + Titel).
|
||
5. Schießen — jeder Tab, den du triffst, wird in Chrome **wirklich geschlossen**.
|
||
|
||
### Steuerung
|
||
|
||
| Aktion | Tastatur | Maus |
|
||
|---|---|---|
|
||
| Bewegen | `←` `→` oder `A` `D` | Maus bewegen |
|
||
| Schießen | `Leertaste` | Klick (halten) |
|
||
|
||
### Features
|
||
|
||
- **Echte Tabs als Gegner** – Favicon & Titel, verknüpft via Tab-ID.
|
||
- **Bewegte Gegner** – manche sind „feindlich" und schießen zurück.
|
||
- **Power-Ups** (zufälliger Drop):
|
||
- 🔫 **Triple Shot** – drei Schüße gleichzeitig (6 s)
|
||
- ⚡ **Rapid Fire** – schnellere Schussfolge (6 s)
|
||
- 🛡️ **Shield** – absorbiert einen Treffer
|
||
- **Score & Highscore** – gespeichert via `chrome.storage.local`.
|
||
- **3 Leben**, danach Game Over mit Statistik.
|
||
|
||
---
|
||
|
||
## 🗂 Projektstruktur
|
||
|
||
```
|
||
tab-shooter/
|
||
├── manifest.json # MV3-Manifest, Berechtigungen
|
||
├── popup.html # Overlay-UI: Start-, Spiel- & Game-Over-Screen
|
||
├── popup.css # Space-Theme Styling
|
||
├── popup.js # Game-Engine + Chrome-API-Anbindung
|
||
├── background.js # Service Worker (MV3)
|
||
├── generate_icons.py # Icon-Generator (pure stdlib, keine Abhängigkeiten)
|
||
├── README.md
|
||
└── icons/
|
||
├── icon16.png
|
||
├── icon48.png
|
||
└── icon128.png
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Berechtigungen & Privatsphäre
|
||
|
||
| Permission | Zweck |
|
||
|---|---|
|
||
| `tabs` | Offene Tabs lesen (Titel, Favicon, ID) und getroffene Tabs schließen. |
|
||
| `favicon` | Favicons über die `_favicon`-API laden. |
|
||
| `storage` | Highscore lokal speichern. |
|
||
|
||
**Es werden keine Inhaltsdaten (Page content) von Tabs gelesen** — nur Titel und Favicon-URL.
|
||
Tabs werden **ausschließlich dann** geschlossen, wenn sie im Spiel getroffen wurden.
|
||
Der aktive Popup-Tab und interne `chrome://`-Seiten sind nie Ziele.
|
||
|
||
---
|
||
|
||
## 🛠 Icons neu generieren
|
||
|
||
Falls du die Icons anpassen willst (Farben, Form in `generate_icons.py`):
|
||
|
||
```bash
|
||
python generate_icons.py
|
||
```
|
||
|
||
Das Skript nutzt nur die Python-Standardbibliothek (`zlib` + `struct`) — keine PIL nötig.
|
||
|
||
---
|
||
|
||
Viel Spaß beim Aufräumen! 🛸💥
|