tetris klaar
This commit is contained in:
@@ -0,0 +1,105 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user