Awalé Programmeerwedstrijd

Pagina: 1 2 Laatste
Acties:
  • 2.693 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 14-09 19:30

alienfruit

the alien you never expected

Een leuk boek over vergelijkbare spellen: http://www.anthrosource.n...525/aa.1961.63.6.02a00490

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
De testserver is inmiddels online! Gebruik deze url naar de webservice:
http://test.tjipchallenge.com/awale/GameTestServer.asmx

Je speelt tegen een randomengine, of te wel een engine die willekeurige zetten doet. We hebben gemerkt dat er nog wel een paar bugs in zitten. Zo zijn nog niet alle regels geïmplementeerd. Daar wordt aan gewerkt. Er is in ieder geval iets om het protocol goed tegen te testen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Ik heb al wat zitten proberen met de SOAP interfaces, maar ik zag een aantal rare dingen:
• Je kunt altijd GetMove doen en dan krijg je een zet terug, ook als het eigenlijk je eigen beurt is. Is dat de bedoeling? Of doet de AI momenteel gewoon een random (geldige?) zet als daarom gevraagd wordt, simpelweg om te testen?
• Als ik Resign krijg ik altijd een HTTP 500 Internal Server Error. Doe ik iets fout, of is dit niet geïmplementeerd?
• Puur nieuwsgierigheid: krijgen jullie niet een heleboel dode sessies van mensen die een spel beginnen en dan afsluiten, of gooien jullie die na een periode van in activiteit weg?

Verder zag ik nergens documentatie van hoe de interface hoort te werken (op een hoger nivo dan de WSDL specificeert). Klopt dat, of heb ik wat gemist? (Ik ga er nu maar vanuit dat je met een random naam mag inloggen, en de teruggestuurde identifier als playerId moet gebruiken.)

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Soultaker schreef:
Ik heb al wat zitten proberen met de SOAP interfaces, maar ik zag een aantal rare dingen:
Je kunt altijd GetMove doen en dan krijg je een zet terug (..) Of doet de AI momenteel gewoon een random (geldige?) zet als daarom gevraagd wordt, simpelweg om te testen?
Het is niet de bedoeling dat je een nieuwe move terugkrijgt. Ik zal kijken wat er mis gaat.
Als ik Resign (..)
Ik denk dat dat idd niet geimplementeerd is op de test server.
Krijgen jullie niet een heleboel dode sessies van mensen die een spel beginnen en dan afsluiten, of gooien jullie die na een periode van in activiteit weg?
Heel veel is er tot op heden niet getest. Daarnaast: SOAP sessions zijn standaard 120 seconden als ik het wel heb. Wel wordt er per nieuw spel een XML bestand aangemaakt en weggeschreven op de server. Dus daar ruim ik af en toe wat in op.
Verder zag ik nergens documentatie van hoe de interface hoort te werken (..)
Volgens mij staat er in een eerder bericht van mij in deze draad een Interface met commentaar. Daar staat duidelijk in wat er verwacht wordt. Als er vragen zijn wil ik die natuurlijk best beantwoorden. :)

En even voor de duidelijkheid: deze testserver werkt iets anders dan de echte server: Normaal gesproken moet er een toernooi worden aangemaakt en paringen, voordat een toernooi kan starten . Deze testserver maakt als iemand inlogt direct een toernooi aan met één ronde tegen de random engine. Deze opzet maakt het ook mogelijk dat er meerdere tests tegelijk gehouden worden.

Maar meld fouten gerust, dan zal ik - of sjaakie - die verwerken.

while (me.Alive) {
me.KickAss();
}


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Corniel schreef op donderdag 16 augustus 2007 @ 10:07:
Volgens mij staat er in een eerder bericht van mij in deze draad een Interface met commentaar. Daar staat duidelijk in wat er verwacht wordt. Als er vragen zijn wil ik die natuurlijk best beantwoorden. :)
Ah, stom van me; ik had allleen naar de link in de topicstart gekeken. De versie met commentaar maakt alles duidelijk.

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Corniel schreef op donderdag 16 augustus 2007 @ 10:07:
[...]

Het is niet de bedoeling dat je een nieuwe move terugkrijgt. Ik zal kijken wat er mis gaat.
Heb je inmiddels al gevonden waar het mis gaat? Volgens mij worden er nog steeds zetten teruggeven elke keer. Verder viel het me ook op dat er elke keer na 1 of 2 zetten al een winnaar 'Won' gegeven wordt.
[...]

Ik denk dat dat idd niet geimplementeerd is op de test server.
Gebeurt dit alsnog?
En even voor de duidelijkheid: deze testserver werkt iets anders dan de echte server: Normaal gesproken moet er een toernooi worden aangemaakt en paringen, voordat een toernooi kan starten . Deze testserver maakt als iemand inlogt direct een toernooi aan met één ronde tegen de random engine. Deze opzet maakt het ook mogelijk dat er meerdere tests tegelijk gehouden worden.
Dit is uiteraard wel zo handig. Ik denk echter wel dat het belangrijk is dat de testserver de echte server zo dicht mogelijk benaderd. Dit om problemen tijdens de wedstrijd te voorkomen. Is het misschien een idee om een java file te kunnen uploaden, waarna deze automatisch gecompiled wordt en tegen zichzelf gaat spelen? Of om de deelnemers een account te geven op de (gekopieerde?) game omgeving, zodat ze zelf in de 'echte' omgeving kunnen testen?

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Er is vandaag een grote update gedaan. Als het goed zitten alle regels er nu in. Resign is geimplenteerd en de speelstatus - waar iets mis ging, is gefixt.

Er zijn nogal wat vragen binnengekomen waarom niet exact dezelfde implentatie is gekozen voor de testserver en de wedstrijdserver. Er zijn twee belangrijke redenen:
  1. Iemand die direct inlogt moet direct kunnen spelen, bij de wedstrijdserver worden paringen rondens en spelers beheerd, dat management gedeelte is ongewenste/onnodige overhead in het test geval.
  2. We kunnen niet afdwingen dat maar een deelnemer tegelijk test, er moest dus iets geregeld worden waarmee je kan garanderen dat spelers geen last hebben van elkaar.
Verschillen
Door deze verschillende implementaties zijn er een aantal verschillen:
  • De testserver is altijd in playing modus. Bij inloggen wordt direct een toernooi gemaakt met een ronde, en een ronde tegen random engine. Deze partij wordt ook direct gestart.
  • Je krijgt bij het vragen om een zet altijd een nieuwe zet terug. Het is nogal veel werk om dat af te vangen voor iets wat een goed programmeur nooit zou doen. In de wedstrijd situatie krijg je nogmaals je laatste zet terug.
  • Speel tempo is 200 minuten ipv van 2.
  • De random speler let niet op, of hij moet feeden. Als hij verzaakt, verliest hij.
Logging
Op http://test.tjipchallenge.com/awale/log kan je de xml log vinden van de gespeelde partijen. Dit is een geserialiseerde representatie van het toernooi dat je speelt. Hier zou in iedergeval genoeg informatie moeten staan om te annalyseren wat er mis gaat.

Hopelijk zijn nu alle problemen en onduidelijkheden weggenomen. O ja, er was nog een vraag over de WSDL:
Als ik met behulp van WSDL2Java de WSDL http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL omzet naar java files, dan wordt het webadres verkeerd omgezet. Dit wordt in de java files namelijk http://test.tjipchallenge.com/awale/GameTestServer.asmx in plaats van http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL.
Dit is een klein 'conflict' tussen de Java en MS wereld. De '?WSDL' heeft MS toegevoegd om de exacte gegenereerde WSDL te laten zien. In de Java wereld is dit niet gebruikelijk. Sowieso - zie reglement - moeten de applicaties door middel van een parameter kunnen worden opgestart die de server-URL bevat, dus je code moet er zo uitzien dat je dit adres kan overschrijven.

while (me.Alive) {
me.KickAss();
}


  • W4rlock
  • Registratie: Februari 2002
  • Laatst online: 04-12-2014
De server lijkt zich inderdaad beter aan de regels te houden! Kreeg zojuist wel de volgende SOAP exception:

Server was unable to process request.The process cannot access the file 'C:\AwaleData\test.blaat.xml' because it is being used by another process.

:'(

[ Voor 6% gewijzigd door W4rlock op 30-08-2007 20:08 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Corniel schreef op maandag 25 juni 2007 @ 16:24:
[..] Merk op dat er (waarschijnlijk) nog twee webmethods gaan komen: GetTime() (of als outparam bij Move) en Move(string playerId, int field, string log). Ik heb contact overgehad met de persoon die de gameserver maakt. Defintieve bevestiging hierover zal ik ook hier melden.
Hoe staat het met deze eventuele extra methodes?

Daarnaast heb ik nog een lijst met vragen, waarvan sommige al eerder gesteld zijn:
  1. Op wat voor soort machine wordt de applicatie uitgevoerd? Bijvoorbeeld: welke CPU, hoeveel cores, hyperthreading, hoeveel geheugen, snelheid geheugen, grootte L1 + L2 cache, operating system, java server vm of java client vm.
  2. Vraag al eerder gesteld: Hoe wordt de tijd gemeten?
  3. Bij welke situatie geeft de StartMatch methode de waarde 'Finished' terug?
  4. Bij welke situatie geeft de Move methode de waarde 'Waiting' of 'None' terug? Moet de Move method call dan opnieuw worden uitgevoerd?
  5. Wacht de Move methode op de zet van de tegenstander voordat deze een waarde retourneert? (aangezien Move ook Won/Draw/Lost kan teruggeven)
  6. Wacht de GetMove methode op de zet van de tegenstander voordat deze een waarde retourneert? Of moet je regelmatig pollen?
  7. Welke waarde moet je meegeven als 'login' parameter bij het Logon request? Of wordt dit op de dag van de challenge gespecificeerd?
  8. Is het uitvoeren van een Move method call na een gefinished spel een reden om de partij direct verloren te verklaren? (zie spelregels: 3.1.3)
  9. Als op de testserver direct een match wordt gestart, wie is dan als eerste aan de beurt? Dit wordt namelijk teruggegeven bij de StartMatch method call, en er is geen manier om dat op te vragen.
  10. Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen. Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
  11. Vraag al eerder gesteld: Wordt onder 'identieke positie' verstaan dat er in elk vakje evenveel zaadjes zitten én dat dezelfde speler aan zet is? Of dat alleen in elk vakje evenveel zaadjes zitten?
  12. Vraag al eerder gesteld: Is de te winnen reis voor 1 of voor 2 personen?
Het lijkt me ook handig dat de overige tot nu toe onbeantwoorde vragen in dit topic van een antwoord worden voorzien :).

@ Sjaaky of Corniel: Als jullie op een aantal vragen al antwoord hebben, post dat aub zo snel mogelijk. Het duurt nog slechts 4 weken... m.a.w. de antwoorden hoeven niet verzameld te worden voordat ze gepost worden.

