Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 14.12.2005, 22:41 Titel: Problem in der Schussübertragung im Netzwerk |
|
|
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 |
|