Online Spiel

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

Merier

Betreff: Online Spiel

BeitragSo, März 22, 2009 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hoffe das ihr mir helfen könnt.

Ich habe einen Server und einen Client geschrieben.

Doch irgendwie überträgt er die Coordinaten nicht.

Vllt könnr ihr mir ja sagen wo der Fehler liegt.

Hoffe auf schnelle Antworten!

Server:Code: [AUSKLAPPEN]

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Global myID,count,x#,y#,z#,t#,Pos#,Pos2#

Const NewPlayer   = 1
Const NewPlayer2 = 2
Const Move          = 3

Type Player
   Field ID
   Field Obj
   Field IP
End Type

Global P.Player

Stream = CreateUDPStream(8000)

Cam = CreateCamera()

Cube = CreateCube()
PositionEntity Cube,-10,0,20

Repeat

Pos# = EntityX#(Cube) + EntityY#(Cube) + EntityZ#(Cube) + EntityYaw#(Cube)
      If KeyDown(200)=True Then MoveEntity Cube,0,0,0.2
      If KeyDown(208)=True Then MoveEntity Cube,0,0,-0.2
      If KeyDown(205)=True Then TurnEntity Cube,0,-3,0
      If KeyDown(203)=True Then TurnEntity Cube,0,3,0
Pos2# = EntityX#(Cube) + EntityY#(Cube) + EntityZ#(Cube) + EntityYaw#(Cube)


ant = RecvUDPMsg(Stream)
If ant<>0
   Leng = ReadAvail(Stream)
      If Leng>0
         IN = ReadByte(Stream)
         ip  = UDPMsgIP(Stream)
         
         Select IN
         
         Case NewPlayer
         P = New Player
         P\ID   = ReadInt(Stream)
         P\IP   = ip
         P\Obj = CreateCube()
         
         Case NewPlayer2
         count = count +1
         
         P = New Player
         P\ID   = getID(ip)
         P\IP   = ip
         P\Obj = CreateCube()
         
         For P.Player = Each Player
         WriteByte Stream,NewPlayer
         WriteByte Stream,count
         SendUDPMsg Stream, P\IP , 8000
         
         WriteByte Stream,NewPlayer
         WriteByte Stream,P\ID
         SendUDPMsg Stream, ip , 8000
         Next
         
         Case Move
         
         x# = ReadFloat(Stream)
         y# = ReadFloat(Stream)
         z# = ReadFloat(Stream)
         t# = ReadFloat(Stream)
         
         For P.Player = Each Player
         If P\ip <> ip
         
         WriteByte Stream,Move
         WriteFloat Stream,x#
         WriteFloat Stream,y#
         WriteFloat Stream,z#
         WriteFloat Stream,t#
         SendUDPMsg Stream,P\IP,8000
         
         EndIf
         
         If ip = P\IP
                        PositionEntity P\Obj,x#,y#,z#
                        RotateEntity P\Obj, 0, t#, 0, 1
                       End If
         
         Next
         
         End Select
         
      EndIf
EndIf

  If Pos# <> Pos2#
            For P.Player = Each Player
               WriteByte Stream, Move
               WriteFloat Stream, EntityX#(Cube)
               WriteFloat Stream, EntityY#(Cube)
               WriteFloat Stream, EntityZ#(Cube)
               WriteInt Stream, EntityYaw(Cube)
              SendUDPMsg Stream, P\IP , 8000
            Next
  End If


UpdateWorld()
RenderWorld()

Flip

Until KeyHit(1)
End

Function getID(ipnumber)
   For P.Player = Each Player
      If P\IP   = ipnumber
         Return P\IP
      Else
         Return count
      EndIf
   Next
End Function


Client:
Code: [AUSKLAPPEN]

Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Global myID,count,x#,y#,z#,t#,Pos#,Pos2#

Const NewPlayer   = 1
Const NewPlayer2 = 2
Const Move          = 3

Type Player
   Field ID
   Field Obj
   Field IP
End Type

Global P.Player

Global Stream = CreateUDPStream(8001)

Cam = CreateCamera()

Cube = CreateCube()
PositionEntity Cube,-10,0,20

Repeat

Pos# = EntityX#(Cube) + EntityY#(Cube) + EntityZ#(Cube) + EntityYaw#(Cube)
      If KeyDown(200)=True Then MoveEntity Cube,0,0,0.2
      If KeyDown(208)=True Then MoveEntity Cube,0,0,-0.2
      If KeyDown(205)=True Then TurnEntity Cube,0,-3,0
      If KeyDown(203)=True Then TurnEntity Cube,0,3,0
Pos2# = EntityX#(Cube) + EntityY#(Cube) + EntityZ#(Cube) + EntityYaw#(Cube)


ant = RecvUDPMsg(Stream)
If ant<>0
   Leng = ReadAvail(Stream)
      If Leng>0
         IN = ReadByte(Stream)
         ip  = UDPMsgIP(Stream)
         
         Select IN
         
         Case NewPlayer
         P = New Player
         P\ID   = ReadInt(Stream)
         P\IP   = ip
         P\Obj = CreateCube()
                  
         Case Move
         
         x# = ReadFloat(Stream)
         y# = ReadFloat(Stream)
         z# = ReadFloat(Stream)
         t# = ReadFloat(Stream)
         
          For P.Player = Each Player
                           If InIP <> P\IP Then
                         PositionEntity P\Obj,X#,Y#,Z#
                         RotateEntity P\Obj, 0, Turn, 0, 1
                        End If
                        Next
      
         End Select
         
      EndIf
EndIf

  If Pos# <> Pos2#
            For P.Player = Each Player
               WriteByte Stream, Move
               WriteFloat Stream, EntityX#(Cube)
               WriteFloat Stream, EntityY#(Cube)
               WriteFloat Stream, EntityZ#(Cube)
               WriteInt Stream, EntityYaw(Cube)
              SendUDPMsg Stream, P\IP , 8001
            Next
  End If


UpdateWorld()
RenderWorld()

Flip

Until KeyHit(1)
End


P.S der Code baut etwas auf das Beispiel von BadDeath auf.

blitzuser34

BeitragMo, März 23, 2009 11:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich hab mir zwar deinen Code nicht angesehen, aber vielleicht kannste ja damit was anfangen:

https://www.blitzforum.de/foru...hp?t=30585

Mfg
Blitzuser34

TimBo

BeitragMo, März 23, 2009 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
hat der Client denn schon ein Typ Player ?
Ansonsten schickt er ja nichts.
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.
 

Merier

BeitragMo, März 23, 2009 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja der client und der server haben beide den type Player.
Am anfang werden die erstellt.

TimBo

BeitragMo, März 23, 2009 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
ich sehe kein p.player = new player oder so.
Ich komm mir gerade voll verpielt vor ^^
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

The_Nici

BeitragMo, März 23, 2009 18:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Durchaus, da steht nur P = New Player.
Es muss heissen p.Player = New Player
MfG
 

Merier

BeitragMo, März 23, 2009 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke aber leider sehen sich die Spieler immernoch nicht Crying or Very sad

robotx

BeitragMo, März 23, 2009 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube die Ports stimmen nicht. Server auf Port 8000 und Clients senden an Port 8001, sodass der Server nicht davon mitbekommt.
www.botbomb.robotzgames.de
www.robotzgames.de

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group