[ Voor 4% gewijzigd door Verwijderd op 01-09-2007 21:52 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Bugreports test gameserver

Als de laatste move van de random engine ongeldig is (niet feeden als dit wel moet), wordt deze move niet opgeslagen in het XML bestand. Zie: http://test.tjipchallenge...243d79f1881c5087ef9e9.xml

Ook wordt de laatste winnende move niet opgeslagen als gewonnen wordt:
http://test.tjipchallenge...74c9e96818afdca203122.xml

Hier doet mijn engine nog de move 3, deze is niet in het XML-bestand terug te vinden. Zonder deze move heeft mijn engine nog niet gewonnen, omdat de score nog 24 is.

Als de laatste zet ongeldig is komt er iets raars in het XML bestand terecht.
Onderin staat de laatste zet, positie 0. De FinishReason bovenin het bestand is echter: The player 'login' executed a move on field '5', the move is invalid. Maar, positie 5 is niet gezet, maar positie 0!
Zie: http://test.tjipchallenge...24993a3592b3c9f31ec42.xml

Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Hoi allemaal,

Mijn eerste bericht hier. Ik heb ondertussen de nodige tijd (10+ uur) gestoken in mijn Awale client en ben sinds enkele uurtjes in staat om wat te testen :*).
Corniel schreef op donderdag 30 augustus 2007 @ 10:33:
Logging
Op http://test.tjipchallenge.com/awale/log kan je de xml log vinden van de gespeelde partijen. Dit is een geserialiseerde representatie van het toernooi dat je speelt. Hier zou in iedergeval genoeg informatie moeten staan om te annalyseren wat er mis gaat.
De logs zijn gesorteerd op bestandsnaam. Totdat ik dat ontdekte was ik telkens aan het zoeken een bestand met de juiste datum/tijd ... erg tijdrovend.

Tip: gebruik de 'player id' die je ontvangt na succesvol inloggen om je bijbehorende logfile voor de partij te vinden.

Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Over oogsten.

Tijdens het testen kwam ik een situatie tegen die ik niet snapte :?

Veronderstel deze spelsituatie:

    /// ==opponent==
    /// -------------------------------------
    /// | (5) | (4) | (3) | (2) | (1) | (0) | == field
    /// |  0  |  4  |  4  |  4  |  4  |  6  | == grains
    /// |------------------------------------
    /// |  5  |  0  |  2  |  7  |  6  |  6  | == grains
    /// | (0) | (1) | (2) | (3) | (4) | (5) | == field
    /// -------------------------------------
    /// ==player==

De tegenstander is aan de beurt en zaait vanuit veld 1. Kan de tegenstander (na het zaaien) oogsten en zo ja wat wordt de nieuwe spelsituatie??

Ik verwacht dat de tegenstander na het zaaien twee granen uit veld 2 kan oogsten.
De volgende situatie zou dan ontstaan:
XML:
1
<Move User="1" Field="1" Position="5|0|0|7|6|6|0|1|5|5|5|0|6|2"/>


Ik neem aan dat ik het bij het verkeerde eind heb want vind in de logfile (4e zet):
XML:
1
<Move User="1" Field="1" Position="5|0|2|7|6|6|0|1|5|5|5|0|6|0"/>


Kan iemand mij vertellen of ik een denkfout maak?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Ik denk het wel; je had begrepen dat je alleen oogst uit het veld waarin je eindigt met zaaien? Om uit veld 2 (van player) te oogsten moet je dus veld 4 (van opponent) spelen.

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
@_Daan_
1. Op wat voor soort machine wordt de applicatie uitgevoerd?
De wedstrijden worden gespeeld op een core2duo E6400 met 2GB geheugen. Alleen weten we nog niet of je de cpu en geheugen helemaal voor jezelf krijgt. Dat is uiteraard wel zo eerlijk en daar streven we ook naar. Maar bij veel inschrijvingen zullen we toch het aantal gelijktijdige partijen op
moeten schroeven om totale wedstrijdduur binnen de perken te houden.
Ik snap dat dit voor jullie op dit moment geen handig antwoord is, want het nut van meerdere berekeningthreads staat hiermee ook nog niet vast.
Als ik er meer over weet, dan horen jullie het.

2. Hoe wordt de tijd gemeten?
Dit is de wallclock time op de server. Als een speler Move() aanroept gaat de tijd van de tegenstander lopen.

3. Bij welke situatie geeft de StartMatch methode de waarde 'Finished' terug?
StartMatch geeft terug wie de eerste zet moet zetten. Als de partij afgelopen is geeft deze aanroep Finished terug.

4. Bij welke situatie geeft de Move methode de waarde 'Waiting' of 'None' terug? Moet de Move method call dan opnieuw worden uitgevoerd?
Move geeft alleen Lost, Won, Draw en Playing terug.

5. Wacht de Move methode op de zet van de tegenstander voordat deze een waarde retourneert? (aangezien Move ook Won/Draw/Lost kan teruggeven)
Nee, hiervoor zul je GetMove aan moeten roepen.

6. Wacht de GetMove methode op de zet van de tegenstander voordat deze een waarde retourneert? Of moet je regelmatig pollen?
Je moet pollen zolang GetMove -1 teruggeeft. Zie ook Corniel in "Awalé Programmeerwedstrijd". Dit mag niet te vaak, we denken aan max 10x/sec.

7. Welke waarde moet je meegeven als 'login' parameter bij het Logon request? Of wordt dit op de dag van de challenge gespecificeerd?
Hierin staat je naam of een alias en geef je door aan de wedstrijdleiding bij het inschrijven. Verzin wel iets unieks en praktisch, bijvoorbeeld je alias op GoT. We verwachten geen clashes en anders moet een van de partijen de code maar even aanpassen.

8. Is het uitvoeren van een Move method call na een gefinished spel een reden om de partij direct verloren te verklaren? (zie spelregels: 3.1.3)
Deze regel heeft betrekking op welk veld met zaden je oppakt. Dus als je een Move(1) aanroept terwijl daar 0 zaden inliggen. Of dat je
niet voert als dat verplicht is. Als je Move aanroept terwijl het niet je beurt is, of de wedstrijd al afgelopen is, zul je een exception terug krijgen.

9. Als op de testserver direct een match wordt gestart, wie is dan als eerste aan de beurt? Dit wordt namelijk teruggegeven bij de StartMatch method call, en er is geen manier om dat op te vragen.
Dat kan met de methode StartMatch(), deze geeft een MatchStart enum terug waarin de speler staat die begint.

10. Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen.
Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
Dat ga ik navragen.

11. Vraag al eerder gesteld: Wordt onder 'identieke positie' verstaan dat er in elk vakje evenveel zaadjes zitten én dat dezelfde speler aan zet is? Of dat alleen in elk vakje evenveel zaadjes zitten?
De zaden in het bord en de speler aan zet moeten beide hetzelfde zijn.

12. Vraag al eerder gesteld: Is de te winnen reis voor 1 of voor 2 personen?
Voor 1 persoon.

Naar je bugreport hierboven gaan we kijken.

@mathijs
Zie de reply van Soultaker. Als de tegenstander zaait vanuit veld 1 komt hij tijdens het uitzaaien niet eens aan de andere kant van het speelveld, dus mag hij sowieso niet eten.

Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Soultaker schreef op maandag 03 september 2007 @ 04:30:
Ik denk het wel; je had begrepen dat je alleen oogst uit het veld waarin je eindigt met zaaien? Om uit veld 2 (van player) te oogsten moet je dus veld 4 (van opponent) spelen.
Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@mathijs
... Als de tegenstander zaait vanuit veld 1 komt hij tijdens het uitzaaien niet eens aan de andere kant van het speelveld, dus mag hij sowieso niet eten.
Aha, dat maakt een heleboel duidelijk.

Het was gisteren al laat en ik dacht: laat ik er mijn hoofd nu maar niet over breken 8)

Thanks!!

Acties:
  • 0 Henk 'm!

Verwijderd

@Sjaaky: Allereerst bedankt voor je volledige en snelle antwoord :)
Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@_Daan_
1. Op wat voor soort machine wordt de applicatie uitgevoerd?
De wedstrijden worden gespeeld op een core2duo E6400 met 2GB geheugen. Alleen weten we nog niet of je de cpu en geheugen helemaal voor jezelf krijgt. Dat is uiteraard wel zo eerlijk en daar streven we ook naar. Maar bij veel inschrijvingen zullen we toch het aantal gelijktijdige partijen op
moeten schroeven om totale wedstrijdduur binnen de perken te houden.
Ik snap dat dit voor jullie op dit moment geen handig antwoord is, want het nut van meerdere berekeningthreads staat hiermee ook nog niet vast.
Als ik er meer over weet, dan horen jullie het.
Misschien is het mogelijk om vier identieke computers neer te zetten? Als er twee computers bezig zijn met de wedstrijd kunnen op de andere twee computers de volgende programma's worden gebouwd en klaargezet. Ze draaien dan niet gelijktijdig (wat mogelijk de gameserver zou beinvloeden), maar dit geeft wel een betere doorlooptijd.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
mathijs van altvorst schreef op maandag 03 september 2007 @ 17:51:
Aha, dat maakt een heleboel duidelijk.

Het was gisteren al laat en ik dacht: laat ik er mijn hoofd nu maar niet over breken 8)
Je kunt ook met dit programma oefenen; de demoversie speelt niet echt sterk, maar volgt wel exact de regels van deze contest, dus het is handig om een idee te krijgen van hoe het spel werkt.

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Via e-mail bereikte mij een aantal vragen over hoe een soap interface op te zetten. Zowel voor C# als voor Java zijn er verschillende tools (google eens op bijvoorbeeld Java2WSDL).

Daarnaast is nog niet iedereen bekend met het verschil tussen een WSDL en een webservice. Een WSDL is niets meer, en ook niets minder dan een contract wat je afspreekt op basis waarvan een webservice communiceert. Deze url’s zijn niet noodzakelijk hetzelfde (Bij MS zelfs per definitie niet).

Onze WSDL is op te vragen via :
http://test.tjipchallenge.com/awale/GameTestServer.asmx?WSDL

De service via:
http://test.tjipchallenge.com/awale/GameTestServer.asmx

Als je een tool gebruikt om code te generen gooi je daar dus het contract in, als je daadwerkelijk wilt communiceren, vertel je wat het adres is van de service. Voor hen die daar tot op heden moeite mee hadden, veel succes.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

Corniel schreef op maandag 25 juni 2007 @ 16:24:
[..] Merk op dat er (waarschijnlijk) nog twee webmethods gaan komen: GetTime() (of als outparam bij Move) en Move(string playerId, int field, string log). Ik heb contact overgehad met de persoon die de gameserver maakt. Defintieve bevestiging hierover zal ik ook hier melden.
Weten jullie al meer over deze methodes?
Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@_Daan_
[..]
10. Java gebruikt standaard maar 25% van het beschikbare systeemgeheugen. Naar ik aanneem heeft .Net deze limitatie niet. Voor Java zijn command-line opties beschikbaar om deze limiet te verhogen.
Is het mogelijk een batch-file mee te leveren die de Java applicatie start met de juiste opties voor geheugen, client/server VM en performance-optimalisatie?
Dat ga ik navragen.
[..]
Is er al een antwoord bekend?

Nog een vraag: is het toegestaan om JNI (Java) of een vergelijkbaar iets voor .Net te gebruiken? In de spelregels wordt het niet expliciet uitgesloten.

