Programmeringstävling (förslag)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Daniel
Tror jag också.

Jag med, men ibland är det skönt att leva i förnekelse...

Någon som är sugen på att starta en sidotävling med typ okänd upprepad Fångarnas dilemma, eller nått annat enklare spel?

Permalänk

Så svårt är det väl inte att få ihop något? Vi behöver ju inte göra jättesmarta klienter, börja simpelt bara så kan man bygga på med mer avancerade algoritmer senare om man vill.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av HerrEkberg
Så svårt är det väl inte att få ihop något? Vi behöver ju inte göra jättesmarta klienter, börja simpelt bara så kan man bygga på med mer avancerade algoritmer senare om man vill.

Jag håller med, till en början kan man ju göra en bot som bara satsar pengar ifall den har par eller liknande och sedan kan man bygga ut AI:n till en lite smartare.
När det kommer en server som man kan använda i sina testar tror jag att folk blir lite mer motiverade att få nått att funka.

Visa signatur

[u]CPU:[/u] AMD 64 3200+ [u]Mobo:[/u] MSI K8N NEO Platinum [u]Minne:[/u] 2x512mb Micron PC3500 433mhz DDR [u]Grafikkort:[/u] ATI Radeon 9800 Pro [u]Ljudkort:[/u] Soundblaster Audigy 2 ZS [u]HD:[/u] Maxtor 160GB 7200rpm SATA

Permalänk
Medlem

Vi skulle ju behöva kanske minst 9 st tävlande om vi ska köra en turnering, vilket borde vara mest jämt.

Visa signatur

Into the Web Browser for iPhone, http://www.intothewebbrowser.com/

Permalänk
Medlem

Jag håller på med en klient o en server i C# själva skalen är klara med skickade av meddelande osv och har börjat på spellogiken och reglerna på server sidan får nog en fungerade server i morgon...Men jag har några frågor angående protokollet:

När används "301 Already Folded" om man är foldad så lär man ju inte få nått "NEXTTOACT" och då borde väl all trafik in vara "101 Not Your Turn To Act" eller är jag fel ute?

Hur ofta är det bra att man pingar de anslutna? jag kör på var 5:e sekund nu är det för lite?

skickar den ut "NEWGAME" inför varje runda eller bara när man först kommer till ett bord? och om det är varje runda skulle det inte vara bra att skilja på när man kommer till ett bord och när man börjar en rund... och om det bara är när man föst kommer till ett bord borde det inte vara bra om man hade "NEWSTAGE" som startade rundan...

Om man kollar i exemplet i protokollet så skickar inte servern ut "100 OK" statusmeddelande när man har gjort en "ACTION", ska den inte göra det eller är det bara glömt?

När någon blir utslagen, flyttar man player-pos så det blir obrytet eller behåller man det som det var?

Tror det var allt...

Edit:

Hur skickar den ut "NEXTTOACT"? skickar den till alla eller bara till den som ska handla?

1 HOLECARDS TH JH ;; Våra kort 2 NEXTTOACT ... ;; Otherbots tur att agera 3 RAISE ... ;; Otherbots höjde 4 FOLD ;; CowardBot foldar 5 PING ;; Servern pingar oss 6 PONG ;; Vi bekräftar serverns ping 7 NEXTTOACT ... ;; Vår tur att agera 8 CALL ;; Vi väljer att syna OtherBot

Är lite otydligt som ni ser... på rad 2 så skickar den NTA när det är Otherbots tur, men inte när CowardBots tur är...

Edit 2:

När en klient skickar "RAISE" så är amount det man höjer med inte det man lägger in i potten? Alltså om det krävs 200 för att syna och någon skickar "ACTION:RAISE:200" så betyder det att dom höjer med 200 och lägger in 400 totalt... eller har jag fått det om bakfoten då?

Permalänk
Medlem

Hur går det med det här? Ingen som fixat klart en server + (skal)klient så det e lätt o testa själv?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av vb
Hur går det med det här? Ingen som fixat klart en server + (skal)klient så det e lätt o testa själv?

