Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Problem in der Schussübertragung im Netzwerk

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 14.12.2005, 22:41    Titel: Problem in der Schussübertragung im Netzwerk Antworten mit Zitat

Hallo!

Ich habe eine problem bei der Übertragung von Schüssen in einem Netzwerkspiel mit 2 Spielern. Hier der Code:

Code:
'$INCLUDE: "SDL/SDL_NET.bi"
DECLARE SUB Connect(socket as tcpsocket,nummer)
TYPE schusstyp
    x AS integer
    y AS integer
    ex AS integer
    r AS integer
END TYPE
TYPE spieler
    xpos AS integer
    ypos AS integer
    schuss(5) AS schusstyp
    schussnr AS integer
    xr AS integer
    yr AS integer
END TYPE

SCREEN 18,8,3,0
DIM gamer(2) AS spieler
DIM sock AS tcpsocket
CALL connect(sock, nr)
IF nr=1 THEN gegi=2
IF nr=2 THEN gegi=1
gamer(1).xpos=10
gamer(1).ypos=10
gamer(2).xpos=400
gamer(2).ypos=400
DIM SHARED bg AS integer'Globale Variable: bereits geschossen
e=0
WHILE e=0
    IF TIMER-t#>0.13 THEN
       GOSUB senden
       t#=TIMER
       bg=0
       FOR x=1 TO 2
        FOR zahler=1 TO 5
         IF gamer(x).schuss(zahler).ex>0 THEN
          gamer(x).schuss(zahler).x=gamer(x).schuss(zahler).x+gamer(x).schuss(zahler).r*30
          gamer(x).schuss(zahler).ex=gamer(x).schuss(zahler).ex-1
         END IF
        NEXT
       NEXT
    END IF   
    'gamer(nr).schussnr=0
    IF MULTIKEY(&h39) AND bg=0 THEN
       FOR zahler=1 TO 5
           IF gamer(nr).schuss(zahler).ex=0 AND bg=0 THEN
               gamer(nr).schuss(zahler).ex=20
               gamer(nr).schuss(zahler).x=gamer(nr).xpos
               gamer(nr).schuss(zahler).y=gamer(nr).ypos
               gamer(nr).schuss(zahler).r=-(nr-3)-nr
               gamer(nr).schussnr=zahler
               bg=bg+1
               EXIT FOR
            END IF
       NEXT
    END IF
    IF MULTIKEY(&h4B) THEN
       gamer(nr).xr=1
       gamer(nr).xpos=gamer(nr).xpos-3
    ELSEIF MULTIKEY(&h4D) THEN
       gamer(nr).xr=2
       gamer(nr).xpos=gamer(nr).xpos+3
    ELSE
       gamer(nr).xr=0
    END IF
    IF MULTIKEY(&h48) THEN
       gamer(nr).yr=1
       gamer(nr).ypos=gamer(nr).ypos-3
    ELSEIF MULTIKEY(&h50) THEN
       gamer(nr).yr=2
       gamer(nr).ypos=gamer(nr).ypos+3
    ELSE
       gamer(nr).yr=0
    END IF
    gamer(gegi).xpos=gamer(gegi).xpos+gamer(gegi).xr*3
    gamer(gegi).ypos=gamer(gegi).ypos+gamer(gegi).yr*3
    IF MULTIKEY(&H01) THEN e=1
   
    dummy$=INKEY$
    IF gamer(1).xpos<1 THEN gamer(1).xpos=1
    IF gamer(2).xpos<1 THEN gamer(2).xpos=1
    IF gamer(1).ypos<1 THEN gamer(1).ypos=1
    IF gamer(2).ypos<1 THEN gamer(2).ypos=1
    SCREENLOCK
    CLS
    PRINT bg
    PRINT gamer(nr).schussnr
    CIRCLE (gamer(1).xpos, gamer(1).ypos),15,2,,,,F
    CIRCLE (gamer(2).xpos, gamer(2).ypos),15,3,,,,F
    FOR x=1 TO 2
     FOR zahler=1 TO 5
         IF gamer(x).schuss(zahler).ex>0 THEN
             LINE (gamer(x).schuss(zahler).x, gamer(x).schuss(zahler).y)-(gamer(x).schuss(zahler).x+30,gamer(x).schuss(zahler).y+10),1,BF
         END IF
     NEXT
    NEXT
    SCREENUNLOCK
    SLEEP 10
WEND

END

