Avatar billede tuidoi Nybegynder
11. juli 2009 - 23:10 Der er 11 kommentarer og
1 løsning

Multiplayer spil over netværk (Brætspil)

Hej

Jeg er ved at lave et multiplayer brætspil. Jeg er ved at oprette serverdelen dertil. Jeg havde tænkt mig at lave serverdelen i en jar fil for sig. Også hvis en spiller vælger at trykke opret spil, så skal denne server oprettes. Så mit første spørgsmål er:

1. Hvordan kører/loader man en jar fil inden fra et projekt?

Denne jar fil skal så bare være serverdelen og de kan begge hente info herfra, så mit andet spørgsmål er:

2. Hvordan skal jeg sætte denne server op?

Jeg har lige nu gjort sådan at der først oprettes en ServerSocket og derefter en Socket for hver spiller. Er dette den rigtige måde at gøre det på?.

Og hvordan sætter man det nemmest op / hvordan plejer man at gøre?
Avatar billede arne_v Ekspert
12. juli 2009 - 02:05 #1
re 1)

Du har vel en client.jar og en server.jar (og formentligt en common.jar) og så kører man den af jar filerne man skal køre.

re 2)

En enkelt ServerSocket og en Socket per client er næsten givet hvis du bruger TCP og ikke UDP.

Spørgsmålet er om du også vil have en tråd per client.

Det er nemmest men skalerer ikke så godt over lad os sige 50 samtidige clients.
Avatar billede tuidoi Nybegynder
12. juli 2009 - 10:39 #2
1)

Jeg havde tænkt mig at lave en client.jar. Denne skal have en GUI, så brugeren kan se hvad der sker osv. Så havde jeg tænkt mig at der i denne GUI skulle stå noget med "Opret Spil" og når man trykker der skal server.jar eksekveres sådan at serveren så ligger på hans maskine. og han bliver jo autoconnected til localhost. Så er han selv forbundet til sin egen server og serveren venter nu her indtil en udefra er forbundet også. Nu er der to spillere og spillet skal begynde.

Er det nødvendigt med en ny tråd per client, når det kun er et spil for 2spillere?. Eller dvs. man kunne vel bare lave en static variabel der fortæller hvis tur det er også bruge denne til at vide hvornår man vil se på input fra en bestemt bruger så.


2)

Jeg vil gerne køre det på TCP, så er jeg sikker på alle info når frem.. Og når det alligevel er et brætspil, hvor man blot rykker tur for tur uden noget fancy live grafik, der skal streames, så er det vel ligemeget med UDP.
Avatar billede tuidoi Nybegynder
12. juli 2009 - 11:27 #3
Jeg har fået serverdelen til at køre fint nu. Det var en god ide med at lave en ny tråd for hver client.

Men lige nu laver jeg clienten i ét projekt og serverdelen i et andet projekt. Når serverdelen er færdig vil jeg ligge den med som en jar fil hos clienten, så han har mulighed for at køre denne server på hans computer. Så har stadig brug for at vide hvordan jeg starter jar filer fra koden hos clienten. f.eks. hvis han nu trykker på knappen "Opret Spil", så kaldes metoden createGame(), der ville jeg så skrive:

createGame() {
//1.Kør server.jar her
//2.Connect til server med det samme (localhost)
}

Forresten hvad er den der common.jar? bare en der samler client.jar og server.jar?
Avatar billede tuidoi Nybegynder
12. juli 2009 - 20:42 #4
Tror bare jeg kalder main metoden i jar filen istedet. Vil det ikke fungerer ligeså godt?.
Avatar billede arne_v Ekspert
13. juli 2009 - 14:33 #5
Du kan kalde server delen "in process" ved bare at kalde main metoden eller du kan starte en ny process med Runtime exec.
Avatar billede tuidoi Nybegynder
14. juli 2009 - 01:26 #6
Yup Tak.

lig bare et svar.

Jeg har nu lavet det sådan, at jeg har én tråd for hver client, der ligger de indkomne data i en statisk kø, så har jeg main tråden til at håndterer disse inputs efter first in first out princippet.

Dette fungerer ok indtil videre. :) men nu må vi se. Det er første gang jeg laver et spil over netværk, men det er lidt sjovt at rode med :D
Avatar billede arne_v Ekspert
14. juli 2009 - 01:33 #7
svar
Avatar billede arne_v Ekspert
14. juli 2009 - 01:33 #8
Jeg antager at køen er lavet med noget fra java.util.concurrent !?
Avatar billede tuidoi Nybegynder
15. juli 2009 - 16:28 #9
Næh. Adder egentligt bare til en ArrayList. Her tager jeg så bare 0indexet ud og sletter det når jeg er færdig..
Kunne vel gøre det samme med en linkedlist, Men hvad er der egentligt godt ved concurrent? er køretiden hurtigere eller?
Avatar billede arne_v Ekspert
15. juli 2009 - 16:44 #10
Koerene i java.util.concurrent kommer med indbygget funktionalitet til at haandtere samtidigheds problemer.
Avatar billede tuidoi Nybegynder
15. juli 2009 - 17:27 #11
Ja ok, det kan jeg godt se er smart nu hvor jeg kører med input fra 2 tråde.

Hvilken classe skal jeg vælge hvis jeg blot skal bruge den kø som jeg beskriver? altså first in first out?
Avatar billede arne_v Ekspert
15. juli 2009 - 17:35 #12
Hvis jeg skulle gaette: LinkedBlockingQueue
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester