FRIHOSTFORUMSSEARCHFAQTOSBLOGSDIRECTORY
You are invited to Log in or Register a Frihost Account!

[PHP] GuShe's Programming Tournament! Mind for a game?

 


Gushe
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:
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
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:
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
rvec
zou je ook nog de versies en het besturingssysteem kunnen geven waarop je het test? Ik weet niet of iemand aparte functies wil gaan gebruiken (of een leuke class maken) maar vooral het verschil tussen php4 en 5 kan wel belangrijk zijn.

Ik ben trouwens net begonnen, er komt zeker een inzending van deze kant.

edit:
Code:
// Is the playfield filled with tiles? TRUE on filled, FALSE on not filled
Function isPlayfieldFull($playField, $width, $heigth) {
   for ($i = 1; $i <= $width; $i++) {
      for ($o = 1; $o <= $heigth; $o++) {
         if ($playField[$width][$heigth] == '') {
            return FALSE;
         }
      }      
   }
   return TRUE;
}

weet je zeker dat deze regel klopt?:
Code:
if ($playField[$width][$heigth] == '') {

dit lijkt logischer:
Code:
if ($playField[$i][$o] == '') {


edit2: hoe kan ik een rij vol krijgen in 8 zetten Confused
Code:
for ($i = 1; $i <= 8; $i++) {

die 8 moet volgens mij HEIGTH zijn (de constante)
Gushe
Bedankt voor de bugmeldingen, heb gefixed en nieuwe zip file geupload.
Download hier!

Zelf hoop ik natuurlijk ook een intelligente functie te bouwen, of toch een poging wagen. Wink
atleetalie
Heey wat een leuk idee, niet dat ik daar iets van ga bakken maar goed,succes met je contest!
Gushe
Ik heb zelf al een idee voor een basisimplementatie. Deze zou met gemak de randoms, en met een beetje geluk ook een groot deel van jullie zooi kunnen neerhalen Smile




Even een vraagje; zou er iemand mijn intropost naar het Engels kunnen vertalen voor me? Smile Desnoods geef ik je er wel enkele Frih$ voor hoor. Wink


Groetjes,
GuShe Wink
adri
Goed idee Very Happy Maar mijn huidige kennis is nog niet echt euhm... goed om ene in mekander te steken. Embarassed


Adri Embarassed
traxion
idd een vet idee om je kennis eens goed op de proef te stellen

helaas heb ik het te druk met school (C++, C, java) anders had ik zeker meegedaan Smile
Related topics

Girls in business
Internet Explorer Bug
Computer Programmer
Guildwars
Small free games list

PHP database id
Vraagje ivm Programming-Tournament hier?
separate sections
Is It Good Enough To Hold This?
Anyone still play StarCraft?

Begins Of GAME PROGRAMMING
New Pixel art - For Isometric RPG
Weird "Failure to Open Stream" Error
Software development
1.2 Petabyte Hard Drive
Reply to topic    Frihost Forum Index -> Dutch -> Computers en Techniek

FRIHOST HOME | FAQ | TOS | ABOUT US | CONTACT US | SITE MAP
© 2005-2007 Frihost, forums powered by phpBB.