[ Voor 7% gewijzigd door Verwijderd op 13-09-2007 21:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Nog een bugreport:

Regel 4.3.3 uit de spelregels is niet correct geimplementeerd op de game-server. De regel luidt:
4.3.3 Indien er gekozen kan worden voor een veld om mee te zaaien
waarbij daarna volgens ‘ 4.4. Eten’ alle zaden aan de zijde van
de tegenstander worden gegeten, dan is dit alleen toegestaan
wanneer er geen andere zet mogelijk is.
Deze regel wordt wel goed gevolgd als de tegenstander na zijn zet geen zaden meer over heeft, voorbeeld:

Tegenstander aan zet:
* 1* [ 0] [ 0] [ 0] [ 0] [ 0]
[ 1] [ 0] [ 1] [ 5] [18] [ 0]

Situatie na zet van tegenstander:
[ 0] [ 0] [ 0] [ 0] [ 0] [ 0]
[ 0] [ 0] [ 1] [ 5] [18] [ 0]

Eigen zet:
[ 0] [ 0] [ 0] [ 0] [ 0] [ 0]
[ 0] [ 0] [ 1] [ 5] *18* [ 0]

Situatie na eigen zet:
[ 0] [ 0] [ 0] [ 0] [ 0] [ 0]
[ 0] [ 0] [ 1] [ 5] [ 0] [ 0]

Deze laatste zet is ongeldig, want deze neemt alle zaden van tegenstander weg, terwijl je opties hebt om te voeren die niet alle zaden oogst.

Hier een voorbeeld waar de gameserver het fout doet. Deze regel wordt niet goed gevolgd als de tegenstander na zijn zet nog wel zaden over heeft, voorbeeld:

Tegenstander aan zet:
* 2*  [ 0]  [ 0]  [ 0]  [ 0]  [ 1]  
[10]  [ 3]  [ 0]  [ 0]  [12]  [ 1]

Situatie na zet van tegenstander:
[ 0]  [ 0]  [ 0]  [ 0]  [ 0]  [ 1]  
[11]  [ 4]  [ 0]  [ 0]  [12]  [ 1]

Eigen zet:
[ 0]  [ 0]  [ 0]  [ 0]  [ 0]  [ 1]  
[11]  [ 4]  [ 0]  [ 0]  [12]  * 1*

Situatie na eigen zet:
[ 0]  [ 0]  [ 0]  [ 0]  [ 0]  [ 0]  
[11]  [ 4]  [ 0]  [ 0]  [12]  * 0* 

Dit is een ongeldige zet, want deze oogst alle zaden van de tegenstander terwijl er alternatieve zetten zijn. Zie ook het volgende spel met bovenstaande eindzetten: http://test.tjipchallenge...f40acba265333e3d97223.xml

Als deze bug niet gefixt wordt, kunnen jullie dan de spelregels aanpassen? :)

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Als het echt zo is als _Daan_ zegt, lijkt het me belangrijk dat dit gefixed wordt. De spelregels zijn hier ook erg duidelijk over:

- In regel 4.3.3 staat dat het nooit en te nimmer is toegestaan om een tegenstander uit te hongeren indien er andere zetten mogelijk zijn.

Het lijkt me in het belang van een sportieve wedstrijd om de server volgens de regels te laten spelen. Ik denk dat dit voor iedereen belangrijk is.

Verwijderd

Volgens mij staan er nog een aantal vrij belangrijke vragen open:

*De regels
Hierover was op de introductiebijeenkomst al onduidelijkheid. Mag je nou wel of niet alle zaden van de tegenstander slaan als er zetten zijn waarbij de tegenstander wel zaden over houd?
Op 25 juni werd in deze thread gemeld dat er overlegd zou worden. Ik heb echter nog geen antwoord gelezen en kennelijk klopt de implementatie daarvan niet met wat de regels zeggen.

Het lijkt me nu een beetje laat om de regels nog te veranderen, ik heb het ook zo geimplementeerd dat je niet alle zaden mag slaan en ik zal niet de enige zijn aangezien het zo in de hier geplaatste regels staat. Zou dus leuk zijn als de server ook volgens die regels gaat spelen.

*De methode getTime()
komt die er nu wel of niet? Ook hierover zou nog duidelijkheid gegeven worden. Voor de structuur van de programmas maakt het uit of ze de tijd zelf bijhouden of dat ze em op kunnen vragen. Met nog een week te gaan lijkt het me tijd dat hierover duidelijkheid komt.

*Het geheugen bij java
Misschien niet dringend, maar wel leuk als daar even naar gekeken wordt. Wordt dit voor ons op de wedstrijdcomputers verhoogd, kunnen we het zelf in een batchfile verhogen of is het gewoon pech gehad als je java gebruikt?

Acties:
  • 0 Henk 'm!

Verwijderd

Ben ook met spoed benieuwd naar de eerste twee punten van mijn voorganger (en ben ook van mening dat het een beetje laat is om de regels nog te gaan wijzigen).

Verder heb ik overigens d.d. 18 september gemerkt dat de Resign functie nog steeds niet goed werkt. Ik kreeg namelijk altijd terug dat de playerId niet zou kloppen ("not a member of this board" oid) terwijl ik met diezelfde playerId wél kon spelen.
(het maakt me verder weinig uit want ik zie het nut van de functie eerlijk gezegd sowieso niet in maar ok)

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Ik kwam tijdens het testen de volgende fout tegen in de random player / server:

Op het moment dat ik zou moeten beginnen, maar dat ik dat niet doe en een zet aan de tegenstander vraag, lijkt het erop dat de tegenstander inderdaad een zet gaat doen.

http://test.tjipchallenge...c4581b62565fa43aea0c0.xml

De tegenstander verliest vervolgens: 'The player 'random' executed a move when it wasn't his/her turn.'

Het lijkt me dat dit mijn fout is, en dat ik zou moeten verliezen hier.

Acties:
  • 0 Henk 'm!

Verwijderd

Heb ik eveneens gemerkt inderdaad.. :Y

Verwijderd

om het zoeken naar je eigen partijen in de logs te vergemakkelijken heb ik de vrijheid genomen een pagina te maken die de partijen gesorteerd weergeeft en een verkort overzicht van de partij uit de xml-files haalt.

http://hemminga-online.nl/~vincent/index.php

Verwijderd

Verwijderd schreef op zaterdag 22 september 2007 @ 22:41:
om het zoeken naar je eigen partijen in de logs te vergemakkelijken heb ik de vrijheid genomen een pagina te maken die de partijen gesorteerd weergeeft en een verkort overzicht van de partij uit de xml-files haalt.

http://hemminga-online.nl/~vincent/index.php
Ziet er leuk uit! :)

Ik ben trouwens het meest benieuwd naar of de Java Server VM gebruikt wordt. De HotSpot Client VM is veel trager... Maar goed, het is inmiddels al weer 19 dagen terug dat deze vraag gesteld is ;(

Acties:
  • 0 Henk 'm!

Verwijderd

:Y d:)b

Heb trouwens een vraag mbt de Java PC's die zometeen gereed staan. Is daar behalve de JDK ook AXIS2 al op geinstalleerd? Of moet dit bij je eigen project zitten? (en dat geldt eigenlijk voor alle toegestane externe jar's)

Verder vroeg ik me nog af of je programma zometeen heel het tournement moet blijven draaien, of dat het na een partij opnieuw opgestart mag/moet worden?

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zondag 23 september 2007 @ 00:39:
[...]
Verder vroeg ik me nog af of je programma zometeen heel het tournement moet blijven draaien, of dat het na een partij opnieuw opgestart mag/moet worden?
Ik denk het laatste. Omdat er maar 2 pc's zijn en iedereen om de beurt zijn/haar engine daarop moet draaien. Als je het hele tournament door mag blijven draaien kun je alle resources van de mensen na jou gebruiken om alvast vooruit te denken...

Je kunt natuurlijk wel een daemon laten draaien die de boel flink bezig houdt nadat je aan de beurt geweest bent. Of de JVM aanpassen, zodat bepaalde classes ontzettend traag worden (en uiteraard weer terugzetten als je zelf weer aan de beurt bent).

Je kunt zoveel doen zonder de spelregels te overtreden O-)

Wie maakt zijn engine eigenlijk in Java? En wie in .Net?

Acties:
  • 0 Henk 'm!

Verwijderd

tja, ik hoop wel dat de tegenstanders in een partij op aparte computers gaan draaien. Het is anders op de dag zelf nog best mogelijk om je programma wat aan te passen zodat ie allerlei mooie getallen uitrekent terwijl je niet aan de beurt bent, het liefst in meerdere threads :) Lijkt me echter niet het doel van de wedstrijd.

Waar stond dat er maar 2 pc's zijn trouwens? Dan gaat het wel lang duren. Een voorzichtige schatting van 20 deelnemers en 9 rondes met 6 minuten per partij levert al een wedstrijd van 9 uur op, en dat is dan zonder de tijd die het kost om na iedere partij 2 nieuwe programmas op te starten...

Ik programmeer in java dus, zal ook wel gebleken zijn door mn vraag naar het geheugen voor java. Eigenlijk is dat altijd een nadeel volgens mij voor programmeerwedstrijden, maar blijf stug doorzetten :)

[ Voor 14% gewijzigd door Verwijderd op 23-09-2007 14:28 ]


Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Verwijderd schreef op zaterdag 22 september 2007 @ 22:41:
om het zoeken naar je eigen partijen in de logs te vergemakkelijken heb ik de vrijheid genomen een pagina te maken die de partijen gesorteerd weergeeft en een verkort overzicht van de partij uit de xml-files haalt.

http://hemminga-online.nl/~vincent/index.php
Goed bezig Vincent d:)b
Dat is zeker makkelijker!
Verwijderd schreef op zondag 23 september 2007 @ 12:56:
[...]
Wie maakt zijn engine eigenlijk in Java? En wie in .Net?
Mijn programma gebruikt het .NET framework.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Verwijderd schreef op zondag 23 september 2007 @ 14:06:
Ik programmeer in java dus, zal ook wel gebleken zijn door mn vraag naar het geheugen voor java. Eigenlijk is dat altijd een nadeel volgens mij voor programmeerwedstrijden, maar blijf stug doorzetten :)
Ik denk dat het ten opzichte van C# geen nadeel is. Ik gebruik zelf overigens ook Java.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op zondag 23 september 2007 @ 14:06:
[..]
Waar stond dat er maar 2 pc's zijn trouwens? Dan gaat het wel lang duren. Een voorzichtige schatting van 20 deelnemers en 9 rondes met 6 minuten per partij levert al een wedstrijd van 9 uur op, en dat is dan zonder de tijd die het kost om na iedere partij 2 nieuwe programmas op te starten...
[..]
Hier (eerder in deze thread):
Sjaaky schreef op maandag 03 september 2007 @ 15:54:
@_Daan_
1. Op wat voor soort machine wordt de applicatie uitgevoerd?
De wedstrijden worden gespeeld op een core2duo E6400 met 2GB geheugen. Alleen weten we nog niet of je de cpu en geheugen helemaal voor jezelf krijgt. Dat is uiteraard wel zo eerlijk en daar streven we ook naar. Maar bij veel inschrijvingen zullen we toch het aantal gelijktijdige partijen op
moeten schroeven om totale wedstrijdduur binnen de perken te houden.
Ik snap dat dit voor jullie op dit moment geen handig antwoord is, want het nut van meerdere berekeningthreads staat hiermee ook nog niet vast.
Als ik er meer over weet, dan horen jullie het.
[..]
We hebben nog niets gehoord, het is dan ook nog maar 3 weken terug gevraagd. :|

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Ik vroeg me af of jullie ook nog wat pers uitgenodigd hebben? Altijd leuk als je gewonnen hebt en nog in de krant komt ook.

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Heb trouwens een vraag mbt de Java PC's die zometeen gereed staan. Is daar behalve de JDK ook AXIS2 al op geinstalleerd? Of moet dit bij je eigen project zitten? (en dat geldt eigenlijk voor alle toegestane externe jar's)
Het zou eerlijker zijn om deze al op de game pc te hebben staan. Dat is de enige manier om zeker te weten dat iedereen dezelfde heeft. Het zou wel handig zijn als dit nu alvast verteld wordt.
Verder vroeg ik me nog af of je programma zometeen heel het tournement moet blijven draaien, of dat het na een partij opnieuw opgestart mag/moet worden?
Ben ik ook benieuwd naar.

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Allereerst bedank voor de bugmeldingen en het geduld.
Verwijderd schreef op zaterdag 01 september 2007 @ 17:03:
-De laatste zet wordt niet opgeslagen.
-Onderin staat de laatste zet, positie 0. De FinishReason bovenin het bestand is echter: The player 'login' executed a move on field '5', the move is invalid. Maar, positie 5 is niet gezet, maar positie 0!
Beide opgelost.

