Een Javascript-spel maken met ChatGPT
Eens per jaar lanceren we bij getDigital onze beruchte getDigital PaaspuzzelWe stellen meer dan 50 nerdy vragen met een steeds hogere moeilijkheidsgraad: Bij de laatste vraag kun je verwachten dat je meerdere dagen bezig bent om hem op te lossen. Maar zelfs met de eenvoudigere vragen kun je veel plezier hebben en aan het eind doen alle deelnemers mee aan een trekking waarmee ze geweldige prijzen kunnen winnen.
We doen veel moeite om de vragen voor de puzzel lang van tevoren te maken: het maken van een vraag kost meestal meer moeite dan het oplossen ervan, dus we besteden er elk jaar meer dan 100 uur aan. We wilden dit jaar echt ChatGPT gebruiken voor één vraag. Het idee was om een eenvoudige Javascript jump-and-run te maken die zowel nerdkennis als vaardigheid vereiste. We deden eerst een heel algemeen verzoek aan ChatGPT (versie 4):
Het resultaat is nog niet zo overtuigend: Deze kwam eruit (klikken met de muis laat het blok in de lucht springen, maar verder kun je niet veel doen). Ik was dus een beetje in de war:
Nu werd het pas echt fascinerend: ChatGPT genereerde vervolgens de code om het blauwe blok te laten bewegen en springen met de pijltjestoetsen! Zo zag het spel er daarna uit.
Laten we verder gaan:
Het werd deze versie.
In de volgende stappen voegde ik een aftelklok toe en platforms waar de speler op kan springen. Zo zag het er daarna uit.
Zoals je kunt zien, werkt het niet goed: het spelersblok zweeft boven de platforms en raakt ze niet aan. Dus vroeg ik ChatGPT om de bug te repareren en nu werd het interessant. ChatGPT probeerde vrijwel willekeurig iets te veranderen in de checkPlatformCollision() functie om de bug op te lossen, maar maakte het alleen maar erger:
Elke andere verandering die ChatGPT toevoegde maakte het alleen maar erger. Uiteindelijk heb ik gevraagd om de code voor de bugfixes terug te draaien en ben ik zelf op zoek gegaan naar de bug: er zat gewoon een logische fout in de code van de checkPlatformCollision() functie die bepaalt of de speler de bovenkant van het platform heeft bereikt. Om deze fout te vinden moest ik echter goed naar de logica kijken en bedenken welke controles correct zouden zijn: ChatGPT was blijkbaar niet in staat om dit te doen. In plaats daarvan veranderde het dingen relatief hulpeloos, wat meer leek op wild trial and error dan op echt nadenken.
Het proces ging op dezelfde manier door: het werkte fascinerend goed om verdere functionaliteiten in het spel te integreren, maar telkens als er bugs waren die een gedetailleerd onderzoek van de logica vereisten, faalde ChatGPT. Een ander voorbeeld was een bug in de botsingsdetectie met de vijandelijke blokken: de code van ChatGPT controleerde alleen op botsingen met de bovenste rand van het blok, terwijl de speler veilig de onderste rand kon aanraken. Nogmaals, ik kwam hier alleen achter door de botsingslogica zorgvuldig te controleren, ChatGPT maakte het alleen maar erger elke keer dat ik het probeerde op te lossen. Zelfs toen ik precies schreef waar de bug zat.
Ik denk dat de beperkingen die ik heb waargenomen significant zijn: ChatGPT is niet in staat om echt te begrijpen wat het produceert. Het voert "eenvoudigweg" alleen uit wat goed overeenkomt met wat er in het verzoek staat en met de antwoorden die tot nu toe zijn geproduceerd. Dit werkt verrassend goed, maar je moet niet de fout maken te denken dat ChatGPT echt begrijpt wat het schrijft.
We zullen het uiteindelijke spel met alle bugfixes van mij gebruiken in de Paaspuzzel van 2023. Het ziet er als volgt uit.