Hallo iedereen!
Met toestemming van rvec, waarvoor bedankt, kom ik na een lange afwezigheid maar eens met een beetje amusement op Frihost. Voor sommigen dan toch, want dit amusementsgebeuren is in de vorm van een programmeerwedstrijd! Here we go:
## Voorwoord
Omdat een opdracht voor een programmeerwedstrijd niet altijd even gemakkelijk te bedenken is, deed ik mijn kast eens open en keek ik wat er zoal van spelletjes instonden die ook geprogrammeerd kunnen worden, of aangedreven worden. Hierbij mag het niet te moeilijk zijn, maar ervaren programmeurs zouden uit hun kennis toch nog voordeel moeten kunnen halen. Ook is dit een goede oefening voor beginnende PHP programmeurs.
## Doel
Het doel van deze contest is -letterlijk- het verslaan van je tegenstanders. Het wordt namelijk een 1-vs-1 contest in toernooivorm.
De bedoeling is dat elk van onze deelnemers hun eigen 'Artificial Intelligence' of AI schrijven voor een bepaalde spel. Via een
validator/host script (dat ik zelf ga schrijven en waarvan de bron vrij komt) worden telkens 2 van deze scripts tegen elkaar
opgezet. Deze scripts spelen dan onderling een supersnel spelletje, waarbij de validator kijkt wie er gewonnen heeft.
Het spel waarvoor gekozen werd is Vier op een Rij. Dit is een gemakkelijk spel, waarbij iedereen een zeer basische 'Guess-a-row'
implementatie van kan bouwen, en des te meer denkwerk, des te slimmer je AI ook wordt.
Om het mogelijk te maken een eenvoudig Hosts-Script op te bouwen, is er maar 1 taal toegestaan: PHP.
Deze scripttaal is een van de eenvoudigste talen die er is, daarom zou niemand er voor mogen terugdeinsen deze taal te leren om aan de
contest mee te doen. Zeker voor mensen met ervaring in een andere taal is dit een piece-of-cake.
## Het Spel (Vier-op-een-Rij)
Ik neem aan dat iedereen het spel kent, voor degenen die het niet kennen echter, een klein overzicht. Vier op een rij is een spel dat
gespeeld wordt op een (meestak vertikaal opgesteld) vlak, met een bepaald aantal rijen en kolommen. Wij zullen spelen op een 8x8 bord.
Grafische voorstelling:
Waarbij elke O een vakje voorstelt waar een 'steen' kan worden in geplaatst. Men plaatst deze gewoon van boven
naar beneden, elke steen valt naar het onderste lege vakje in z'n rij. Wanneer iemand 4 stenen op een rij kan plaatsen (horizontaal,
vertikaal of schuin, maar het moet op een rechte lijn zijn) wint hij of zij. Hier kan je het spel eens spelen:
Klik hier om het te spelen!
## Opzet
Omdat het niet misschien niet onmiddellijk duidelijk is, hier wat meer uitleg over de opzet.
Zoals gezegd zal een Host script 2 van jullie scripts tegen elkaar opzetten, zodat deze letterlijk tegen elkaar kunnen spelen.
Een pseudo-pseudo voorstelling van de Host gaat als volgt:
Om het mogelijk te maken 2 scripts tegen elkaar op te zetten; zijn er enkele regels die aan de inzendingen gebonden zijn. Ook
enkele andere dingen zullen aan jullie overgelaten worden, om spelverloop gemakkelijker te maken. Hier een overzicht:
* Een geldige inzending is een NAAM.PHP bestand met daarin de code. (Met je eigen gebruikersnaam ipv NAAM)
* Alle code moet in functies / procedures staan. Losse code (de *main* code) mag niet! (Wordt manueel gecontroleerd)
-> DEFINE mag wel!
* Elke NAAM.PHP moet een volgende functie bevatten; dit is de functie waarmee het Host-script contact zoekt met jou script
Waarbij $speelVeld een Tweedimensionale Array is; die characters zal bevatten! (X en O bijvoorbeeld)
en waarbij $Kolom het kolomnummer is van de kolom waar je een steentje in wil laten vallen. Dit moet dus een Integer zijn!
(Scripts die niet dergelijke functie hebben; bijvoorbeeld die een string ipv een int returnen, worden gediskwalificeerd!)
Voor de rest mag de functie zo lang als je wilt zijn, en mag je zoveel zelfgedefinieerde functies maken als je nodig acht.
$UserName is, de logica zelves, je eigen username! (Dezelfde naam als in NAAM.PHP!)
## Overige Informatie
Speelveld:
* Groote is 8x8
* Wordt opgeslagen in een tweedimensionale Array
* 2 x Index van 1-8, niet van 0-7!
* Beginpunt ([1][1]) is de linkeronderhoek!
* Grafische weergave:
* Enkel de standaard PHP library mag gebruikt worden!
* Scripts dienen gePM'ed te worden naar mij! Deze zullen na afloop van de deadline open-source worden gemaakt!
## Tot slot
Hoop ik dat alles duidelijk is! Indien iemand nog vragen heeft: dat mag ook in dit Topic. Ook hoop ik dat we een mooi aantal
scripts krijgen, zodat we een redelijk toernooi kunnen organiseren!
## Download Hostscript
Hierbij een .zip file met het Hostscript + een php bestand waarin enkele benodigde functies staan. In het functiebestand staan onderaan 2 testfuncties. Deze maken gebruik van een van de eenvoudigste implementaties die er is, hij zoekt namelijk gewoon een random kolom die nog niet gevuld is.
Het toegankelijk maken van dit Hostscript is enkel bedoeld voor testdoeleinden & om het systeem van het spel beter te kunnen begrijpen. Code mag op andere fora gebruikt worden voor het organiseren van een dergelijk contest, maar gelieve er de naam van de originele auteur bij te vernoemen. (Ik dus! e-mail adres (GuShe at Eddie5 dot Net) mag er ook altijd bij vermeld worden!)
Hier is de download:
http://www.mediafire.com/?x2lniusumum
Veel succes!
Greetings,
GuShe
Last edited by Gushe on Tue Jan 20, 2009 11:31 pm; edited 1 time in total
Met toestemming van rvec, waarvoor bedankt, kom ik na een lange afwezigheid maar eens met een beetje amusement op Frihost. Voor sommigen dan toch, want dit amusementsgebeuren is in de vorm van een programmeerwedstrijd! Here we go:
## Voorwoord
Omdat een opdracht voor een programmeerwedstrijd niet altijd even gemakkelijk te bedenken is, deed ik mijn kast eens open en keek ik wat er zoal van spelletjes instonden die ook geprogrammeerd kunnen worden, of aangedreven worden. Hierbij mag het niet te moeilijk zijn, maar ervaren programmeurs zouden uit hun kennis toch nog voordeel moeten kunnen halen. Ook is dit een goede oefening voor beginnende PHP programmeurs.
## Doel
Het doel van deze contest is -letterlijk- het verslaan van je tegenstanders. Het wordt namelijk een 1-vs-1 contest in toernooivorm.
De bedoeling is dat elk van onze deelnemers hun eigen 'Artificial Intelligence' of AI schrijven voor een bepaalde spel. Via een
validator/host script (dat ik zelf ga schrijven en waarvan de bron vrij komt) worden telkens 2 van deze scripts tegen elkaar
opgezet. Deze scripts spelen dan onderling een supersnel spelletje, waarbij de validator kijkt wie er gewonnen heeft.
Het spel waarvoor gekozen werd is Vier op een Rij. Dit is een gemakkelijk spel, waarbij iedereen een zeer basische 'Guess-a-row'
implementatie van kan bouwen, en des te meer denkwerk, des te slimmer je AI ook wordt.
Om het mogelijk te maken een eenvoudig Hosts-Script op te bouwen, is er maar 1 taal toegestaan: PHP.
Deze scripttaal is een van de eenvoudigste talen die er is, daarom zou niemand er voor mogen terugdeinsen deze taal te leren om aan de
contest mee te doen. Zeker voor mensen met ervaring in een andere taal is dit een piece-of-cake.
## Het Spel (Vier-op-een-Rij)
Ik neem aan dat iedereen het spel kent, voor degenen die het niet kennen echter, een klein overzicht. Vier op een rij is een spel dat
gespeeld wordt op een (meestak vertikaal opgesteld) vlak, met een bepaald aantal rijen en kolommen. Wij zullen spelen op een 8x8 bord.
Grafische voorstelling:
| Code: |
|
O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O |
naar beneden, elke steen valt naar het onderste lege vakje in z'n rij. Wanneer iemand 4 stenen op een rij kan plaatsen (horizontaal,
vertikaal of schuin, maar het moet op een rechte lijn zijn) wint hij of zij. Hier kan je het spel eens spelen:
Klik hier om het te spelen!
## Opzet
Omdat het niet misschien niet onmiddellijk duidelijk is, hier wat meer uitleg over de opzet.
Zoals gezegd zal een Host script 2 van jullie scripts tegen elkaar opzetten, zodat deze letterlijk tegen elkaar kunnen spelen.
Een pseudo-pseudo voorstelling van de Host gaat als volgt:
| Code: |
|
BEGIN // MAAK SPEELVELD KLAAR WHILE GEEN WINNAAR { ALS VELD NIET VOL IS { GEEF SPEELVELD AAN SCRIPT1 VRAAG KOLOM AAN SCRIPT1 ALS 4-OP-1-RIJ { SCRIPT1 Wint! EXIT WHILE / STOP SPEL } GEEF SPEELVELD AAN SCRIPT 2 VRAAG KOLOM AAN SCRIPT1 ALS 4-OP-1-RIJ { SCRIPT2 Wint! EXIT WHILE / STOP SPEL } } ANDERS { SPEL OVER / GEEN WINNAAR } } EINDE |
Om het mogelijk te maken 2 scripts tegen elkaar op te zetten; zijn er enkele regels die aan de inzendingen gebonden zijn. Ook
enkele andere dingen zullen aan jullie overgelaten worden, om spelverloop gemakkelijker te maken. Hier een overzicht:
* Een geldige inzending is een NAAM.PHP bestand met daarin de code. (Met je eigen gebruikersnaam ipv NAAM)
* Alle code moet in functies / procedures staan. Losse code (de *main* code) mag niet! (Wordt manueel gecontroleerd)
-> DEFINE mag wel!
* Elke NAAM.PHP moet een volgende functie bevatten; dit is de functie waarmee het Host-script contact zoekt met jou script
| Code: |
| UserName($speelVeld) {
// AI HERE // return $Kolom; } |
Waarbij $speelVeld een Tweedimensionale Array is; die characters zal bevatten! (X en O bijvoorbeeld)
en waarbij $Kolom het kolomnummer is van de kolom waar je een steentje in wil laten vallen. Dit moet dus een Integer zijn!
(Scripts die niet dergelijke functie hebben; bijvoorbeeld die een string ipv een int returnen, worden gediskwalificeerd!)
Voor de rest mag de functie zo lang als je wilt zijn, en mag je zoveel zelfgedefinieerde functies maken als je nodig acht.
$UserName is, de logica zelves, je eigen username! (Dezelfde naam als in NAAM.PHP!)
## Overige Informatie
Speelveld:
* Groote is 8x8
* Wordt opgeslagen in een tweedimensionale Array
* 2 x Index van 1-8, niet van 0-7!
* Beginpunt ([1][1]) is de linkeronderhoek!
* Grafische weergave:
| Code: |
|
8 O O O O O O O O 7 O O O O O O O O 6 O O O O O O O O 5 O O O O O O O O 4 O O O O O O O O 3 O O O O O O O O 2 O O O O O O O O 1 O O O O O O O O 1 2 3 4 5 6 7 8 |
* Enkel de standaard PHP library mag gebruikt worden!
* Scripts dienen gePM'ed te worden naar mij! Deze zullen na afloop van de deadline open-source worden gemaakt!
## Tot slot
Hoop ik dat alles duidelijk is! Indien iemand nog vragen heeft: dat mag ook in dit Topic. Ook hoop ik dat we een mooi aantal
scripts krijgen, zodat we een redelijk toernooi kunnen organiseren!
## Download Hostscript
Hierbij een .zip file met het Hostscript + een php bestand waarin enkele benodigde functies staan. In het functiebestand staan onderaan 2 testfuncties. Deze maken gebruik van een van de eenvoudigste implementaties die er is, hij zoekt namelijk gewoon een random kolom die nog niet gevuld is.
Het toegankelijk maken van dit Hostscript is enkel bedoeld voor testdoeleinden & om het systeem van het spel beter te kunnen begrijpen. Code mag op andere fora gebruikt worden voor het organiseren van een dergelijk contest, maar gelieve er de naam van de originele auteur bij te vernoemen. (Ik dus! e-mail adres (GuShe at Eddie5 dot Net) mag er ook altijd bij vermeld worden!)
Hier is de download:
http://www.mediafire.com/?x2lniusumum
Veel succes!
Greetings,
GuShe
Last edited by Gushe on Tue Jan 20, 2009 11:31 pm; edited 1 time in total
