Ontwikkelaar Jonah Uellenberg won deze maand de Ping Pong-prijs tijdens de 29ste International Obfuscated C Code Contest. Hij maakte een versie van Pong die zichzelf iedere frame hercompileert in onleesbare C-code.
Het spel heet Quine pong. De game draait in de terminal en laat een reeks C-code zien, met daarin twee batjes en een balletje. Iedere keer dat het programma wordt gedraaid, wordt een nieuwe frame getoond en wordt die daarna alvast berekend.
Door de game iedere keer opnieuw te compileren en draaien, wordt de game dus speelbaar. Standaard moet het spel voor iedere frame dus in feite herstart worden, hoewel Uellenberg ook een scriptje meelevert dat dat volledig automatiseert. Je hoeft dan alleen je toetsenbord te gebruiken om het batje te bedienen en de rest gaat vanzelf.
Je speelt als het rechterbatje en hebt slechts twee toetsen nodig om te spelen: 'w' voor omhoog en 'e' voor omlaag. Verder is het spel alleen singleplayer: je speelt altijd tegen de computer. Als je wint, wacht je een leuke verrassing die we niet zullen spoilen. De game is te downloaden op GitHub.
Prijzen voor onleesbare code
Quine pong won dit jaar dus een prijs tijdens de IOCCC-wedstrijd. Tijdens die jaarlijkse wedstrijd nemen ontwikkelaars het tegen elkaar op om op creatieve wijze de meest cryptische en onleesbare C-programma's te schrijven.
Naast ping pong, zijn er ook prijzen voor de programma's die het 'meest rustgevend' zijn, of de programma's die de grootste kans maken om te choqueren, indruk te maken of te teleporteren.
Uellenberg erkent wel dat de C-code in het spel stiekem helemaal niet obfuscated is. De ontwikkelaar schreef een eigen compiler in 'schone' code. Hij gebruikte daarvoor een eigen programmeertaal genaamd Insert. De compiler genereert de onleesbare C-code waarin de game gespeeld kan worden. Ook Insert staat op GitHub.
:strip_exif()/u/581035/crop566b3a4ca043d_cropped.gif?f=community)
:strip_exif()/u/87336/crop6891d2e354b09.gif?f=community)
/u/27299/hoofd.png?f=community)
/u/309942/crop65119b0d2b29a.png?f=community)
:strip_icc():strip_exif()/u/253641/crop686f9cec6f8b1_cropped.jpg?f=community)
:strip_exif()/u/489640/crop67cc85cb59455_cropped.gif?f=community)
:strip_icc():strip_exif()/u/124925/seismiccharge-60x60.jpg?f=community)