Files
martijn.diersmann@pm.me 4c1f670e9f tetris klaar
2026-09-26 20:38:55 +02:00

106 lines
3.1 KiB
Markdown

# 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/<gebruiker>/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://<kube-node-ip>: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.