GetTime(string playerId) is geïmplementeerd
C#:
1
2
3
4
5
6
/// <summary>
/// Gets the remaining time in milliseconds
/// </summary>
/// <param name="playerId">The players unique identifier.</param>
/// <returns></returns>
long GetTime(string playerId);


JNI ed zijn we inderdaad vergeten op te nemen.
JNI, unsafe code, COM interop, p/invoke, etc.. zijn allemaal verboden. Ik hoop dat jullie geen gebruik hebben van deze vrijheid. Het wordt voor de jury een stuk lastiger controleren wat er gebeurd als dat soort trucs worden uitgehaald. Bovendien is het voor het maken van een awale-engine absoluut niet nodig om dat soort technieken te gebruiken.
Regel 4.3.3 uit de spelregels is niet correct geimplementeerd op de game-server.
De bug op de testserver is opgelost.
Hierover was op de introductiebijeenkomst al onduidelijkheid. Mag je nou wel of niet alle zaden van de tegenstander slaan als er zetten zijn waarbij de tegenstander wel zaden over houd?
Als je een zet kunt doen waarbij je de tegenstander niet leeg eet, mag je de tegenstander niet leeg eten. Ik zie dat ik dat alleen in de startpost heb geupdate, niet echt duidelijk, sorry :)

Resign is gefixt.
Op het moment dat ik zou moeten beginnen, maar dat ik dat niet doe en een zet aan de tegenstander vraag, lijkt het erop dat de tegenstander inderdaad een zet gaat doen.
Ook gefixt.
tja, ik hoop wel dat de tegenstanders in een partij op aparte computers gaan draaien. Het is anders op de dag zelf nog best mogelijk om je programma wat aan te passen zodat ie allerlei mooie getallen uitrekent terwijl je niet aan de beurt bent, het liefst in meerdere threads :) Lijkt me echter niet het doel van de wedstrijd.
Pondering (denken in de tijd van de tegenstander) is toegestaan, zie de startpost. Daarom hebben we ook per speler een pc.
Je kunt natuurlijk wel een daemon laten draaien die de boel flink bezig houdt nadat je aan de beurt geweest bent. Of de JVM aanpassen, zodat bepaalde classes ontzettend traag worden (en uiteraard weer terugzetten als je zelf weer aan de beurt bent).
:X Ik denk dat we in dat soort gevallen hard na gaan denken over diskwalificatie.

De vragen over servers/geheugen/hoe op te starten staan dus nog open. Java en .Net krijgen evenveel geheugen. Met welke parameters de jvm wordt opgestart weten we nog niet precies.

Acties:
  • 0 Henk 'm!

Verwijderd

Sjaaky schreef op maandag 24 september 2007 @ 16:50:
[..]
De vragen over servers/geheugen/hoe op te starten staan dus nog open. Java en .Net krijgen evenveel geheugen. Met welke parameters de jvm wordt opgestart weten we nog niet precies.
Suggestie:

code:
1
java -server -Xms512m -Xmx2048m

Verwijderd

kan het zijn dat er nog een bug zit in de regel dat je moet feeden?

<Move User="1" Field="5" Time="130881381885" Position="2|1|1|2|18|0|24|0|0|0|0|0|0|0"/>
<Move User="0" Field="4" Time="130938258341" Position="3|2|2|3|0|2|36|0|0|0|0|0|0|0"/>

Ik kwam deze situatie tegen. Mijn programma speelt daar het veld met 18 seeds en speelt random daarmee leeg, De FinishReason is echter dat ik verloren heb omdat ik de tegenstander niet heb gefeed. Volgens mij kan dat echter ook niet... geen van de andere velden haalt de kant van de tegenstander.

Het lijkt wel goed te gaan als de tegenstander nog seeds heeft die geslagen worden als dat de enige mogelijkheid is, maar je kan em dus ook leegslaan als ie daarvoor al leeg was...

Nog een kleiner dingetje: als de tegenstander niet meer kan zetten dan krijg je alle seeds die er nog aan jouw kant liggen. Dit lijkt niet te gebeuren in de xml files. In de partij waarin het slaan wel goed ging was de score 25-0 terwijl het eigenlijk 48-0 is dan. Dat maakt in die situatie natuurlijk niet uit, maar als het 22-23 staat en de 22 hongert de ander uit dan wint ie met 25-23. Dan is het wel raar als de score 22-23 blijft.

[ Voor 23% gewijzigd door Verwijderd op 26-09-2007 10:46 ]


  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Ga ik naar kijken.

-> opgelost

[ Voor 32% gewijzigd door Sjaaky op 26-09-2007 17:45 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Is er tijdens de laatste voorbereidingen voor de wedstrijd een internetverbinding beschikbaar?

Nog een vraag: worden de engines tegelijkertijd gestart?

En hoe vaak mag je pollen voor de zet van de tegenstander? 10x per seconde zoals eerder gesuggereerd? En wat gebeurt er als je vaker polled?

[ Voor 55% gewijzigd door Verwijderd op 28-09-2007 20:55 ]


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Ga er van uit dat er morgenochtend geen internet beschikbaar is.

Mocht het echt nodig (en dat zal best wel :)) kunnen we altijd naar een normale werkplek gaan om daar dingen uit te zoeken, libraries te downloaden, onvoorziene problemen op te lossen.

Trouwens nog een mededeling!

De testserver start direct na het inloggen een partij. De echte server doet dit NIET. Dat betekent dat je na het inloggen moet vragen of er al een partij gestart is met GetMatchStatus(), zolang deze None of Waiting terug geeft moet je even (0.1 sec oid) slapen en dat nog een keer proberen.
Je kan datzelfde ook doen met GetServerStatus maar wij zorgen ervoor dat de clients pas op worden gestart als er een actieve ronde beschikbaar is.

10x per seconde vinden wij heel redelijk.
De engines worden tegelijk gestart.

--edit--

We gaan een run.bat gebruiken die door iedereen zelf ingeregeld kan worden met de juiste parameters etc..

[ Voor 11% gewijzigd door Sjaaky op 28-09-2007 21:46 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Op de huidige testserver verandert de match status anders niet meer zodra je gewonnen hebt. Werkt de echte server anders?

Of moet je eigenlijk StartMatch proberen?

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Soultaker schreef op vrijdag 28 september 2007 @ 22:21:
Op de huidige testserver verandert de match status anders niet meer zodra je gewonnen hebt.
Welke testserver gebruik jij? Bij mij verandert de match status in 'won' zodra ik gewonnen heb.

Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Dat weet ik niet.
Maar als een partij afgelopen is mag je sowieso niet verder draaien (we killen het process). Dus dat gedeelte is niet heel erg van belang.

[ Voor 9% gewijzigd door Sjaaky op 28-09-2007 23:55 ]


Verwijderd

Dus als een partij afgelopen is, kan een crash, verkeerde functie-aanroep of wat dan ook geen roet meer in het eten gooien, als je in gewonnen positie staat?

Acties:
  • 0 Henk 'm!

Verwijderd

Is de einduitslag nog ergens beschikbaar? In de logs lijken alle partijen van het toernooi nog in de initialized-state http://test.tjipchallenge...64fc2bd4cf46004899980.xml

Acties:
  • 0 Henk 'm!

Verwijderd

Ik zou ook nog wel een aantal partijen willen terugzien en de eindstand inderdaad.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Ik vond het erg leuk gisteren! De techniek had iets beter gekund, maar gelukkig werkte uiteindelijk alles met een mooie combinatie van last-minute hacks, handmatig starten/stoppen van programma's en score bijhouden met pen en papier. :)

Doordat er verschillende goede programma's meededen was het was nog erg spannend. Jammer dat er geen tijd was voor een volledige competitie (er is uiteindelijk een halve competitie gespeeld) maar desondanks zaten er een paar mooie partijen tussen.

Ik zou ze ook graag de partijen nog eens terug zien, niet in de laatste plaats omdat mijn programma in één van de partijen een ongeldige zet deed die ik niet kon verklaren (en dat kan ik niet uitstaan)! Overigens heb ik voor geïnteresseerden mijn programmacode ook online gezet: HTML source of awale.zip. (Ik denk dat eigenlijk alleen AI.java interessant is.)

Acties:
  • 0 Henk 'm!

Verwijderd

Leuk om je code te zien, is een stuk beter leesbaar dan de mijne ben ik bang :) Hoop dingen lijken heel erg op wat ik ook gedaan heb. Heb ook een long als bord gebruikt, ook negatieve waardes voor ongeldige zetten ook een statische variabele voor de gegeten zaden. Ik durfde het alleen niet aan om erop te vertrouwen dat er nooit meer dan 31 seeds in een vakje komen, dus daar is mijn code iets ingewikkelder door geworden.

Heb verder tot 4 plies diep move ordering gedaan met korte searches, en heb een transposition table gebruikt, en Joost had een 18-ply openingsboek gemaakt waardoor we de eerste zetten heel snel en toch goed konden doen (na 8 seconde opstarttijd om em te unzippen :))

Een "fout" waar ik pas heel laat achter kwam was dat ie op het eind weleens het partijeinde op een cruciaal moment over het hoofd wist te zien. Als hij bijvoorbeeld met 21-22 achter stond en zag dat ie 2 stenen kon slaan in 5 zetten maar ook zag dat ie op dezelfde manier na een rondje ook later die 2 stenen kon slaan dan zag ie dat als even goed, maar verloor vervolgens omdat er een herhaling van de stelling kwam. Door de evaluatie-functie te veranderen van alleen de geslagen stenen naar 100*[geslagen stenen]+[resterende searchdepth] was dat opgelost, en gaf ie ook hogere waardes aan paden waarin ie eerst voorstond en het later weggaf dan andersom, wat volgens mij ook wel gunstig is.

Jouw methode firstNonEmptyField lijkt trouwens eerder het tegenovergestelde te doen, wat een ongeldige zet zou verklaren, maar volgens mij roep je die alleen aan als je de tegenstander kan uithongeren, en naar wat ik me van de partij herinner was dat toen niet het geval.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Verwijderd schreef op zondag 30 september 2007 @ 23:21:
Ik durfde het alleen niet aan om erop te vertrouwen dat er nooit meer dan 31 seeds in een vakje komen, dus daar is mijn code iets ingewikkelder door geworden.
Door die aanname kan het rondzaaien van alle zaden met één enkele optelling afgehandeld worden. Als er niets geslagen wordt (wat meestal zo is) is daarmee ook de zet afgelopen. Als je dan op overflow moet checken wordt het allemaal veel ingewikkelder. Dat paste niet in mijn strategie van zo snel mogelijk in plaats van slim zoeken. Neemt niet weg dat ik 'm wel erg mooi vind; je kunt zo alle toestanden heel compact representeren.

Hoe doe je dat overflow checken trouwens, heb je daar een slimme manier voor, of ga je toch het hele veld rond en bij elk zaadje checken of je overflow krijgt?
Door de evaluatie-functie te veranderen van alleen de geslagen stenen naar 100*[geslagen stenen]+[resterende searchdepth] was dat opgelost, en gaf ie ook hogere waardes aan paden waarin ie eerst voorstond en het later weggaf dan andersom, wat volgens mij ook wel gunstig is.
Dat tweede weet ik niet, maar het lijkt me dat zo'n evaluatiefunctie de stabiliteit van je zoekalgoritme niet ten goede komt (en het is dan sowieso geen nul-som-spel meer). Geeft dat geen problemen als je waarden wil opslaan in je transpositietabel? Of compenseer je daar voor?