Snacka om att tävlingen dog... I alla fall, jag har satt ihop en server och skalklient nu, bara betor och har långt ifrån buggtestat klart dom, men tror dom ska funka relativt bra... Men om det är någon som hittar någon bugg så får ni gärna säga till...

Det är som sagt skrivet i C# och är kanske lite "för mycket" (flertrådat osv) men tänkte det var lika bra, plus att det nog kommer till användning, i alla fall på serversidan... Jag har gjort det så att det ska vara lätt att bygga in ett turneringssystem (även fast jag inte har gjort det än)... hmm, koden är helt okommenterad så om ni undrar över något så får ni PM:a.

Ni kör det genom att först köra igång servern, sedan klienten, skriver in ip o port (servern går på port 550). När alla som ska vara med i spelet (just nu är det inställt på 4 per bord) kopplat upp, skriver ni "start" i server. Klienten skickar inte iväg några kommandon vad det gäller spelet, däremot allt man skriver in till den skickar den vidare till servern, så på det sättet kan man spela manuellt...

Zip-filen med både servern o klienten hittar ni här: http://www.poker-solitaire.com/pokerbots/Poker.zip

Edit: vissa grejer är fortfarande inte färdiga i servern, bland annat klarar den inte splitpoter... men alla av de viktigaste reglerna ska vara täckta.

Permalänk
Medlem

Testade servern och det går att connecta till den och den skickar ut ping, men så fort jag skriver "start" så stannar den, går upp i 50% CPU och man kan inte skriva i den. Samtidigt slutar den skicka ut ping-kommandon. Är inte så bra på just C# så jag ger mig inte på att felsöka koden.

Permalänk
Medlem

Hmm, ingen anning om vad som kan vara fel... Säker att du har .NET 2.0 installerat?

Om du kör det genom Visual C# debug så kan du pausa programmet när den fastnar i loopen, så ser du var den är...

Permalänk
Medlem

Det fungerade nu när jag körde debug-versionen...
Release-versionen ville inte funka.

Edit: Kan ha upptäckt en bugg till...
När min bot skickar "CALL", och sedan väntar på ett svar, så får den andra boten "STATUS:303"

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Det fungerade nu när jag körde debug-versionen...
Release-versionen ville inte funka.

Edit: Kan ha upptäckt en bugg till...
När min bot skickar "CALL", och sedan väntar på ett svar, så får den andra boten "STATUS:303"

Ja det förklarar varför det inte funka, jag byggde den inte när jag la upp den, så Release version var inte up to date... Jag laddar upp en ny zip fil där det är rätt plus att det finns lite mindre uppdateringar...

hmm, "STATUS:303" det är invalid call, det skickas endast när man redan har lagt in så mycket i potten som det behövs... Antingen är det så att du borde checka (kolla på NEWTOACT meddelandet; om "call-amount" är 0 så kommer "ACTION:CALL" vara ogiltigt, alltså om du får "NEWGAME:X:X:X:0:X", där X är vad som helst, så kan du inte calla...).

Annars om det inte är det, så kan felet var att du ansluter till servern från samma ip och/eller med samma bot id... Ip-nummer borde inte spela någon roll (i alla fall inte i den här frågan, men man vet aldrig) men om det är samma id så kommer den blanda ihop botarna och jag har inte lagt in så den kollar så id# inte är upptaget när man ansluter...

p.s. Rent speltekniskt så callar man ju varje gång man checkar så egentligen så finns det ju inget behov att skilja dom åt i protokollet... men men

edit: Man kan starta även med bara en spelare men det hela funkar lite små dåligt då (av självklara skäl), men det är inga buggar... (bland annat betalar man både big och small blind vilket leder till att man för att calla måste lägga in minus halva big blind och sen så fort man har gjort något i första rundan vinner man potten...)

Permalänk
Medlem

Jojo jag vet att jag ska på 303 och så, det är bara det att om Bot #1 gör en invalid call så får Bot #2 STATUS:303. Jag tror det är nåt index i serverkoden som är lite fel.

Edit: Läste en gång till, det kan vara att båda har samma ID. Testar med ändrat id och ser om samma sak händer.

Edit2: Det var ID som var problemet, jag märkte dock att servern glömmer det första tecknet när den skickar FOLD kommandot.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Jojo jag vet att jag ska på 303 och så, det är bara det att om Bot #1 gör en invalid call så får Bot #2 STATUS:303. Jag tror det är nåt index i serverkoden som är lite fel.

Edit: Läste en gång till, det kan vara att båda har samma ID. Testar med ändrat id och ser om samma sak händer.

Edit2: Det var ID som var problemet, jag märkte dock att servern glömmer det första tecknet när den skickar FOLD kommandot.

Bra att det bara var det, ska fixa en id kontroll snart...

Vad menar du med att den "glömmer första tecknet", menar du när den skickar tillbaka status meddelandet eller när den skickar "FOLD:X:0" till de andra spelarna?

Om ni hittar en bugg när servern värderar de olika händerna så får ni gärna skriva ner vilka kort spelaren hade (alltså både på handen o på bordet, alla 7) och sen de siffror servern skriver ut i konsolen när den värderar korten, alltså det som är enligt den här mallen "*NAMNET*: X, X, X, osv"

Permalänk
Medlem

När den skickar ut FOLD till alla andra, så skickar den "FOLD:1" istället för "?FOLD:1" (? är ett tecken)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
När den skickar ut FOLD till alla andra, så skickar den "FOLD:1" istället för "?FOLD:1" (? är ett tecken)

Förstår fortfarande inte vad du menar...

Menar du checkbyten i början av meddelandet? Alltså <0x0A> i "<0x0A>FOLD:X:0\r\n"? I så fall borde ( ) det inte vara fel...

Tack för att du hjälper till med att hitta buggar!

Permalänk
Medlem

Ja, checkbyten verkar ramla bort i just det kommandot...

Edit: kan ju ha något att köra med att 0x0A == \n... Kanske ramlar bort när jag parsear det... får kolla upp det.
Edit2: Givetvis xD. Jag kör ju readline som läser tills den får ett \n. Får köra en hax där

Permalänk
Medlem

Jag tog mig friheten att göra en uppdaterad version av protokollet, bara lite mindre ändringar (se längst ner) plus att jag förtydligade exemplet lite... Beskrivningen av nya version hittar ni här: http://www.poker-solitaire.com/pokerbots/protocol002.txt

You: Bra att du kom på det... Kan du inte bara först läsa in första tecknet sen köra readline?

Hur går det annars? har du fått upp nått spel?

Permalänk
Medlem

Fick den att fungera. Spelet går det lite långsammare med, det är en utmaning. Min temporära AI callar ända tills den inte kan längre, då foldar den :). Håller på med en mer avancerad som räknar på sannolikheter mm.

Tycker inte att player-pos ska tas bort, då blir det ju svårare att hålla reda på om det är ens egna handlingar som förmedlas i FOLD-kommandon och liknande.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Fick den att fungera. Spelet går det lite långsammare med, det är en utmaning. Min temporära AI callar ända tills den inte kan längre, då foldar den :). Håller på med en mer avancerad som räknar på sannolikheter mm.

Tycker inte att player-pos ska tas bort, då blir det ju svårare att hålla reda på om det är ens egna handlingar som förmedlas i FOLD-kommandon och liknande.

När går spelet långsammare?

player-pos tas bara bort på NEXTTOACT meddelandet (eftersom det nu bara skickas ut till den som är på tur), annars är det kvar. (sen skickar inte servern ut Fold meddelande till den som foldar utan då bara ok meddelandet)...

Snart klar med server som stödjer v. 0.02 av protokollet, lägger upp den senare i kväll...

Någon annan än You som håller på att pilla ihop en bot?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av savje
När går spelet långsammare?

player-pos tas bara bort på NEXTTOACT meddelandet (eftersom det nu bara skickas ut till den som är på tur), annars är det kvar. (sen skickar inte servern ut Fold meddelande till den som foldar utan då bara ok meddelandet)...

Snart klar med server som stödjer v. 0.02 av protokollet, lägger upp den senare i kväll...

Någon annan än You som håller på att pilla ihop en bot?

Ja, fast bara väldigt lätt ännu så länge då jag inte har något internet och har ett j2me-spel som jag skrivit lite på..

Permalänk
Medlem
Citat:

När går spelet långsammare?

Det går långsammare at koda själva speldelen ^^.

Citat:

player-pos tas bara bort på NEXTTOACT meddelandet (eftersom det nu bara skickas ut till den som är på tur), annars är det kvar. (sen skickar inte servern ut Fold meddelande till den som foldar utan då bara ok meddelandet)...

Jaha, trodde det försvann helt.

Och förresten, lösningen på problemet med newline tecknet, som jag använder, är att kolla om det står fold i början INNAN man tar bort det första tecknet. Och filtrera bort alla "tomma" meddelanden.

Permalänk
Medlem

hmm, blev lite jobbigt att få splitpott att fungera som det ska... Fixar det lite senare... Annars finns server som följer protokoll 0.02 att ladda ner här: http://www.poker-solitaire.com/pokerbots/PokerbotServer002.zi...

Permalänk
Medlem

Så, har en första fungerande version av AIn nu också
Bestämde mig för att dumpa sannolikheten och gå på vilka kort man redan har.
Har till och med en "bluff"-funktion (Random raise )

Titta på källkoden här: http://tinyguy.no-ip.org/portfolio/

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Så, har en första fungerande version av AIn nu också
Bestämde mig för att dumpa sannolikheten och gå på vilka kort man redan har.
Har till och med en "bluff"-funktion (Random raise )

Titta på källkoden här: http://tinyguy.no-ip.org/portfolio/

Va kul! hur går det om du sätter två kopior av din bot mot varandra?

Din server var inte så glad att man försökte ladda ner källkoden, sa nått om snöbollar och helvetet

Permalänk
Medlem

Bah. Servern gillar inte mig, den har sina egna idéer om htaccess och chmod...
Om jag kör min bot mot sig själv så blir det genast en massa checks, till den ene av dom bestämmer sig för att göra en call :).

Permalänk
Medlem

Hehe, låter som dödande AI Om du spelar mot den själv då?

Permalänk
Medlem

Ohh, äntligen nått. Ska nog testa att göra något inom detta.

EDIT:
Ähh, fan nu ger jag upp för nu. Suttit i två och en halvtimme bara för att kunna prata med servern... får ju svar men servern nekar alla kommandon med att de är ogiltiga. Gissar att de måste skickas i något slags byte-format eller så?! I så fall ger jag upp då jag har noll koll på det i VB (använder VB6).

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Skogga
Ohh, äntligen nått. Ska nog testa att göra något inom detta.

EDIT:
Ähh, fan nu ger jag upp för nu. Suttit i två och en halvtimme bara för att kunna prata med servern... får ju svar men servern nekar alla kommandon med att de är ogiltiga. Gissar att de måste skickas i något slags byte-format eller så?! I så fall ger jag upp då jag har noll koll på det i VB (använder VB6).

Är ingen hejare på VB men tror detta ska vara rätt (har inte haft möjlighet att testa):

Dim messageToSend As String messageToSend = "LOGIN:Skogga:123:VER002"; Dim NetworkStreamInstance As NetworkStream NetworkStreamInstance = New NetworkStream(Socket) Dim EncodingInstance As Encoding messageToSend += "\r\n" Dim messageInBytes As Byte() messageInBytes = EncodingInstance.GetBytes(messageToSend) Dim messageLength As Byte() messageLength = BitConverter.GetBytes(messageInBytes.Length) NetworkStreamInstance.Write(messageLength, 0, 1) NetworkStreamInstance.Write(messageInBytes, 0, messageInBytes.Length) NetworkStreamInstance.Flush

Hoppas du lyckas lösa det, och att jag inte skrivit till fel version av VB eller nått annat pinsamt...

Permalänk
Medlem

Du har inte möjligtvis en klient för 002-protokollet?
Så att man kan spela mot sin bot, då

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av You
Du har inte möjligtvis en klient för 002-protokollet?
Så att man kan spela mot sin bot, då

Japp nu har jag en klient som använder protokoll 0.02... även en något uppdaterad server: http://www.poker-solitaire.com/pokerbots/PokerBot_ServerKlien...
(om man spelar med en spelare och foldar så hänger sig Servern...)

Hur gick det med klienten skogga?