- Add new fullscreen game mode playable in a dedicated browser tab - Extract shared game logic into `engine.js` to be used by both popup and fullscreen modes - Implement self-protection to prevent closing the game tab or popup tab - Update documentation and bump version to 1.1.0
3.9 KiB
🚀 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)
- Chrome öffnen →
chrome://extensionsaufrufen. - Oben rechts den Entwicklermodus (Developer mode) einschalten.
- Auf „Entpackt laden“ (Load unpacked) klicken.
- Den Ordner
tab-shooterauswählen. - Das Tab-Shooter-Icon 🚀 erscheint in der Toolbar. Anklicken → Spiel startet.
Nach Code-Änderungen in
popup.js/manifest.jsondie Extension aufchrome://extensionseinfach 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
- Modus wählen & Scope wählen: Aktuelles Fenster oder Alle Fenster.
- SPIEL STARTEN drücken.
- Deine echten Tabs erscheinen als gegnerische Raumschiffe (mit echtem Favicon + Titel).
- 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):
python generate_icons.py
Das Skript nutzt nur die Python-Standardbibliothek (zlib + struct) — keine PIL nötig.
Viel Spaß beim Aufräumen! 🛸💥