(Ik heb het iets anders opgelost, namelijk door bij iteratief zoeken weer te beginnen bij de beste zet van de vorige keer, en die alleen te vervangen als er een duidelijk betere zet is. Daardoor krijgt een zet die sneller voordeel oplevert de voorkeur boven een zet die evenveel waard is, maar waarvoor dat pas later duidelijk wordt.)
Jouw methode firstNonEmptyField lijkt trouwens eerder het tegenovergestelde te doen, wat een ongeldige zet zou verklaren, maar volgens mij roep je die alleen aan als je de tegenstander kan uithongeren, en naar wat ik me van de partij herinner was dat toen niet het geval.
Ik had daar sowieso een fout in; regel 67 (board >>= 5) ontbrak helemaal! Dat had ik gisteren tijdens de wedstrijd ook gezien (en heb ik dus vanmiddag aangepast). Maar waarom denk je dat 'ie het tegenovergestelde doet? In mijn bord-representatie zijn de laagste vijf bits veld 0 (het meest linker veld van de huidige speler) dus volgens mij klopt 'ie zo wel (hoewel ik het niet getest heb). Maar ik denk ook niet dat dat hét probleem was. Als je nog wat verdachts ziet, laat het vooral weten!

Acties:
  • 0 Henk 'm!

Verwijderd

Ik vond het ook erg leuk om de code te lezen, en heb me suf gezocht naar een bug. Volgens mij is firstNonEmptyField trouwens wel goed gecode. Uiteindelijk heb ik wel een bug gevonden in de move-methode, regel 92:

091 // TODO: cache values for (field + count%11)%12?
092 for (field = (field + count%11)%12; field >= 6; field -= 1)

Om het slaan-gedeelte af te handelen wordt field hierin het veld waar het laatste zaadje wordt geplaatst in een beurt. Dat is althans de bedoeling. Maar als count, het aantal zaadjes dat in het beginkuiltje zit, nou 11 of 22 is, dan wordt het naar-veld, hetzelfde als het van-veld, terwijl het juist 11 stappen verder zou moeten zijn (of 1 terug). Nou levert dat meestal niet een probleem op, omdat 1 stap terug vaak je eigen bordhelft is en je dan sowieso niet kunt slaan.
Maar áls je veld nul speelt en áls er 11 of 22 zaden in zitten en áls er na het spelen 2 of 3 zaden in veld 11 terechtkomen, dan wordt verzuimd om die te slaan (en evt andere zaden in velden 10,9,...).

Dit zou best wel eens de bug geweest kunnen zijn, waardoor het bord bij jou anders werd, en je een illegale zet speelde. :S Die TODO is zo wel wat wrang. :P
Je had trouwens gister zelf al een bug gevonden in je code, was dat deze? Of was dat een andere?

Overigens wel toevallig dat je testpartij vanwege lang nadenken was afgebroken dmv een illegale zet op veld 5 waar nul zaden op waren. Nu had je weer illegaal op veld 5 vanwege nul zaden, maar dit keer dus je eigen code. (Gister overwoog ik nog serieus de optie dat die malafide client nog runde en die de verkeerde zet deed. ;) Maar je had al verteld dat je bordrepresentatie anders was.)


edit: Ah, die bug die je gister gevonden had was dus wat anders.

edit2: ah, het gebeurt natuurlijk ook als je tegenstander zo'n zet doet. Vanwege je negamax, wat ik ook had. Ik zal eens kijken of ik mijn code ergens kan posten. Maar het blijft natuurlijk een zeldzame zet, die dan net voorkomt in de partij waar je met winst de top3 op gedeeld eerste plaats zou kunnen brengen.

[ Voor 9% gewijzigd door Verwijderd op 01-10-2007 00:43 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Verwijderd schreef op maandag 01 oktober 2007 @ 00:17:
Ik vond het ook erg leuk om de code te lezen, en heb me suf gezocht naar een bug. Volgens mij is firstNonEmptyField trouwens wel goed gecode. Uiteindelijk heb ik wel een bug gevonden in de move-methode, regel 92:

091 // TODO: cache values for (field + count%11)%12?
092 for (field = (field + count%11)%12; field >= 6; field -= 1)

Om het slaan-gedeelte af te handelen wordt field hierin het veld waar het laatste zaadje wordt geplaatst in een beurt. Dat is althans de bedoeling. Maar als count, het aantal zaadjes dat in het beginkuiltje zit, nou 11 of 22 is, dan wordt het naar-veld, hetzelfde als het van-veld, terwijl het juist 11 stappen verder zou moeten zijn (of 1 terug).
Geweldig! Ik moest nog even goed nadenken voordat ik doorhad wat je bedoelde, maar volgens mij is dit het inderdaad. Sterk gespot. :P Ik denk dat het zo wel klopt:
Java:
1
for (field = (field + (count - 1)%11 + 1)%12; fields >= 6; field -= 1)

(Of ik had die posities moeten precalculaten zoals de TODO suggereert, maar ik denk niet dat dat qua performance veel verschil gemaakt zou hebben).
Je had trouwens gister zelf al een bug gevonden in je code, was dat deze? Of was dat een andere?
Dat was de fout in firstNonEmptyField().
ah, het gebeurt natuurlijk ook als je tegenstander zo'n zet doet. Vanwege je negamax, wat ik ook had.
Inderdaad; in principe kan die bug ook nog wel andere potjes beïnvloed kan hebben, ook als dat veld niet daadwerkelijk gespeeld is, simpelweg omdat m'n AI aan bepaalde zetten in bepaalde situaties een verkeerd gevolg koppelt. (Aan de andere kant is de situatie met een veelvoud van elf zaden op het eerste veld wel vrij zeldzaam.)
Maar het blijft natuurlijk een zeldzame zet, die dan net voorkomt in de partij waar je met winst de top3 op gedeeld eerste plaats zou kunnen brengen.
Ja, en vervelend dat ik het niet eerder tegenkwam (maar zo gek is dat niet, want de random speler op de testserver gaf ook niet echt aanleiding om grote stapels op te bouwen). Waarschijnlijk was het slim geweest om ook tegen mezelf te testen (of tenminste niet alléén op de testserver) maar ik ben er ook niet heel uitgebreid mee bezig geweest na de eerst opzet.

Overigens lijkt het me behoorlijk waarschijnlijk dat zonder die illegal move Vincent en Joost ook gewoon gewonnen zouden hebben, want ik verloor bijvoorbeeld ook van Ed van Doorn (mijn enige andere verliespartij, geloof ik) waar zij wél van wonnen. Maar het blijft jammer om juist de match tegen de beste tegenstander zo te moeten eindigen. Ik ben in ieder geval blij dat ik nu een clue heb wát er überhaupt misging. :)

Acties:
  • 0 Henk 'm!

Verwijderd

betekent
if((board&31) == 0)
dan niet dat het veld leeg is? Als jullie allebei denken dat ie klopt zal ik wel ergens iets helemaal verkeerd lezen :)

Ik heb dit zo opgelost, het blijft in 1 long staan en kan dus nog steeds met 1 optelling geupdate worden. Ik moet inderdaad het bord aflopen om te checken op overflow, maar doe dit alleen als er een veld met 24 of meer seeds is (een veld met zowel het 16 als het 8 bit op 1). Dit komt al zo weinig voor dat het nauwelijks trager wordt. (Die laatse for-loop had ws makkelijk uitgeschreven kunnen worden, maar de doMove functie was al lang de bottleneck niet meer)

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//opvragen overflow buffer
if(seeds>=24)
{
     //add 4*store (bit 60,61,62) to the number of seeds
     seeds+= (board>>58)&28;  
}

... doe zet ...

//checken op "overflow" na de zet
if((board&bits16)>0 && (((board&bits8)<<1)&(board&bits16))>0)
{
    for(int i = 0 ; i < 12 ; i++)
    {
         if(board==(board|b28[i]))
         {
               board &= ~four[i];   //4<<5*i
               board += store;      //1<<60
               break;
         }
    }
}


Het blijft met die evaluatie-functie nog steeds een zero-sum spel, want de tegenstander rekt dus liever het moment waarop jij slaat, of zal verkiezen eerder te slaan ipv later. -101 voor jou impliceert nog steeds +101 voor de tegenstander. De reden dat ik denk dat dit beter is is vanwege het horizon-effect, als jij als laatst geslagen hebt is de kans groot dat de tegenstander de volgende wordt (althans tegen een goede tegenstander) omdat slaan je bordpositie vaak verslechterd. Dus ook als je het niet kan zien, is het fijner als jij eerst slaat en de ander daarna. Het zal meerdere redenen gehad hebben, maar na deze verandering won ie van mn testprogramma op (fixed) diepte 22, terwijl ie daarvoor nooit van diepte 20 kon winnen. Hij verloor ook niet meer van lagere zoekdieptes, wat ie daarvoor af en toe nog wel deed (erg irritant ;))

Het lijkt wel heel erg toeval dan inderdaad dat het net tegen ons misging, want dit had in ieder partij kunnen gebeuren. Misschien kunnen ze onze programmas nog eens tegen elkaar laten spelen, ik ben ook wel benieuwd naar een volledige competitie van de top 6 of zo omdat kleurvoordeel nog best wat uit kon maken en de top volgens mij behoorlijk aan elkaar gewaagd was.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Verwijderd schreef op maandag 01 oktober 2007 @ 11:26:
betekent
if((board&31) == 0)
dan niet dat het veld leeg is? Als jullie allebei denken dat ie klopt zal ik wel ergens iets helemaal verkeerd lezen :)
Erm, het was laat blijkbaar. :P Je hebt helemaal gelijk; die was dus nog fout. Het begint me steeds meer te verbazen dat het nog zo goed ging zaterdag met alle bugs die er nu nog uitgevist worden. ;)
Ik heb dit zo opgelost, het blijft in 1 long staan en kan dus nog steeds met 1 optelling geupdate worden. Ik moet inderdaad het bord aflopen om te checken op overflow, maar doe dit alleen als er een veld met 24 of meer seeds is (een veld met zowel het 16 als het 8 bit op 1). Dit komt al zo weinig voor dat het nauwelijks trager wordt. (Die laatse for-loop had ws makkelijk uitgeschreven kunnen worden, maar de doMove functie was al lang de bottleneck niet meer)

[knip: code]
Ah, dat ziet er wel mooi uit. De overhead valt zo inderdaad wel mee.
De reden dat ik denk dat dit beter is is vanwege het horizon-effect, als jij als laatst geslagen hebt is de kans groot dat de tegenstander de volgende wordt (althans tegen een goede tegenstander) omdat slaan je bordpositie vaak verslechterd.
Klopt. Dat probleem ben ik ook meer bij dit soort programma's tegengekomen.
Het lijkt wel heel erg toeval dan inderdaad dat het net tegen ons misging, want dit had in ieder partij kunnen gebeuren.
Klopt, maar ik heb ook het idee dat het grote-stapels-bouwen iets is wat vooral voorkomt bij twee goede spelers (die allebei niet makkelijk stenen weggeven), dus eigenlijk is het wel logisch dat het juist in die partij optrad.
Misschien kunnen ze onze programmas nog eens tegen elkaar laten spelen, ik ben ook wel benieuwd naar een volledige competitie van de top 6 of zo omdat kleurvoordeel nog best wat uit kon maken en de top volgens mij behoorlijk aan elkaar gewaagd was.
We kunnen ook de gameserver emuleren natuurlijk, of een Java interface definiëren analoog aan de gameserver en dan testen met wie wil (aangenomen dat alle geïnteresseerden met Java werken). Wel lastig als mensen in de tijd van de tegenstander willen denken.

Acties:
  • 0 Henk 'm!

Verwijderd

