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:

Netzwerkübertragung die nicht funktioniert

 
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: 28.12.2005, 22:41    Titel: Netzwerkübertragung die nicht funktioniert Antworten mit Zitat

Hallo!

Ich habe folgendes programmiert:

Code:
'$INCLUDE: "SDL/SDL_NET.bi"
DECLARE SUB Connect(socket AS tcpsocket,nummer)
DECLARE SUB Net(BYVAL param AS integer)
OPTION EXPLICIT
TYPE schusstyp
    x AS integer
    y AS integer
    ex AS integer
    xr AS integer
    yr AS integer
END TYPE
TYPE spieler
    xpos AS integer
    ypos AS integer
    leben AS integer
    schuss(6) AS schusstyp
    schussnr AS integer
    xr AS integer
    yr AS integer
END TYPE

SCREEN 18,8,3,0
DIM SHARED gamer(2) AS spieler
DIM SHARED gamer2(2) AS spieler
DIM SHARED sock AS tcpsocket
DIM SHARED gegi, nr
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
gamer(1).leben=5
gamer(2).leben=5
DIM SHARED bg AS integer'Globale Variable: bereits geschossen
DIM e AS integer
DIM spielerzahl, zahler, x AS integer
DIM t#, t2#,vzeit#
DIM dummy$
e=0
t#=TIMER
t2#=TIMER
DIM SHARED muthandle AS integer
muthandle=MUTEXCREATE
DIM thread_nets AS integer
DIM thread_netc AS integer
'DIM dumdummy AS integer
'dumdummy=0
thread_nets=THREADCREATE(@Net, 0)
WHILE e=0
    MUTEXLOCK muthandle
    IF MULTIKEY(&h39) AND bg=0 THEN
       FOR zahler=1 TO 5
          WITH gamer(nr).schuss(zahler)
           IF .ex<5 AND bg=0 THEN
               .ex=50
               .xr=gamer(nr).xr
               .yr=gamer(nr).yr
               .x=gamer(nr).xpos+gamer(nr).schuss(zahler).xr*2
               .y=gamer(nr).ypos+gamer(nr).schuss(zahler).yr*2
               gamer(nr).schussnr=zahler
               bg=bg+1
               EXIT FOR
            END IF
           END WITH
       NEXT
    END IF
    IF MULTIKEY(&h4B) AND gamer(nr).xr>-50 THEN
       gamer(nr).xr=gamer(nr).xr-3
    ELSEIF MULTIKEY(&h4D) AND gamer(nr).xr<50 THEN
       gamer(nr).xr=gamer(nr).xr+3
    END IF
    gamer(nr).xr=gamer(nr).xr*0.96
    IF MULTIKEY(&h48) AND gamer(nr).yr>-50 THEN
       gamer(nr).yr=gamer(nr).yr-3
    ELSEIF MULTIKEY(&h50) AND gamer(nr).yr<50 THEN
       gamer(nr).yr=gamer(nr).yr+3
    END IF
    gamer(nr).yr=gamer(nr).yr*0.96
    MUTEXUNLOCK muthandle
    vzeit#=TIMER-t2#
    t2#=TIMER
    MUTEXLOCK muthandle
    gamer(nr).xpos+=gamer(nr).xr*vzeit#*7
    gamer(nr).ypos+=gamer(nr).yr*vzeit#*7
    gamer(gegi).xpos+=gamer(gegi).xr*vzeit#*7
    gamer(gegi).ypos+=gamer(gegi).yr*vzeit#*7
    FOR x=1 TO 2
     FOR zahler=1 TO 5
      WITH gamer(x).schuss(zahler)
       IF .ex>0 THEN
        .x+=.xr*vzeit#*7
        .x+=.yr*vzeit#*7
        .ex-=vzeit#*ABS(.xr)
       END IF
      END WITH
     NEXT
    NEXT
    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
   
    MUTEXUNLOCK muthandle
    IF MULTIKEY(&H01) THEN e=1
    dummy$=INKEY$
   
    SCREENLOCK
    CLS
    MUTEXLOCK muthandle
   
    PRINT "Punkte Spieler 1: "+STR$(gamer(1).leben)
    PRINT "Punkte Spieler 2: "+STR$(gamer(2).leben)
    PRINT gamer(1).schuss(1).ex
    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
         WITH gamer(x).schuss(zahler)
          IF .ex>0 THEN
              LINE (.x, .y)-(.x+.xr,.y+.yr),1,,65535
              LINE (.x+1, .y)-(.x+1+.xr,.y+.yr),1,,65535
          END IF
         END WITH
      NEXT
     NEXT
    SCREENUNLOCK
    MUTEXUNLOCK MUTHANDLE
    SLEEP 10
