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

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:

make serve
# open http://localhost:8000

Met Docker:

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:
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:

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:

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

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.

S
Description
No description provided
Readme 39 KiB
Languages
JavaScript 61.5%
CSS 20.1%
HTML 12.9%
Makefile 3.2%
Dockerfile 2.3%