# 🚀 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 ### Zwei Spielmodi | Modus | Wie | |---|---| | **Popup** (kompakt, 420×600) | Toolbar-Icon klicken → **SPIEL STARTEN** | | **Vollbild** (eigener Tab, bis 900×680) | Toolbar-Icon klicken → **🖥️ Im Vollbild spielen** | Im Vollbild-Modus öffnet sich das Spiel in einem eigenen Tab. Dieser Tab ist **geschützt** – er taucht nie als Ziel auf und lässt sich nicht abschießen. Perfekt, wenn du mehr Platz und eine bessere Übersicht willst. ### Ablauf 1. Modus wählen & Scope wählen: **Aktuelles Fenster** oder **Alle Fenster**. 2. **SPIEL STARTEN** drücken. 3. Deine echten Tabs erscheinen als gegnerische Raumschiffe (mit echtem Favicon + Titel). 4. Schießen — jeder Tab, den du triffst, wird in Chrome **wirklich geschlossen**. > 🛡️ **Selbstschutz:** Folgende Tabs sind nie Ziele: > - der Tab, der das Popup trägt (sonst würde sich das Spiel selbst beenden) > - der Game-Tab im Vollbild-Modus > - alle internen Chrome-Seiten (`chrome://`, `devtools://`, …) > - alle Seiten dieser Extension selbst ### 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 ├── engine.js # Geteilte Game-Engine (Klasse TabShooterGame) ├── popup.html # Popup-UI (kompakt) ├── popup.css # Shared Space-Theme Styling ├── popup.js # Popup-Controller (nutzt engine.js) ├── game.html # Vollbild-UI (eigener Tab) ├── game.css # Vollbild-Overrides ├── game.js # Vollbild-Controller (nutzt engine.js) ├── 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! 🛸💥