Gheeforge

Online kaartspel

Gheeforge was een JavaScript leerproject waarbij het doel was om een fysiek kaartspel genaamd Keyforge na te maken. Dit is gelukt, compleet met online multiplayer. De UI is nog niet afgemaakt omdat het implementeren daarvan niet helemaal bij de leerdoelen past, en omdat er werk voor klanten prioriteit begon te nemen. Het gaat nog afgemaakt maken, zodat het niet voor eeuwig een minimale UI heeft.

Vanwege de grootte van het project en de complexiteit van het implementeren van de spelregels was dit een flinke verdiepingsslag binnen Javascript. Er moest omgegaan worden met dingen zoals overerving, recursiviteit en asynchrone code. Het werd het belangrijk om goed met planning om te gaan. Allerlei aspecten van het spel moesten netjes doordacht en functioneel beschreven worden. Azure DevOps werd nodig om alles bij te houden en te orderen. De bedoeling was om kleine stukjes op te kunnen pakken en af te maken, en het vervolgens niet meer op te hoeven pakken.

Gheeforge heeft 63 unieke spelkaarten met allerlei eigenschappen die zijn vastgelegd in een JSON bestand. Deze JSON word met AJAX ingeladen en vervolgens worden er JavaScript objecten van gemaakt. Het opslaan en laden van het spel maakt hier ook gebruik van.

Er is een game engine gemaakt die deze kaart data, en met name de speciale regels, kan interpreteren en kan omzetten naar praktische uitvoering van het spel. De kracht van deze engine is dat er nu relatief gemakkelijk nieuwe kaarten toegevoegd kunnen worden, die andere of nieuwe regels hebben.

Voorbeeld kaart ability: "Play: Deal 1 damage to up to 3 creatures. Gain 1 aember for each creature destroyed this way."

Het multiplayer onderdeel van het spel werkt met SignalR, waarmee een lobby opgezet is waarmee spelers in hun webbrowser kunnen verbinden. In de lobby kunnen mensen een spel opzetten, met elkaar verbinden en gaan starten. De server met SignalR is geschreven in C# en die is verantwoordelijk voor het doorgeven van informatie van het spel naar alle spelers. Het multiplayer stuk van het spel zorgde voor complexiteit, en veel code moest omgeschreven worden naar asynchroon. Een aantal handelingen moesten opgebroken worden in requests die naar andere spelers gecommuniceerd kunnen worden. Er waren een aantal situaties met willekeurigheid en spelers die keuzes maken waardoor hetzelfde request meerdere keren heen en weer moest kunnen gaan.

Uiteindelijk is dit project een flinke verdiepingslag in javascript geworden, waarmee ik comfortabel ben geworden in het gebruik van Jquery, het omgaan met data in arrays en het maken van selecties en filters daarvan. Een van mijn favoriete stukken code was het omgaan met het selecteren van welke kaarten geraakt worden door andere kaart-effecten. Het spel heeft allerlei smaken van selecteren, zoals: random, kiezen, buren van kaarten, je eigen kaarten, kaarten van je tegenstander of nog ingewikkeldere. Keyforge