senden: 
   var1=gamer(nr).xpos
   var2=gamer(nr).ypos
   var3=gamer(nr).xr
   var4=gamer(nr).yr
   var5=bg
   SDLNet_TCP_Send(sock, @var1, 2 )
   SDLNet_TCP_Send(sock, @var2, 2 )
   SDLNet_TCP_Send(sock, @var3, 2 )
   SDLNet_TCP_Send(sock, @var4, 2 )
   SDLNet_TCP_Send(sock, @var5, 2 )
   IF var5<>0 THEN
       var9=gamer(nr).schussnr
       var6=gamer(nr).schuss(var9).x
       var7=gamer(nr).schuss(var9).y
       var8=gamer(nr).schuss(var9).r
       SDLNet_TCP_Send(sock, @var6, 2 )
       SDLNet_TCP_Send(sock, @var7, 2 )
       SDLNet_TCP_Send(sock, @var8, 2 )
       SDLNET_TCP_Send(sock, @var9, 2 )
   END IF
   var1=0:var2=0:var3=0:var4=0:var5=0:var6=0:var7=0:var8=0:var9=0
   SDLNet_TCP_Recv(sock, @var1, 2 )
   SDLNet_TCP_Recv(sock, @var2, 2 )
   SDLNet_TCP_Recv(sock, @var3, 2 )
   SDLNet_TCP_Recv(sock, @var4, 2 )
   SDLNet_TCP_Recv(sock, @var5, 2 )
   IF var5<>0 THEN
      SDLNet_TCP_Recv(sock, @var6, 2 )
      SDLNet_TCP_Recv(sock, @var7, 2 )
      SDLNet_TCP_Recv(sock, @var8, 2 )
      SDLNet_TCP_Recv(sock, @var9, 2 )
      gamer(gegi).schussnr=var9
      gamer(gegi).schuss(var9).ex=20
      gamer(gegi).schuss(var9).x=var6
      gamer(gegi).schuss(var9).y=var7
      gamer(gegi).schuss(var9).r=var8
   END IF
   gamer(gegi).xpos=var1
   gamer(gegi).ypos=var2
   IF var3=1 THEN gamer(gegi).xr=-1
   IF var3=2 THEN gamer(gegi).xr=1
   IF var3=0 THEN gamer(gegi).xr=0
   IF var4=1 THEN gamer(gegi).yr=-1
   IF var4=2 THEN gamer(gegi).yr=1
   IF var4=0 THEN gamer(gegi).yr=0
RETURN

SUB Connect(socket as tcpsocket,nummer)
 DIM dummy AS string
 IF SDLNet_Init() <> 0 THEN 
     PRINT "Fehler"
     SLEEP
     END
 END IF
 PRINT "Made by DGR!"
 PRINT "1-Server"
 PRINT "2-Client"
 DO
     dummy$=INKEY$
     nummer=VAL(dummy$)
     IF dummy$=CHR$(27) THEN END
 LOOP UNTIL nummer=1 OR nummer=2
 DIM sock AS tcpsocket'Socket einstellen
 DIM sockclient AS tcpsocket
 DIM ip AS ipaddress'Variable IP vom Typ IP Addresse
 DIM zahler AS integer
 IF nummer=1 THEN 
    SDLNet_Write32( INADDR_ANY, @ip.host )
    SDLNet_Write16( 5678, @ip.port )
    sock = SDLNet_TCP_Open( @ip )'TCP Verbindung öffnen, in den Socket schreiben
    zahler=1
    PRINT "Warte auf Client..."
    WHILE sockclient = NULL
       IF INKEY$=CHR$(27) THEN END
       sockclient = SDLNet_TCP_Accept( sock )
       SLEEP 5
    WEND
 END IF
 IF nummer=2 THEN
    DIM host AS string
    INPUT "IP Addresse des Hostes: ", host$
    SDLNet_ResolveHost( @ip, host$, 5678 )
    sockclient = SDLNet_TCP_Open( @ip )
 END IF
 socket=sockclient
END SUB


Kann mir jemand sagen, wieso immer nur von einem Spieler zum anderen, aber nicht umgekehrt Schüsse übertragen werden?

/EDIT: da so anscheinend niemand etwas herausfindet: durch tests habe ich herausbekommen, das die y koordinate der schüsse korrekt übertragen wird. Probleme gibt es bei der x Koordinate - sie beträgt stets so was um die 39321409
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz