Ich habe ein Problem mit UDP

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

coolo

Betreff: Ich habe ein Problem mit UDP

BeitragSo, Jan 27, 2008 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo an alle,

Als kleine Online Übung, um zu sehen was BB alles im Online Bereich zu bieten hat, möchte ich jetzt mein Pong einen Online Modus kreieren. Das bewegen der einzelnen Figuren geht schon, aber beim Ball, gehts nicht, Mein Problem, der Ball wird durch den Zufalls Winkel anders herum geschleudert.

Code sagt mehr als 1000 Wörter:
Code: [AUSKLAPPEN]

Cls
Flip
Delete Each ball
b=New ball
b\x#=320
b\y#=240
b\angle#=Rand(1,360)
b\jsp#=0
b\speed#=Rand(4,6)
Print "Wähle [1] um das Spiel als Host zu starten."
Print "Wähle [2] um das Spiel als Client zu starten.";Client ist der PC wo sich mit einem Host verbindet
Print "Wähle [3] um das Spiel zu Verlassen."
FlushKeys
wahl_nummer = Input("Ihre Wahl:") ;jetzte nach der Wahl des Players fragen
If wahl_nummer = 1;wenn man 1 gewählt hat [Host]
   
   sendeport = 8000 ;ist der Port womit man dann Daten senden kann
   empfangsport = 8001;ist der Port womit man dann Daten empfangen kann
    stream = CreateUDPStream(empfangsport) ;den UDP-Stream erstellen um Daten zu empfangen
   If stream = 0 ;wenn der Stream nicht erstellt worde konnte
        Print "Konnte Stream nicht erstellen !"
        Print "Weiter mit Taste!"
        WaitKey
        End
   Else ;wenn der Stream erstellt worde konnte
        Print "Spiel als Host gestartet"
        Print "Deine IP findest du unter *www.wasistmeineip.de*,"
        Print "diese braucht der Client um mit dir zu verbinden!"
        Print "Warten auf den Client..."
      Repeat ;solange warten bis der Client sich mit dem Host verbunden hat
         ip = RecvUDPMsg(stream);wenn eine nachricht empfangen wird...
         If KeyHit(1) Then End
      Until ip <> 0
      WriteByte stream,1;eine anwort senden
      SendUDPMsg stream,ip,sendeport
      
            ;nun noch die daten vom anderen player angeben
      player1x = 0;die x possition
      player1y = 0;die y possition
      
      player2x = 0;die x possition
      player2y = 200
      
   EndIf
   
ElseIf wahl_nummer = 2;wenn man 2 gewählt hat [Client]
   
   ip_nummer$ = Input("Die IP vom Host: ") ;nach der IP fragen...
   ip = IntegerIP(ip_nummer$)            ;IP umwandeln...
   
   sendeport = 8001 ;ist der Port womit man dann Daten senden kann
   empfangsport = 8000;ist der Port womit man dann Daten empfangen kann
    stream = CreateUDPStream(empfangsport) ;den UDP-Stream erstellen um Daten zu empfangen
   If stream = 0 ;wenn der Stream nicht erstellt worde konnte
        Print "Konnte Stream nicht erstellen !"
        Print "Weiter mit Taste!"
        WaitKey
        End
   Else ;wenn der Stream erstellt worde konnte
        WriteByte stream,1 ;1 senden damit der Host weis das ein Client da ist
        SendUDPMsg stream,ip,sendeport ;die nachricht senden
      
      Delay 1000;1sekunde lang warten und dann prüfen ob der host da ist
      
        If RecvUDPMsg(stream) Then
         empfangen = ReadByte(stream)
            If empfangen = 1;wenn es 1 ist dann hat man das spiel als client gestartet
            Print "Spiel als Client gestartet"
            
            ;nun noch die daten vom anderen player angeben
            player1x = 0;die x possition
            player1y = 0;die y possition
            
            player2x = 0;die x possition
            player2y = 200;die y possition
            
            Else
            Print "Konnte Spiel nicht als Client starten!"
            Print "Weiter mit Taste!"
            
            CloseUDPStream stream ;stream beenden
            End                   ;alles schließen
         EndIf
        EndIf

   EndIf