ze zouden de source-code van de server beschikbaar stellen hoorde ik, dus dan zouden we die mss aan kunnen passen zodat we van thuis via internet kunnen spelen. Onze transposition table pikt namelijk ook al het geheugen in dat ie pakken kan, dus das dan ook nog een extra probleem als je 2 geheugen-intensieve programmas op 1 pc wil draaien.

en wat betreft dat grote-stapels bouwen, dat heb ik ons programma juist ook tegen zwakke spelers wel zien doen omdat ie daar dan enorme winsten mee kon halen, een sterke tegenstander laat je niet zomaar een hele rij stenen slaan op die manier... maar ik heb inderdaad ook wel de meeste bugs in potjes tegen een hoge zoekdiepte tegenstander gevonden omdat die dan toch wat meer de limieten van het algoritme opzoekt.

[ Voor 30% gewijzigd door Verwijderd op 01-10-2007 12:43 ]


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Wij willen, gezien het enthousiasme van alle deelnemers, het mogelijk maken dat mensen door kunnen gaan met het verbeteren van de engines.
We denken bijvoorbeeld aan een gameserver waarbij je kunt spelen tegen 1 van de zaterdag spelende engine (uiteraard met jullie toestemming). Of wellicht op 1 of andere manier dat 2 engines elkaar kunnen ontmoeten. Dit moeten we nog wel verder uitwerken.
Ik vond het (ondanks het gestress voor de wedstrijd ;)) zaterdag een erg leuke en leerzame dag. Ik heb een aantal keer met verbazing aangehoord hoever mensen zijn gegaan om hun engine te optimaliseren. De logfile viewer van Vincent was ook superhandig (ook voor ons :))

We hadden meer dan 30 inschrijving, maar uiteindelijk bleven er 12 over. Dat niet iedereen mee kon doen was jammer. Dit lag mede aan de soap interface, die voor velen toch meer voeten in de aarde had dan dat we hadden verwacht. Van de andere kant hadden we ook niet veel meer deelnemers moeten hebben gezien de tijd en de mate van toernooiautomatisering :).

Ik moet diegenen die de gespeelde potten terug willen zien helaas teleurstellen, die partijen zijn we kwijt. Blijkt dat door een samenloop van een onduidelijk 'manager'-gui en verkeerd bedacht procedure we bij het invoeren van een nieuwe ronde de vorige ronde overschreven.
Technischer:
Een toernooi is een object met daarin rondes, partijen en boarden, zeg maar zoals de xml eruit ziet die jullie voor een testpartij konden opvragen. Deze werd in 1 keer middels soap naar de server geschreven. Na het spelen van ronde 1 hadden we deze moeten teruglezen van de server voordat we de volgende ronde invoerden. Omdat we dat niet gedaan hebben schreven we bij elke nieuwe ronde de maagdelijke borden weer naar server. Dus slecht van ons (/mij), sorry daarvoor. (Ik ben blij dat de bug van Soultaker inmiddels gevonden is :)).

De uitslag staat hier. We komen nog met een persbericht.

@vdeboer: Komen jullie allebei uit Delft? Dat willen we weten voor het persbericht. Stuur maar een dm.

Acties:
  • 0 Henk 'm!

Verwijderd

Ah, goed dat de uitslag er iig nog is.
Wij komen allebei uit Delft ja. Misha spelt zijn naam trouwens zonder c :)

Acties:
  • 0 Henk 'm!

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 07-07 19:22
Ik vond het zaterdag een ontzettend leuke dag, ondanks dat mijn sh$%*tty programma niet eens meegedaan heeft :) . Gaat die re-match er nog komen? Of andere wedstrijden wellicht?

PS: ik sta niet in de ranglijst vermeld (Jaap van Wingerden) ??? :/

[ Voor 16% gewijzigd door NaliXL op 01-10-2007 17:06 ]

Genoeg is meer dan veel, en tart den overvloed


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
NaliXL schreef op maandag 01 oktober 2007 @ 17:05:
Ik vond het zaterdag een ontzettend leuke dag, ondanks dat mijn sh$%*tty programma niet eens meegedaan heeft :)
Inderdaad, erg jammer dat je het niet goed werkend kreeg :/
Sjaaky schreef op maandag 01 oktober 2007 @ 15:22:
We hadden meer dan 30 inschrijving, maar uiteindelijk bleven er 12 over. Dat niet iedereen mee kon doen was jammer. Dit lag mede aan de soap interface, die voor velen toch meer voeten in de aarde had dan dat we hadden verwacht.
Misschien was het handiger geweest een interface (ik bedoel dus een echte interface zoals de taal Java die kent) te specificeren, zodat mensen alleen een klasse hoefden te schrijven die die interface implementeert, en dat jullie dan een stub aanleverden die de verbinding met de server regelt. Iets soortgelijks kun je ook voor C# doen. Dan zouden deelnemers er verder geen werk van hoeven maken.

Als je niet met SOAP bekend bent en uit moet gaan zoeken hoe al die libraries werken is het echt niet makkelijk. Ik kan me best voorstellen dat mensen daar over struikelden. Dat er nu mensen waren met vele megabytes aan libraries was ook niet echt makkelijk.
Ik moet diegenen die de gespeelde potten terug willen zien helaas teleurstellen, die partijen zijn we kwijt. Blijkt dat door een samenloop van een onduidelijk 'manager'-gui en verkeerd bedacht procedure we bij het invoeren van een nieuwe ronde de vorige ronde overschreven.
Ik was er al een beetje bang voor omdat jullie ze tijdens de wedstrijd ook niet konden vinden. Jammer, maar so be it. :)

[ Voor 9% gewijzigd door Soultaker op 01-10-2007 19:13 ]


Acties:
  • 0 Henk 'm!

  • Sjaaky
  • Registratie: Oktober 2000
  • Laatst online: 12-09 10:25
Soultaker schreef op maandag 01 oktober 2007 @ 19:12:
Misschien was het handiger geweest een interface (ik bedoel dus een echte interface zoals de taal Java die kent) te specificeren, zodat mensen alleen een klasse hoefden te schrijven die die interface implementeert, en dat jullie dan een stub aanleverden die de verbinding met de server regelt. Iets soortgelijks kun je ook voor C# doen.
Ik weet niet of alle deelnemers afvielen vanwege de soap-interface. We hebben overwogen om gewoon een bestand te lezen en stdout te gebruiken, zoals gebruikelijk is tijdens de ACM ICPC en voorronden. Dan hadden we wel zelf iets moeten ontwikkelen om te communiceren met de gameserver. Wij werken als bedrijf veel met soap en webservices, dus was de keuze daarvoor al snel gemaakt.
Het idee was om mensen kennis te laten maken met soap. Maar dat het zo veel problemen op zou leveren hadden we niet voorzien. Als er nog een TJIP Challenge komt, gaan we hierin meer tegemoet komen.

In de praktijk merk ik vaak (los van soap overigens) dat je heel snel klaar kunt zijn met de basisfunctionaliteit en dat het interfacen met andere systemen dan voor de problemen zorgt. Zo heb ik een keer (wel soap) een legacy delphi 6 applicatie moeten laten praten met een .net webservice van microsoft die wse 2.0 attachments gebruikte. Natuurlijk geen bestaande delphi implementatie van te vinden. Om die zelf te implementeren vond ik te ver gaan. Toen heb ik maar een .net com component geschreven die delphi kon gebruiken. Dat leverde weer problemen op byte niveau op met structs, maar die problemen kon ik toen wel van 2 kanten oplossen.

Acties:
  • 0 Henk 'm!

Verwijderd

Ik ben trouwens zelf ook bezig een soortgelijke wedstrijd te organiseren voor Stratego

Daar maken we zelf een client die kan praten met een java programma dat een interface implementeerd of met een native dll bestand dat dezelfde methodes bevat. Dit laat de deelnemers vrijwel helemaal vrij welke taal ze gebruiken en ze hoeven alleen een aantal methodes te implementeren. Nu is dat voor deze wedstrijd ook iets belangrijker omdat onze doelgroep vooral de bestaande programmas zijn die in allerlei talen geschreven zijn en we het voor de deelnemers zo laagdrempelig mogelijk willen maken.

http://www.strategousa.or...ratego_World_Championship

Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
De finale van afgelopen zaterdag was een geslaagde dag! Ik heb het goed naar de zin gehad ondanks dat ik onderaan geeindigd ben.

Ik ben zelf wel een voorstander van het delen van de source code. Ik zal een link naar mijn source code (C#) voor het einde van de week hier op het forum plaatsen.

Soultaker: fijn dat je jouw source code online hebt gezet. Ga hier vandeweek eens een keer rustig voor zitten. Ik denk dat ik er een heleboel van kan leren!!

Acties:
  • 0 Henk 'm!

  • W4rlock
  • Registratie: Februari 2002
  • Laatst online: 04-12-2014
Zaterdag was het inderdaad gezellig, ik moest helaas eerder vertrekken ivm andere verplichtingen, toch wel jammer om te zien dat mijn programma het zo slecht heeft gedaan... maargoed, ik had ook niet veel meer verwacht, had de "AI" nog de avond er voor in elkaar geflanst :P.
Soultaker schreef op maandag 01 oktober 2007 @ 19:12:
Als je niet met SOAP bekend bent en uit moet gaan zoeken hoe al die libraries werken is het echt niet makkelijk. Ik kan me best voorstellen dat mensen daar over struikelden. Dat er nu mensen waren met vele megabytes aan libraries was ook niet echt makkelijk.
Als je Java gebruikt heb je 3rd party libraries helemaal niet nodig. Je kunt gewoon de WSDL importeren mbv wsimport, vervolgens een GameServer instantie maken en gaan met die banaan... hoeveel simpeler wil je het maken? :?

[ Voor 32% gewijzigd door W4rlock op 01-10-2007 23:59 ]


Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Ook ik vond de wedstrijd afgelopen zaterdag zeer geslaagd. Eigenlijk zou zoiets vaker georganiseerd moeten worden. :)
Als je Java gebruikt heb je 3rd party libraries helemaal niet nodig. Je kunt gewoon de WSDL importeren mbv wsimport, vervolgens een GameServer instantie maken en gaan met die banaan... hoeveel simpeler wil je het maken? :?
Als je het weet is het allemaal vrij eenvoudig inderdaad. Helaas staat wsimport niet echt bovenaan bij google, waardoor je er ook niet zomaar achter komt. Ik denk dat het een goed idee is om mensen hier wat mee te helpen door bijvoorbeeld een voorbeeld te geven.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Sjaaky schreef op maandag 01 oktober 2007 @ 20:26:
In de praktijk merk ik vaak (los van soap overigens) dat je heel snel klaar kunt zijn met de basisfunctionaliteit en dat het interfacen met andere systemen dan voor de problemen zorgt.
Ah. Eigenlijk was dat zaterdag ook het geval, met al die mensen (inclusief mezelf) die hun main loop niet goed hadden gestructureerd (eerst wachten op de server, dan inloggen, dan wachten op een ronde). Met puur de beschikbare methoden specificeren ben je er nog lang niet, en de hele interface specificeren is natuurlijk tricky ongeacht wat voor middleware je gebruikt.
W4rlock schreef op maandag 01 oktober 2007 @ 23:57:
Als je Java gebruikt heb je 3rd party libraries helemaal niet nodig. Je kunt gewoon de WSDL importeren mbv wsimport, vervolgens een GameServer instantie maken en gaan met die banaan... hoeveel simpeler wil je het maken? :?
Komt 'ie nu mee. :P Werkt dat wel met Java SE, of heb je daar EE voor nodig? Ik heb dat tooltje in ieder geval niet bij mijn JDK meegekregen.

