StrateGO

StrateGO

Svelte Go TypeScript PostgreSQL Docker NixOS

Stratego is een leuk spel, maar wat als we het opnieuw zouden ontwerpen?

Ik kreeg de uitdaging om een stratego spel te maken, maar dan herontworpen. Het doel was om een framework te creëren om een AI te trainen om stratego te spelen. Dit kan natuurlijk worden uitgebreid met veel meer functionaliteiten, zoals spelen tegen andere mensen, data verzamelen, …

Het spel

Het spel zelf is gebaseerd op de standaardregels van stratego.

Backend

De backend is gebouwd met Go en gebruikt een PostgreSQL database om de spelstatus op te slaan. De eerste versie van de backend is pure Go met een REST API en Websockets. De backend kan onafhankelijk van de frontend worden gebruikt om AI’s sneller te trainen en te testen (veel sneller).

Go

Ik had al een beetje ervaring met Go, maar niet veel, vooral theoretisch. Toen ik aan het project begon, wist ik niet veel over frameworks in Go en koos ik voor vanilla.

Go is erg goed gebouwd voor gelijktijdigheid (concurrency) en dat heb ik in mijn voordeel gebruikt. Het hele spel is gebouwd rond Go routines en channels. Elk spel is een eigen Go routine en communiceert met de frontend via websockets.


De kritieke spelonderdelen zijn volledig gedekt door unit tests om de integriteit van het spel te waarborgen.

PostgreSQL

De database is gebouwd met PostgreSQL, een moderne optie voor relationele databases.

AI training

AI training kan via de CLI worden gedaan. Op deze manier kunnen we gemakkelijk zien hoe AI’s tegenover elkaar presteren. Het trainen is erg snel, een van de redenen waarom we Go hebben gekozen voor de backend.

Frontend

De frontend is gebouwd met SvelteKit en TypeScript.

Ik heb ervoor gekozen om geen serverfuncties en SSR (server side rendering) op te nemen, omdat we al een backend hebben die onafhankelijk van de frontend kan worden gebruikt. Het is ook niet nodig om de website supersnel te renderen.

Svelte is een uitstekend framework dat echt boven de rest uitsteekt. Het gebruikt tailwind gemixt met CSS voor styling.

Docker maakt alles makkelijker

Alle diensten zijn gecontaineriseerd met Docker. Dit maakt het eenvoudig om het project in verschillende omgevingen te implementeren en vooraf te testen.

Thema

Voor het thema heb ik geprobeerd een moderne look te creëren die toch speels blijft. Alle afbeeldingen en personages zijn geïnspireerd door de Go-mascotte “gopher”.

Stukken

De stukken zijn een modernere versie van de klassieke stratego stukken. Ze vertegenwoordigen een moderner slagveld met tanks, IT-specialisten, mortieren, …
De essentie van de stukken is behouden: bommen zijn bommen en het machtigste stuk is nog steeds de maarschalk.

AI’s

Voorlopig hebben we 2 AI’s. In de toekomst zullen er meer AI’s worden toegevoegd.

FAFO

De f*ck around and find out AI. Deze AI is erg simpel: pak een willekeurig stuk en doe een willekeurige geldige zet. Dat is alles. Hij weet niet wat er aan de hand is, hij leeft alleen op hoop en gebed.

FATO

De f*ck around and try out AI. Deze AI is iets geavanceerder dan FAFO. Hij probeert het bord te begrijpen en strategische zetten te doen, maar als hij niet weet wat hij moet doen, doet hij gewoon een willekeurige zet.

Hosting @ home

Aan de hosting wordt momenteel gewerkt. Ik heb een NixOS VM opgezet op een Proxmox-server die uiteindelijk het project zal hosten. Het is makkelijk gemaakt door de docker-compose die al aanwezig is.


Ik werk aan een krachtige CD-pipeline om het project automatisch op mijn server te implementeren.

Dit project is open source!

Voel je vrij om het project op GitHub te bekijken: https://github.com/Thomas-More-Digital-Innovation/2526-DI-004-Stratego

ennl