WEND

CLS
MUTEXDESTROY muthandle
THREADWAIT thread_NETs
THREADWAIT thread_NETc

END

SUB Net(BYVAL param AS integer)
 DIM var1, var2, var3, var4, var5, var6, var7, var8, var9, varA AS integer
 DIM x, zahler,spielerzahl AS integer
 WHILE param=0
   MUTEXLOCK muthandle
   var1=gamer(nr).xpos
   var2=gamer(nr).ypos
   var3=gamer(nr).xr+100
   var4=gamer(nr).yr+100
   var5=bg
   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).xr+100'x Richtung Schuss zwischenspeicher
       varA=gamer(nr).schuss(var9).yr+100'y Richtung Schuss zwischenspeicher
   END IF
   bg=0
   MUTEXUNLOCK muthandle
   SDLNet_TCP_Send(sock, @var1, LEN(var1) )
   SDLNet_TCP_Send(sock, @var2, LEN(var2) )
   SDLNet_TCP_Send(sock, @var3, LEN(var3) )
   SDLNet_TCP_Send(sock, @var4, LEN(var4) )
   SDLNet_TCP_Send(sock, @var5, LEN(var5) )
   IF var5<>0 THEN
       SDLNet_TCP_Send(sock, @var6, LEN(var6) )
       SDLNet_TCP_Send(sock, @var7, LEN(var7) )
       SDLNet_TCP_Send(sock, @var8, LEN(var8) )
       SDLNET_TCP_Send(sock, @var9, LEN(var9) )
       SDLNet_TCP_Send(sock, @varA, LEN(varA) )
   END IF
   var1=0:var2=0:var3=0:var4=0:var5=0:var6=0:var7=0:var8=0:var9=0:varA=0
   SDLNet_TCP_Recv(sock, @var1, LEN(var1) )
   SDLNet_TCP_Recv(sock, @var2, LEN(var2) )
   SDLNet_TCP_Recv(sock, @var3, LEN(var3) )
   SDLNet_TCP_Recv(sock, @var4, LEN(var4) )
   SDLNet_TCP_Recv(sock, @var5, LEN(var5) )
   IF var5<>0 THEN
      SDLNet_TCP_Recv(sock, @var6, LEN(var6) )
      SDLNet_TCP_Recv(sock, @var7, LEN(var7) )
      SDLNet_TCP_Recv(sock, @var8, LEN(var8) )
      SDLNet_TCP_Recv(sock, @var9, LEN(var9) )
      SDLNet_TCP_Recv(sock, @varA, LEN(varA) )
   END IF
   MUTEXLOCK muthandle
   IF var5<>0 THEN
      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).xr=var8-100
      gamer(gegi).schuss(var9).yr=varA-100
   END IF
   gamer(gegi).xpos=var1
   gamer(gegi).ypos=var2
   gamer(gegi).xr=var3-100
   gamer(gegi).yr=var4-100
   FOR x=1 TO 2
    FOR zahler=1 TO 5
     WITH gamer(x).schuss(zahler)
      IF .ex>0 THEN
        FOR spielerzahl=1 TO 2
         IF ABS(.x-gamer(spielerzahl).xpos)<20 AND ABS(.y-gamer(spielerzahl).ypos)<20 THEN
          gamer(spielerzahl).leben=gamer(spielerzahl).leben-1
          .ex=0
         END IF
        NEXT
      END IF
     END WITH
    NEXT
   NEXT
   MUTEXUNLOCK muthandle
   SLEEP 100
 WEND
END SUB

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 )
    SDLNet_ResolveHost(@ip.host, NULL, 5678)
    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


Leider konnte mit den Threads mein Problem nicht beseitigt werden: das bei unterschiedlichen Spielern unterschiedliche Daten vorhanden sind. weinen Kann mir jemand sagen, wie ich den Code verändern muss, damit bei beiden Spielern die gleichen Daten vorhanden sind?

Ein zweites Problem sind die Schüsse, sie fliegen recht komisch, und außerdem fliegen sie nicht richtig. Eigentlich hatte ich mir gedacht, das sie immer in die Richtung fliegen, in die die Kugel auch fliegt. Leider funktioniert das nach unten links sehr schwer. Kann mir jemand sagen, was dort falsch ist?
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