11. februar 2007 - 21:29Der er
7 kommentarer og 1 løsning
RMI og afvent respons
Jeg er igang med at lave et netværksspil som er tur-baseret.
Jeg er nu kommet til at runden skal foretages, og hver spiller i List<PlayerInterface> skal tage deres tur.
Det har jeg tænkt mig at gøre i en for-løkke. Men spilleren i den anden ende skal have tid til at overveje sit træk.
Hvordan kan jeg lave det fornuftigt, så for-løkken venter i 60 sekunder, før trækket skippes og næste spiller for sin tur.
Jeg har prøvet at lave en funktion hos spilleren der først returnere når spilleren har indtastet brugerinput, men min løkke springer over med det samme, på trods af manglene retur-værdi
Min kode skulle gerne ligne nedenstående
Player playerUp = null;
//Denne funktion bliver kaldt af serveren public void tur() { for (alle spillere i Listen players) { player.sendBesked("din tur"); playerUp = player; //efter et minut uden respons skal der springes videre i løkken } }
//Denne bliver kaldt over RMI af spiller public void move() { if (playerUp == spilleren der køre funktionen) { //bevæg spillers brik } }
Hvordan kan jeg lave det.. Jeg fandt i øvrigt ud af at rmi godt kan afvente resultat.. Det var bare mig der havde lavet en dumme-fejl (!= i stedet for ==). Det gør det hele lidt forvirrende. :o)
Jeg har nu lavet en timer der printer retur-værdien fra playeren ud. Den timer starter jeg så i min for-løkke. Men hvordan får jeg forløkken til at afvente et resultat. Skal jeg til at rode med thread.sleep og interrupt ?
Ahaaa.. Nu forstår jeg.. Jeg laver det på den måde at
Timeren stopper hvis værdien "move" er andet end null, og playerUp sættes til næste spiller. Hvis timeren når at løbe ud, sættes playerUp til næste spiller..
Dette foretages indtil alle spillere har taget deres tur..
Det skal nok virke. Der er selvfølgelig en masse andre faktorer, men jeg er for træt til at nævne det nu. Jeg vil ind og sove. Læg et svar, så har du ekstra points i morgen
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.