Verder heb ik dat ook nergens kunnen vinden; ja, nu kan ik het wel vinden als ik op wsimport zoek, maar als je er niet mee bekend bent zijn dat soort dingen niet zo triviaal. Ik ram nu ook zo een CORBA client en server in elkaar als het moet, maar dat komt omdat ik er al uren tijd in heb gestoken (CORBA wordt over het algemeen als veel ingewikkelder dan SOAP beschouwd). Kortom: dat een professional het snel kan, betekent niet dat het voor iedereen makkelijk is.

Overigens vind ik het niet direct verkeerd dat er voor een SOAP interface gekozen was. Dit soort dingen uitzoeken en werkend krijgen is onderdeel van de uitdaging, en je had er weken de tijd voor. Het is echter wel jammer als een aantal mensen hierdoor helemaal niet mee konden doen.

Acties:
  • 0 Henk 'm!

  • Plons_de_Kikker
  • Registratie: Oktober 2005
  • Laatst online: 09-09 09:54
Overigens vind ik het niet direct verkeerd dat er voor een SOAP interface gekozen was. Dit soort dingen uitzoeken en werkend krijgen is onderdeel van de uitdaging, en je had er weken de tijd voor. Het is echter wel jammer als een aantal mensen hierdoor helemaal niet mee konden doen.
Hoewel het inderdaad niet voor iedereen even makkelijk is, had je er inderdaad ruim een maand de tijd voor. Zelf heb ik ook nog een aantal vragen voorgelegd aan Corniel, waarop ik telkens binnen een aantal uren al antwoord heb gekregen. Tijdens de introductie-bijeenkomt is er ook aangegeven dat mensen contact op mochten nemen met Tjip bij problemen. Daarnaast was dit forum er ook nog eens. Het was dus voor iedereen die even doorzette prima mogelijk om die interface te implementeren.

Acties:
  • 0 Henk 'm!

Verwijderd

Naar aanleiding van het feit dat we een aantal keer op 0-9 kwamen in het toernooi heeft Joost trouwens het openingsboek nog doorzocht op het grootste offer dat er in zat:

na de zettenreeks:
5 2 3 4 1 5 2 2 3 3 2 5 3 4 1 0

is dit de bordpositie
score: 0-10
1 11 0 0 1 10
0 10 1 1 1 2

de tegenstander staat dan maar liefst 10 punten voor. Op diepte 22 vind hij deze bordpositie echter ook +10 waard, en vanaf 24 zelfs +11, lijkt dus nog te kloppen ook :)

Acties:
  • 0 Henk 'm!

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 07-07 19:22
Iemand heeft het woord "re-match" in zijn mond gehad na de wedstrijd. Iemand al plannen gemaakt o.i.d.?

Genoeg is meer dan veel, en tart den overvloed


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

NaliXL schreef op woensdag 03 oktober 2007 @ 17:12:
Iemand heeft het woord "re-match" in zijn mond gehad na de wedstrijd.
Yep, we hebben plannen - de winnaars wilden een paper gaan schrijven geloof ik - en die willen vast ook partij-data hebben. ;)

Daarnaast lijkt het ons ook heel leuk om wat meer te zien. Een toernooi is ook niet heel veel voor zoveel werk. Daarom mógen mensen een geupdate versie sturen. Vooral voor René Wareman en Jaap van Wingerden is dat dé uitgelezen kans, om hun engine echt te laten testen.

Als men dat doet, wel graag de aanlogprocedure als deze nog niet klopte. Hieronder in pseudo code wat we verwacht(t)en. (Ja dat hadden we veel eerder kunnen/moeten doen)

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
serverstate = proxy.GetServerStatus();
switch(surverstate)
{
    case Initializing:
    case Loaded:
        // Be patiant and try again.
        break;
    case: Finished:
        // Stop trying.
        break;
    case Playing: 
        id = proxy.Logon("my name");
        
        // NOW Logon.
        gamestate = proxy.GetMatchStatus(id);
        switch(gamestate)
        {
            case None:
            case Waiting:
                // Be patiant and try again.
                break;
            case Won:
            case Draw:
            case Lost:
                // Game has ended, you may try again.
                break;
            case Playing:
                startplayer = proxy.StartMatch(id);
                // Do moves, etc.
        }
}

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Bij deze een link naar de sourcecode van mijn programma:
'http://www.mathijsinlonden.nl/zip/Awale v1.3 - Release.zip'

Het heikele punt van mijn programma was de snelheid. Ik heb tot in den treure object georienteerd geprogrammeerd. Dat maakt het programma erg traag vergeleken met de andere programma's.
Vanwege tijdgebrek ben ik aan een heleboel zaken niet meer toegekomen (algoritme verbeteren en de snelheid van het programma verhogen). Ook hield mijn programma geen rekening met de speeltijd.

Enkele dagen voor de wedstrijd kwam ik er achter dat de speeltijd niet veel meer zou zijn dan twee minuten... oei! Ik hoopte maar dat de hardware van TJIP beter zou zijn dan hetgeen ik voor mijn neus heb staan.

Helaas bleek tijdens de finale dat het verhogen van de zoekdiepte de denktijd te lang maakte. En dat het programma zelfs op zoekdiepte 3 wedstrijden verloor omdat de tijd op was :'(

* Mathijs is blij met alle kennis die hij tijdens/na de finaledag heeft opgestoken.

@vdeboer: Tijdens de wedstrijden speelden jullie onder een aparte naam (weet niet precies meer welke). Waar komt de naam van jullie programma vandaan?

Acties:
  • 0 Henk 'm!

Verwijderd

Ik wil best nog eens tegen de programma's van zaterdag spelen, ben benieuwd of ik met een iets hogere zoekdiepte nummers 3 en 2 (en 1) het lastiger had kunnen maken.

En kan iemand zijn programma zo maken, dat er een stelling ontstaat met een stapel van 32 of meer? Volgens mij draaien wat programma's dan in de soep. :) Die van Soultaker bijvoorbeeld. De mijne neemt ook aan dat zo'n stapel niet voorkomt, maar houdt ook voor de zekerheid het bord bij met een array van 12 ints, dus elke zet begint ie het zoeken met het juiste bord. En na het zoeken returnt ie desnoods een random veld met minimaal 1 zaadje, mocht het veld dat ie wil spelen nul zaden bevatten.

Acties:
  • 0 Henk 'm!

Verwijderd

Joost Voordouw/Vincent de Boer was een beetje lang als username, dus hebben we lang nagedacht over een naam voor ons programma. Uiteindelijk hebben we gekozen voor Mshindi, in anticipatie op de wedstrijd: Het is swahili voor "winnaar" ;)

Acties:
  • 0 Henk 'm!

  • mathijs van altvorst
  • Registratie: Januari 2001
  • Laatst online: 05-11-2022
Verwijderd schreef op vrijdag 05 oktober 2007 @ 16:48:
Joost Voordouw/Vincent de Boer was een beetje lang als username, dus hebben we lang nagedacht over een naam voor ons programma. Uiteindelijk hebben we gekozen voor Mshindi, in anticipatie op de wedstrijd: Het is swahili voor "winnaar" ;)
haha :)

Nu snap ik waarom je dat tijdens de wedstrijd liever (nog) niet vertelde ;)

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Verwijderd schreef op maandag 01 oktober 2007 @ 11:26:
Misschien kunnen ze onze programmas nog eens tegen elkaar laten spelen, ik ben ook wel benieuwd naar een volledige competitie van de top 6 of zo omdat kleurvoordeel nog best wat uit kon maken en de top volgens mij behoorlijk aan elkaar gewaagd was.
Dat lijkt me nog steeds een prima plan, maar we hebben nog van niemand nieuwe code opgestuurd gerkegen met eventuele kleine bugfixes. Hopelijk lukt dat nog deze week?!

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

Kan mijn nieuwe code naar een willekeurig tjip-adres worden opgestuurd? Of naar een speciale?

Ik heb wel een nieuwe methode bedacht die tot een verbetering kan leiden, maar dan moet ik nog even proggen. Ik kan sowieso de zoekdiepte laten afhangen van de tijd die nog rest, dat scheelt al een hoop.
Geldt nog steeds 2 minuten per partij en 1 bonusseconde per zet? Dan hoef ik niet de getTime() functie te implementeren, maar kan ik nauwkeurig genoeg zelf de tijd bijhouden. ;)

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Verwijderd schreef op woensdag 10 oktober 2007 @ 21:56:
Kan mijn nieuwe code naar een willekeurig tjip-adres worden opgestuurd? Of naar een speciale?
voor het adres: dm sjaakie of mij (wegens vakantie opteer ik voor optie 1)
Ik heb wel een nieuwe methode bedacht die tot een verbetering kan leiden, (..)Geldt nog steeds 2 minuten per partij en 1 bonusseconde per zet?
Yep, hoewel flexibileit natuurlijk geen kwaad kan. ;)

Vincent, jij wilde nog een paper schrijven? Laat even weten wat voor informatie je graag zou willen hebben?

[ Voor 15% gewijzigd door Corniel op 11-10-2007 11:07 ]

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

Wat is dm eigenlijk?

Trouwens, als ik een verbeterde versie wil kunnen versturen, heb ik toch eerst mijn code nodig van de wedstrijddag. Op die dag was er nogal wat aan veranderd, met name de build.xml ofzo. Dit geldt eigenlijk voor wel meer deelnemers denk ik. Kunnen jullie mij mijn code sturen?

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
DM is direct message, oftewel dit icoontje in iemands profile: Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/dm.gif.

Acties:
  • 0 Henk 'm!

Verwijderd

Zijn er mensen die een verbeterde versie hebben ingestuurd?
Ik was het eerst wel van plan, maar had uiteindelijk te weinig tijd/zin.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Yep, ik heb de bugfixes die hier in de thread ook besproken waren doorgevoerd en verder niets meer (geloof ik -- het is lang geleden). Het zou me verbazen als de resultaten veel verschillen, hoewel er nu misschien een paar extra programma's zijn die in september niet werkten. Ik ben wel nieuwsgierig in ieder geval.

offtopic:
Wat was dat voor gepruts van jullie bij het NWERC? :'( Een stel Britten laten winnen; dat heb ik nog nooit gezien.

Acties:
  • 0 Henk 'm!

Verwijderd

hoe verloopt de wedstrijd eigenlijk?

Wij hebben wel een paar kleine wijzigingen gemaakt, vooral getalletjes veranderd en een betere hashfunctie. Hij is nu iets sneller, maar scheelt niet veel op zich

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Momenteel hebben we drie updates ontvangen. Vandaag testen we de automatische opstelling, maandag start de echte rematch. Insturen dus tot maandag morgen naar het bekende adres. (Anders gebruiken we de bekende engine)

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

Oh, updaten kan nog? Dan stuur ik in ieder geval een versie in met een betere zoekdiepte.

offtopic:
Tsja, NWERC verliep niet zoals gehoopt. We gingen slecht en we eindigden op 5 opgaven, 3 minder dan de Britse winnaars, die overigens 3 Slowaken waren. Achteraf zagen we dat we bij 3 opgaven die we WA hadden, stomme foutjes hadden, zoals variabelen voor elke testcase niet op nul zetten etc. :/

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

@mstassen Leuk van je update. We gaan wel zien wat het oplevert.

Anderen moeten snel zijn, maar er is wat te regelen...

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

De rematch is onderweg. Er zijn 1200 partijen ingepland. Alles gaat nu (eindelijk) volledig automatisch. We houden jullie op de hoogte. Inclusief sommige eniges die met twee versies meedoen zijn het er 16. Ik ben benieuwd.

while (me.Alive) {
me.KickAss();
}


Verwijderd

is er al een tussenstand? :)

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Er is wat vertraging opgelopen bij het autmatiseren van het proces. Maar nu loopt ie soepel. De tussenstand na 15 van de 15 ronden (iedereen een keer tegen elkaar).

Merk op dat AlterEgo een modificatie van Mathijs is, met tips van Jack en mij. Sebastian heeft een partij gewonnen van Mshindi2! Ook de engine virverus die net op tijd af en en een latere update doen het verrassend goed.

En er zijn nog steeds geen remises, dat vind ik ook wel heel opvallend, aangezien dat de theoretische uitkomst is.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.   Naam                     W   R    V   Pt   #   Perc.
========================================================
 1  Mshindi2                14   0    1   14   15  93,3%
 .  Mshindi                 14   0    1   14   15  93,3%
 3  EMvanDoorn              12   0    3   12   15  80,0%
 .  Sebastian               12   0    3   12   15  80,0%
 5  Soultaker2              10   0    5   10   15  66,7%
 .  Soultaker               10   0    5   10   15  66,7%
 .  virverus2               10   0    5   10   15  66,7%
 8  MishaStassen             8   0    7    8   15  53,3%
 .  virverus                 8   0    7    8   15  53,3%
10  Daan                     6   0    9    6   15  40,0%
11  Gan                      5   0   10    5   15  33,3%
12  AlterEgo                 4   0   11    4   15  26,7%
13  AfterSiX                 3   0   12    3   15  20,0%
 .  Jeroen Bransen           3   0   12    3   15  20,0%
15  jvdb                     1   0   14    1   15   6,7%
16  Mathijs van Altvorst     0   0   15    0   15   0,0%


edit:
Kijk net naar de viewer: de eerste remise: virverus2-Daan

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

Verwijderd

zo, wel veel meer verassende uitslagen dan in de echte wedstrijd. Toen was het een hele nette crosstable... nu heeft Mshindi verloren van een lagere, maar ook EMvanDoorn en Sebastian hebben punten gemorst tegen lagere programmas lijkt.

Inderdaad opvallend dat er geen remises zijn, dat kwam in onze tests met oudere versies toch regelmatig voor

Acties:
  • 0 Henk 'm!

Verwijderd

Zo, ik sta nu wel een stuk lager. Jammer dat mijn laatste update net niet op tijd was. (nadat de eerdere een bug bevatte.) Ik was wel benieuwd hoe een iets betere het deed, met name in het eindspel liet ik veel liggen.
Begrijp ik nu goed dat er 5 hele competities worden gespeeld? Iedereen 5 keer beginnend en als tweede tegen elke andere speler?

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Verwijderd schreef op zondag 16 december 2007 @ 21:13:
Zo, ik sta nu wel een stuk lager. Jammer dat mijn laatste update net niet op tijd was(..)
Troost je: ik heb vannacht een paring gemaakt waarbij Misha2 tegen alle andere engines speelde die in de rematch zaten. Je update wordt dus meegenomen.
Begrijp ik nu goed dat er 5 hele competities worden gespeeld? Iedereen 5 keer beginnend en als tweede tegen elke andere speler?
Inderdaad: iedereen speelt 5 keer met noord en 5 keer met zuid tegen alle deelnemers + updates.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.   Speler                     W    R     V    Pt    #     %
==============================================================
 1  Mshindi                   152   4     4  154,0  160  96,3%
 2  Mshindi2                  132   7    21  135,5  160  84,7%
 3  virverus2                 126   2    32  127,0  160  79,4%
 4  EMvanDoorn                119   0    41  119,0  160  74,4%
 5  Sebastian                 110   1    49  110,5  160  69,1%
 6  Soultaker                 108   1    51  108,5  160  67,8%
 7  Maks Verver [Soultaker]   101   0    59  101,0  160  63,1%
 8  virverus                   88   2    70   89,0  160  55,6%
 9  MishaStassen               84   2    74   85,0  160  53,1%
10  Misha2                     77   6    77   80,0  160  50,0%
11  Daan                       71   2    87   72,0  160  45,0%
12  Gan                        66   1    93   66,5  160  41,6%
13  Jeroen Bransen             39   1   120   39,5  160  24,7%
14  AfterSiX                   29   1   130   29,5  160  18,4%
15  AlterEgo                   20   5   135   22,5  160  14,1%
16  jvdb                       18   5   137   20,5  160  12,8%
17  Mathijs van Altvorst        0   0   160    0,0  160   0,0%


Dit is hem dan de eindstand. Misha2 deed het goed, maar ging een aantal keer in gevallen in gewonnen stelling door de vlag. Ook Mshinidi2 overkwam dat een aantal keer. Virverus2 vind ik zelf de revelatie van het de rematch.

Over de winnaar:

Met Noord: 2 maal remise tegen MishaStassen; 2 maal verloren van virverus2
Met Zuid: 1 maal remise en twee maal verloren van Mshindi2; 1 maal remise tegen virverus2

De korste partij (niet gewonnen op tijd, of na een onreglementaire zet):
Mshindi-AlterEgo 23 ply (5 maal gespeeld)

Grootste verschil: Misha2-Jeroen Bransen (36 stenen, 42 om 6) Een verschil van 34 stenen komt al heel veel voor, net als 33 (0 om 33).

Een groot aantal partijen lijkt meerdere malen gespeeld te zijn. Hoeveel dat er zijn weet ik niet, maar dat ga ik nog uitzoeken.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
Leuk om te zien! Inderdaad verassend dat virverus2 nu in de top inbreekt. Wel raar dat Mshindi2 nu zoveel partijen meer verloren heeft. (Alleen op tijd?!)

Als het niet te veel werk is, kun je dan ook een matrix posten met wie hoe vaak van wie won? Of de logs ergens online zetten? Het is sowieso wel leuk om wat partijen na te kijken. ;)

In ieder geval erg leuk dat jullie er nog werk van hebben gemaakt om een nacompetitie op poten te zetten!
Corniel schreef op maandag 17 december 2007 @ 13:13:
Een groot aantal partijen lijkt meerdere malen gespeeld te zijn. Hoeveel dat er zijn weet ik niet, maar dat ga ik nog uitzoeken.
Ik kan me voorstellen dat een heleboel inzendingen in principe deterministisch waren (de mijne wel in ieder geval, hoewel kleine variaties in tijd wel verschil kunnen maken) waardoor een partij tussen twee personen altijd op dezelfde manier gespeeld wordt.

[ Voor 35% gewijzigd door Soultaker op 17-12-2007 17:16 ]


Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Soultaker schreef op maandag 17 december 2007 @ 17:14:
Wel raar dat Mshindi2 nu zoveel partijen meer verloren heeft. (Alleen op tijd?!)
Das was een foutje van mijn zijnde. Mshinidi2 is niet door zijn/haar vlag gegaan.
Als het niet te veel werk is, kun je dan ook een matrix posten met wie hoe vaak van wie won? Of de logs ergens online zetten? Het is sowieso wel leuk om wat partijen na te kijken.
Een matrix moet te maken zijn. De partijen heb ik ook. Het is een bestand van 10 MB. Dus de liefhebbers mogen mailen.
Ik kan me voorstellen dat een heleboel inzendingen in principe deterministisch waren (de mijne wel in ieder geval, hoewel kleine variaties in tijd wel verschil kunnen maken) waardoor een partij tussen twee personen altijd op dezelfde manier gespeeld wordt.
Dat blijkt. Zelf zou ik om dit soort redenen een randomizer in mn boek zetten. Dat kan zowel een voor- als een nadeel zijn, maar geeft uiteindelijk wellicht meer inzicht in hoe de engine speelt.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Virverus
  • Registratie: December 2007
  • Laatst online: 04-08-2022
Hoera!

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Aangezien wij - de organisatie en onze werkgever - het als een succes hebben ervaren komt er dit jaar een nieuwe challenge. Daarover hebben de deelnemers als het goed is een e-mail ontvangen. We hebben een aantal ideeën, maar zijn ook geintresseerd in jullie input. Dus laat van je horen.

Tot nu toe genoemd:
  • Tetris (2 persoons)
  • TankWars
  • Backgammon
  • Stratego
  • Scrabble
  • Kolonisten van Katan
  • Risk
  • Diplomacy
  • Tangram
  • Poker
  • Boerenbridge
  • Rikken
Zoals je ziet neigen we zelf naar een multi-user probleem, waarbij onbekende informatie een deel van het probleem is.

p.s. We hopen wanneer de nieuwe wedstrijd van start gaat net als over Awale een draad te mogen starten, waar problemen en suggesties besproken kunnen worden.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Serpie
  • Registratie: Maart 2005
  • Laatst online: 01-07-2023
Tetris en Poker lijken me wel goed te doen, kolonisten en risk zijn wellicht ook leuk maar ben bang dat daar eventueel de geluksfactor teveel mee gaat spelen. (70% geluk en 30% skill dacht ik).

Poker is helemaal hot tegenwoordig, en daar komt ook wel een geluksfactor bij kijken maar als je maar genoeg potjes/tournooien speelt moet er wel de beste uit komen.

Miscchien ook aardig om die ook tegen echte mensen te laten spelen als in jullie vorige contest. (Man against machine poker battle) Misschien willen Marcel Luske en Noah boeken wel :)

Acties:
  • 0 Henk 'm!

  • zonneschijn
  • Registratie: April 2007
  • Laatst online: 29-08 13:34
Tankwars lijkt mij wel leuk om te programmeren, wanneer start de nieuwe challenge?

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Ik weet niet wanneer de eerstvolgende challenge precies is. Maar ik meen het zelfde schema als afglopen jaar (finale ergens in september). Ik vewacht echter niet dat Poker het gaat halen gezien de kruistocht die de overheid tegen internetgokken (lees poker) is begonnen.

Als je de dobbelstenen uitschakelt in Risk (en dat kan prima) wordt het een heel ander verhaal natuurlijk. Daarnaast is de invloed van dobbelstenen op Risk kleiner dan de geluksfactor bij Poker wat mij betreft. En ook bij Risk kan je meerdere potjes spelen. Met of zonder dobbelstenen zal een spel veel minder lang dure, dan wanneer je met je vrienden onder het genot van bier, bitterballen/chips aan een grote tafel bijeen het gure weer buiten probeert te ontlopen. ;)

Ik hoop dat het weer net zo gezellige en leuke challenge wordt als afgelopen jaar. We houden jullie op de hoogte.

Verder zijn we OpenTTD aan het onderzoeken. Ook erg leuk.

while (me.Alive) {
me.KickAss();
}


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 01:39
OpenTTD klinkt inderdaad cool! (Wel lastig coden misschien?)

Acties:
  • 0 Henk 'm!

  • Corniel
  • Registratie: April 2002
  • Laatst online: 31-03 14:56

Corniel

De wereld is gek!

Soultaker schreef op donderdag 31 januari 2008 @ 20:10:
OpenTTD klinkt inderdaad cool! (Wel lastig coden misschien?)
Er is een traject in ontwikkeling dat NoAI heet. Daarmee kan je (op dit moment) alleen met oto's/vrachtwagens in de weer. Dan is het denk ik kwa proggen goed te doen. Nadeel is dat het niet in de main-branch zit op dit moment. Verder weet ik niet hoe af het nu is. Da's een risico.

En op dit moment is het niet duidelijk of het haalbaar is het spel te draaien zonder de officieele/originele graphics. In die zin dat het standaard niet kan, maar al heel veel alternatieve graphics zijn, dus wellicht zouden we daar omheen kunnen werken.

Al met al wat losse eindjes, dus wellicht niet haalbaar. Maar er komt een challenge en ik heb er vertrouwen in dat het een leuke wordt!

while (me.Alive) {
me.KickAss();
}

Pagina: 1 2 Laatste