# Neo Tetris Een Tetris-clone als pure browser-game (HTML/CSS/JS + Canvas), zonder backend of database. De highscore wordt per browser bijgehouden via `localStorage`. Het geheel draait als statische content achter nginx en is bedoeld om in Kubernetes te draaien. ## Speel het spel **Besturing:** | Toets | Actie | | ---------------- | ---------------------- | | `◀` / `▶` | verschuiven | | `▼` | zacht laten zakken | | `▲` / `X` | rechtsom draaien | | `Z` | linksom draaien | | `Spatie` | hard drop | | `C` | hold | | `P` | pauze | | `R` | opnieuw starten | Regels: vorm lijnen met de 7 tetromino's. Elke 10 lijnen ga je een level omhoog en valt het blok sneller. Punten: 1 rij = 100, 2 = 300, 3 = 500, 4 = 800 (komma's vermenigvuldigd met je level), plus bonus voor hard/soft drop. Verdien je een top-10 score, dan kun je je naam invullen. ## Projectstructuur ``` game/ # de statische game (index.html, css/, js/) k8s/ # Kubernetes-manifests (kustomize) Dockerfile # nginx-image die game/ serveert Makefile # handige commands ``` ## Lokaal ontwikkelen Zonder Docker: ```bash make serve # open http://localhost:8000 ``` Met Docker: ```bash make build make run # open http://localhost:8080 ``` ## Deployen naar Kubernetes De manifests zitten in `k8s/` (kustomize) en bestaan uit: `namespace.yaml`, `deployment.yaml` en `service.yaml` (NodePort op `30080`). 1. Pas de `image` in `k8s/deployment.yaml` aan naar jouw registry (bijv. `ghcr.io//neo-tetris:latest`), of gebruik een lokaal cluster (k3d/kind) met `imagePullPolicy: IfNotPresent`. 2. Deployen: ```bash make build && make push # image in je registry zetten make preview # manifests valideren (kubectl kustomize) make deploy # kubectl apply -k k8s/ ``` Daarna is het spel bereikbaar op het **NodePort**-adres van elk knooppunt: ```text http://:30080/ ``` De game is volledig stateless en kan dus eenvoudig horizontaal worden opgeschaald (`kubectl scale deployment neo-tetris -n games --replicas=5`). ### Lokaal testen met kind (op macOS) Op macOS draait kind in een VM en is het interne node-IP niet vanaf de host bereikbaar. Gebruik daarvoor `kind-config.yaml` in deze repo, die poort `30080` van het knooppunt naar `localhost` doorzet: ```bash kind create cluster --config kind-config.yaml --name kind kind load docker-image neo-tetris:latest --name kind make deploy # open http://localhost:30080 ``` ### Handige commando's ```bash make status # pods/service in één oogopslag make logs # logs van de pods volgen make pf # alternatief: tijdelijk port-forwarden naar localhost:8088 make undeploy # alles verwijderen (kubectl delete -k k8s/) ``` ## Highscores Scores staan in `localStorage` (top 10 per browser). Wil je later één gedeelde ranglijst voor alle spelers, dan kun je er een klein stateless API'tje (met een database) voor toevoegen zonder de game zelf te veranderen.