EndIf
Repeat
Cls
   If MouseXSpeed()<>0 Then
WriteByte  stream,1
WriteInt stream, MouseX()
SendUDPMsg stream,ip,sendeport
EndIf
If wahlnummer=2 Then
For b=Each ball
   If b\jsp#<b\speed# Then b\jsp#=b\jsp#+0.2
   b\x# = b\x# + Cos( b\angle# ) * b\jsp#
   b\y# = b\y# + Sin( b\angle# ) * b\jsp#
   If  b\y# < 0 Then;b\y# > 480 Or
      b\speed#=b\speed#+0.1
      count=count+10
      particle(b\angle#,b\x,b\y)
      b\angle# = 360 - b\angle#
      
   ElseIf ImagesCollide(player,x,460,0,kugel,b\x#,b\y#,0) Then
      b\speed#=b\speed#+0.1
      count=count+10
      particle(b\angle#,b\x,b\y)
      b\angle# = 360 - b\angle#
      If gi<>0 Then abweichung=2*((x+45)-b\x) Else abweichung=2*((x+90)-b\x)
      ;vor=b\angle#
      b\angle#=b\angle#-abweichung
      If vor-b\angle=<0 Then b\angle#=b\angle#+180
      b\y=450
      
   ElseIf b\y# > 460 And besieg=0 Then
      newlog("Dir ist der Ball heruntergefallen")
      punkt=punkt+1
      b\x#=320
      b\y#=240
      b\angle#=Rand(1,360)
      b\jsp#=0
      b\speed#=Rand(4,6)
      particle(90,b\x,b\y)
   ElseIf besieg>0 And b\y>480 Then
      b\speed#=b\speed#+0.1
      count=count+10
      particle(b\angle#,b\x,b\y)
      b\angle# = 360 - b\angle#
   EndIf
   If b\x# > 640 Or b\x# < 0 Then
      b\speed#=b\speed#+0.2
      count=count+10
      b\angle# = 180 - b\angle#   
      particle(b\angle#,b\x,b\y)
   EndIf
   ;If b\angle#>=360 Then b\angle#=1
   ;If b\angle#=0 Then b\angle#=259
   particle2(b\angle#-180,b\x+13,b\y+12)
   DrawImage kugel,b\x#,b\y#
   WriteByte  stream,2
   WriteString stream, b\x+":"+b\y
   SendUDPMsg stream,ip,sendeport
   
Next
EndIf
If RecvUDPMsg(stream)
   nummer = ReadByte(stream)
   Select nummer
      Case 1
         player2x = ReadInt(stream)
      Case 2
         For b=Each ball
            bk$=ReadString(stream)
            x=Right(bk$,Instr(bk$,":"))
            y=Left(bk$,Instr(bk$,":"))
            DrawImage kugel,x,y
         Next
   End Select
EndIf


DrawImage player,MouseX(),player1y
DrawImage player,player2x,player2y
Flip
Until KeyHit(1)
End
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat
  • Zuletzt bearbeitet von coolo am Mo, Jan 28, 2008 20:26, insgesamt einmal bearbeitet
 

Dreamora

BeitragMo, Jan 28, 2008 0:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wo sendest du den bewegungsvektor für den BAll oder seinen winkel? Du kannst auf der anderen seite nur nutzen was da ist und da man normalerweise approximieren muss wo das objekt im nächsten frame sein wird (das netz ist dazu zu langsam, das ist nur alle 2-5 frames mit neuen daten da!), muss man auch bewegungsvektoren und richtungen haben. sonst geht da nix.

Und unterlass künftig solche Threadtitel sonst kannst du ihnen im Trash nachtrauern. Erwarte insofern eine anpassung des namens oder werde das morgen mittag nachholen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

coolo

BeitragMo, Jan 28, 2008 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Eben, das ist das Problem, Bei jedem wird der Ball anders berechnet.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat
 

Dreamora

BeitragMo, Jan 28, 2008 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
dann syncronisier die daten. Sprich send den winkel des balles ebenfalls oder den bewegungsvektor / beschleunigungsvektor.
das solltest du bei den paddels auch machen, dann teleportieren sie nimmer so übel (was sie sonst über inet machen werden)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group