Kryds og bolle med Java FX og TCP

Tags:    java network

Hej
Jeg er igang med et lille projekt, hvor jeg bygger et kryds og bolle spil i Java og med Java FX som GUI.
Jeg har allerede nu bygget programmet således at det fungerer når begge spillere sidder på den samme computer og her fungerer det.
Jeg har dog lidt problemer med at få det til at køre henover netværket, da jeg gerne vil have at serveren er ansvarlig for spillet og klienterne sender så koordinaterne til den placering de vil bruge. Serveren skal så placere spilbrikken i et multidimensionelt array og kontrollere om der kan spilles videre (Dette håndteres allerede af min Gameboard klasse). Når brikken er placeret skal den anden klient have besked om at brikken er placeret, samt hvor den er placeret, således at man kan se hvor modstanderen har placeret sin brik.
Jeg sidder dog fast på det punkt hvor jeg skal have den til at sætte spillet igang.
Fold kodeboks ind/udJava kode 


Efter hvad jeg kan læse mig frem til på nettet, så skal jeg inden i ovenstående try-block have en try-block mere for at håndtere kørslen af spillet.
Kan også læse mig til at spillet skal køre som sin egen tråd, men kan ikke se hvad helt præcist skal ske for at det kommer til at virke.
Hele sourcecode til mit projekt kan ses her: https://github.com/KHIT93/JavaTCPTickTackToe




2 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Før vi kommer ind på tråde vil jeg lige give nogle overvejelser til strukturen. Mit forslag er at Spiller (her tænker jeg på interaktionen med en fysisk spiller) og Spillet er så afkoblede fra hinanden som muligt. Det er min erfaring det gøre det nemmere.

Så det eneste en Spiller kan gøre er at lave Ændringer til Spillet, samt aflæse den nuværende tilstand af Spillet. F.eks. kunne en Ændring være at placere en brik.

Så bliver den eneste forskel på en lokal spiller og en netværksspiller, at den ene kommunikerer gennem en GUI og den anden gennem en netværksforbindelse. Begge spiller generer Ændringer som du påvirker Spillet med.

Så måden et multiplayer spil startes på er:

1. Server "lytter" på en Socket.
2. Klient forbinder med Socket.
3.a: Server opretter en FjernSpiller med Socketen som kører i en tråd og starter så også en GUISpiller.
3.b: Client opretter en FjernSpiller med Socketen som kører i en tråd og starter så også GUISpiller.
4. Begge fortsætter nu spillet som almindelig.

Så mit forslag er at din try bliver noget lignende (har tilføjet kommentarer til nogle af de nye dele):

Fold kodeboks ind/udJava kode 


Så skal du lave RemotePlayer som kører skal være Runnable for at blive startet i en tråd. Her er noget løst kode der viser hvordan det måske ville virke.

Fold kodeboks ind/udJava kode 




Indlæg senest redigeret d. 31.05.2017 17:12 af Bruger #14645
Et alternativ til at benytte en ServerSocket vil være at oprette en WebsocketServer i stedet og så kører det hele igennem denne.. Fordelen vil dette vil er følgende.

- Personligt syntes jeg det er nemmere at sende en WebserverSocket op i forhold til en ServerSocket
- Det giver mulighed for at kører spillet igennem flere forskellige interfaces f.eks. en html5 webapp.


Bare lige et hurtigt input fra siden :)





t