Multiplayer Kugel

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

dreamfile

Betreff: Multiplayer Kugel

BeitragDo, Jan 22, 2004 9:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin Leute,

habe bis jetzt echt viel Hilfe von euch per PN bekommen und ein
echt grosses Danke an alle. Habe die Codes auch lange, lange, lange
untersucht und versucht was draus zu lernen. Am besten waren die
Codes "Client und Server".
Ich glaube ich war zu lange dran gesessen und habe den riesen Knopf im Kopf.

Mein Problem ist das umsetzten von 2D auf 3D bewegungen. Das heisst:
Es soll sich eine einfacher Körper in einem Raum bewegen und diese
Bewegung weitergegeben werden an die anderen Spieler, wobei es ja besser wäre es nur an den Server weiterugeben un der das dann an die Spieler schickt.

BITTE BITTE HELFT MIR !!!

Ich schreibe euch auch ganz gross ins Speil oder bezahle dafür.

Danke
Grüschen Sascha

http://www.dreamfile.net/hydroworld.zip Zum Spiel
Der Neue
 

BIG BUG

BeitragDo, Jan 22, 2004 11:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst doch auch deine Kugel absolut positionieren. So brauchst du doch nur noch zusätzlich zu deinen 2D-Beispielen die Z-Koordinate und evtl. roll-/yaw-Werte mit übermitteln.
Ist dann zwar keine "saubere" Bewegung, aber für den Anfang sollte das doch reichen...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

dreamfile

BeitragDo, Jan 22, 2004 11:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit kann ich das auch nachvollziehen aber ich habe ständig einen Fehler drin. Ich versuchs auf jeden Fall weiter.

THX Sascha
Der Neue
 

dreamfile

BeitragDo, Jan 22, 2004 11:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Sorry für den langen Code:
Code: [AUSKLAPPEN]
Global info1$="HYDRORACE Country V3"
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
AmbientLight 255, 255, 255
planetex=LoadTexture( "data/pic/plane.bmp" )

camera=CreateCamera()
PositionEntity camera, 0,200,-200
CameraClsColor camera,5,5,30



Global eingabe$                     ;Variable für Input Aktionen
Global ausgabe                     ;Variable für Ausgaben von FUnktionen
Global host                        ;Ist man der Host?
Global mynum                     ;Welche Multiplayer Nummer  hat man?
Global myplayer                     ;Welchen Spieler aus dem Array steuert man?
myplayer = -1                     ;Myplayer auf -1 sonst wäre man direkt Spieler mit nr. 0!

Const pl_c=50                     ;Maximale Player Anzahl (player count)
Dim pl_on(pl_c)                     ;Player Da?
Dim pl_rgb(pl_c)                  ;Color
Dim pl_x(pl_c)                     ;X Pos
Dim pl_y(pl_c)                     ;Y Pos
Dim pl_z(pl_c)                     ;z Pos


Dim msg$(10)                     ;Nachrichten

For i = 0 To pl_c                  ;Schleife zum setzen der Player Werte
pl_on(i)=0                        ;
pl_rgb(i)=1                        ;Farbe
pl_x(i)=10/2                     ;X In Mitte
pl_y(i)=10/2                     ;Y In Mitte
pl_z(i)=10/2                     ;z In Mitte
Next                           ;


;---------Connecten/Hosten?!
StopNetGame
Print "Willkommen zum Hydroworld Multiplayer Test! "+vers$
.start_joinorhost
Print " "
eingabe$ = Input("Möchtest du joinen oder hosten? Gebe J oder H ein! Oder x zum Beenden!")
If eingabe$ = "x" Then End
If eingabe$ <> "J" And eingabe$ <> "H" Then Print "Falsche Eingabe!" Gosub start_joinorhost
If eingabe$ = "H" Then Gosub start_host
If eingabe$ = "J" Then Gosub start_join


;---------Hosten!
.start_host
host=1
ausgabe = HostNetGame ("US_MP_TEST")
If ausgabe <> 2 Then Print "Fehler! Spiel konnte nicht erstellt werden! :(" Gosub start_joinorhost
Print "Das Spiel wurde erfolgreich erstellt! ^_^"
myplayer=0   ;(Der Hoster ist automatisch Player 0!)
pl_on(0)=1   ;
Gosub start_makeplayer


;---------Connecten!
.start_join
host=0
eingabe$ = Input ("Gebe bitte eine IP Adresse ein oder x zum Beenden:")
If eingabe$ = "x" Then End
ausgabe = JoinNetGame ("US_MP_TEST", eingabe$)
If ausgabe <> 1 Then Print "Fehler! Spiel konnte nicht gejoint werden! :(" Gosub start_joinorhost
Print "Das Spiel wurde erfolgreich gejoint! ^_^"
pl_on(0)=1   ;Array Platz 0 ist automatisch schon vom Hoster belegt!
Gosub start_makeplayer


;---------Player erstellen
.start_makeplayer
eingabe$ = Input ("Wie möchtest du heissen? Gebe einen Namen ein oder x zum Beenden:")
If eingabe$ = "x" Then End
If eingabe$ = "" Then Print "Du musst was eingeben!" Gosub start_makeplayer
ausgabe = CreateNetPlayer (eingabe$)
If ausgabe = 0 Then Print "Fehler! Konnte keinen Spieler erstellen :(" Gosub start_joinorhost
Print "Spieler erfolgreich erstellt! Deine Multiplayer Nummer ist "+ ausgabe
mynum=ausgabe
Print "Bitte eine Taste drücken!"
WaitKey()
Gosub runtime











;---------Runtime
.runtime

Repeat
SetBuffer BackBuffer()
Cls
Color 255,255,255


;Beenden
If KeyDown(1) Then End

;Chatten
If KeyHit(57) Then FlushKeys: SendNetMsg 1, Input("Say:" ), mynum, 0, 1

;Bewegen
If myplayer > -1                                                ;Wenn Spieler eine Array Nummer hat:
x=pl_x(myplayer)                                                ;X sichern
y=pl_y(myplayer)                                                ;Y sichern
z=pl_z(myplayer)                                                ;z sichern
If KeyDown(2) Then pl_rgb(myplayer)=1 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 1")   ;Farbe 1 wählen
If KeyDown(3) Then pl_rgb(myplayer)=2 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 2")   ;Farbe 2 wählen
If KeyDown(4) Then pl_rgb(myplayer)=3 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 3")   ;Farbe 3 wählen
If KeyDown(5) Then pl_rgb(myplayer)=4 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 4")   ;Farbe 4 wählen
If KeyDown(6) Then pl_rgb(myplayer)=5 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 5")   ;Farbe 5 wählen
If KeyDown(7) Then pl_rgb(myplayer)=6 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 6")   ;Farbe 6 wählen
If KeyDown(8) Then pl_rgb(myplayer)=7 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 7")   ;Farbe 7 wählen
If KeyDown(9) Then pl_rgb(myplayer)=8 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 8")   ;Farbe 8 wählen
If KeyDown(10)Then pl_rgb(myplayer)=9 :SendNetMsg 3, myplayer+","+pl_rgb(myplayer), mynum, 0, 1: write_msg("Color = 9") ;Farbe 9 wählen

If KeyDown(200) Then pl_y(myplayer)=pl_y(myplayer)-10                      ;Hoch
If KeyDown(205) Then pl_x(myplayer)=pl_x(myplayer)+10                     ;Rechts
If KeyDown(208) Then pl_y(myplayer)=pl_y(myplayer)+10                     ;Runter
If KeyDown(203) Then pl_x(myplayer)=pl_x(myplayer)-10                     ;Links
If x<>pl_x(myplayer) Or y<>pl_y(myplayer) Or z<>pl_z(myplayer) Then SendNetMsg 2, myplayer+","+pl_x(myplayer)+","+pl_y(myplayer)+","+pl_z(myplayer), mynum, 0,0,0   ;Position senden, wenn verändert
EndIf                                                         ;


;Nachrichten erhalten
While RecvNetMsg() = 1                                             ;Solange Nachrichten da sind:
typ=NetMsgType()                                                ;Typ -> typ
mssg$=NetMsgData()                                                ;Nachricht -> mssg$ (bei msg$ kam ein Fehler *fg*)
from=NetMsgFrom()                                                ;Von -> from
name$=NetPlayerName$(from)                                          ;Name vom Absender -> name$
If typ=1 Then write_msg(name$+": "+mssg$)                              ;Chat Nachricht
If typ=2 Then setpos(mssg$)                                          ;Postion setzen
If typ=3 Then setcolor(mssg$)                                       ;Farbe setzen
If typ=10 Then myplayer=mssg$: pl_on(myplayer)=1                        ;Spieler bekommt Spielernummer!
If typ=11 Then zahl=mssg$: pl_on(zahl)=1                              ;Spieler aktivieren
If typ=100 Then write_msg(name$+" hat gejoint! :)")                        ;Neuer Spieler Nachricht
If typ=100 Then SendNetMsg (11, myplayer, mynum, from, 1)                  ;Neuem Spieler die Eigene Nummer sagen, damit er einen sieht!
If typ=100 And host=1 Then give_nummer(from)                           ;Neuem Spieler eine Nummer zuteilen u. geben!
If typ=101 Then write_msg("Spieler ist gegangen! :(")                     ;Spieler ist gegangen!
If typ=102 Then write_msg("Der Hoster ist weg! Du bist jetzt der Host!"):Host=1   ;Host ist gegangen! Du bist Host!
If typ=200 Then write_msg("EIN FEHLER IST AUFGETRETEN! PROGRAMM ABGEBROCHEN!")   ;Fehler
Wend                                                         ;


;Spieler Anzeigen
For i=0 To pl_c                                                   ;
If pl_on(i)=1 Then                                                ;Wenn spieler da
Select pl_rgb(i)                                                ;
Case 1 Color 100,100,100                                          ;
Case 2 Color 200,0,0                                             ;
Case 3 Color 0,200,0                                             ;
Case 4 Color 0,0,200                                             ;
Case 5 Color 200,200,0                                             ;
Case 6 Color 0,200,200                                             ;
Case 7 Color 200,0,200                                             ;
Case 8 Color 200,200,200                                          ;
Case 9 Color 50,50,50                                             ;
End Select                                                      ;
Oval pl_x(i)+16, pl_y(i)+16, 32, 32, 1                                 ;Kreis zeichnen (16=32/2=Damit Kreis-Mitte auf den Koordinaten liegt!)
EndIf                                                         ;
Next                                                         ;

;Nachrichten Anzeigen
Color 255,255,255                                                ;
For i=0 To 10                                                   ;
Text 5, 20*i, msg$(i)                                             ;
Next                                                         ;


;Info Text
Text 5, 460, "Programm läuft! Pfeiltasten=Bewegen, Space=Chatten, ESC=Beenden, 1-9=Color"

Delay 50
Flip
Forever




;----------Funktionen
Function write_msg(nachricht$)                                        ;Eine Nachricht anzeigen
Local i                                                         ;
For i=0 To 9                                                   ;
msg$(i)=msg$(i+1)                                                ;
Next                                                         ;
msg$(10)=nachricht$                                                ;
End Function                                                   ;

Function give_nummer(target)                                       ;Neuem Spieler ein Array Nummer geben
Local freenum, x                                                ;
x=1                                                            ;
freenum=0                                                      ;
While freenum=0                                                   ;
If pl_on(x)=0 Then freenum=x                                       ;
x=x+1                                                         ;
Wend                                                         ;
SendNetMsg (10, freenum, mynum, target, 1)                              ;Nummer speziell an den Spieler der sie angefordert hat senden
SendNetMsg (11, freenum, mynum, 0, 1)                                 ;Nummer an alle Senden
write_msg("Player "+target+" hat Kreis Nr. "+freenum+" bekommen!")            ;
pl_on(freenum)=1                                                ;
End Function                                                   ;

Function setpos(pstr$)                                             ;Andere Spieler an gesendete Position setzen  (String analysieren)
Local sub1$, sub2$, sub3$, sub1n, sub2n, sub3n, pos, pos2                  ;
pos = Instr (pstr$, ",", 1)                                          ;
sub1$ = Mid$ (pstr$, 1, pos-1)                                       ;
pos2 = Instr (pstr$, ",", pos+1)                                    ;
sub2$ = Mid$ (pstr$, pos+1, pos2-(pos+1))                              ;
sub3$ = Mid$ (pstr$, pos2+1, -1)                                    ;
sub1n=sub1$                                                      ;
sub2n=sub2$                                                      ;
sub3n=sub3$                                                      ;
pl_x(sub1n)=sub2n                                                ;
pl_y(sub1n)=sub3n                                                ;
End Function                                                   ;

Function setcolor(pstr$)                                          ;Andere Spieler Farbe setzen (String analysieren)
Local sub1$, sub2$, sub1n, sub2n, pos, pos2                              ;
pos = Instr (pstr$, ",", 1)                                          ;
sub1$ = Mid$ (pstr$, 1, pos-1)                                       ;
sub2$ = Mid$ (pstr$, pos+1, -1)                                       ;
sub1n=sub1$                                                      ;
sub2n=sub2$                                                      ;
pl_rgb(sub1n)=sub2n                                                ;
End Function                                                   ;


Da geht es schon los, oben möchte ich die 3D lnadschaft anzeigen aber irgendein CLS (vermute ich) versaut mir das. Ich habe es schon mal geschaft aber ich find den Code nicht mehr.

THX Sascha
Der Neue
  • Zuletzt bearbeitet von dreamfile am Do, Jan 22, 2004 11:59, insgesamt einmal bearbeitet
 

dreamfile

BeitragDo, Jan 22, 2004 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist auch so eine sache, wie lege ich da einen 3D player an ???
Code: [AUSKLAPPEN]
;Spieler Anzeigen
For i=0 To pl_c                                                   ;
If pl_on(i)=1 Then                                                ;Wenn spieler da
Select pl_rgb(i)                                                ;
Case 1 Color 100,100,100                                          ;
Case 2 Color 200,0,0                                             ;
Case 3 Color 0,200,0                                             ;
Case 4 Color 0,0,200                                             ;
Case 5 Color 200,200,0                                             ;
Case 6 Color 0,200,200                                             ;
Case 7 Color 200,0,200                                             ;
Case 8 Color 200,200,200                                          ;
Case 9 Color 50,50,50                                             ;
End Select                                                      ;
Oval pl_x(i)+16, pl_y(i)+16, 32, 32, 1                                 ;Kreis zeichnen (16=32/2=Damit Kreis-Mitte auf den Koordinaten liegt!)
EndIf                                                         ;
Next                  
Der Neue
 

dreamfile

BeitragDo, Jan 22, 2004 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier heisst es: "Too many parameters"

Code: [AUSKLAPPEN]
If x<>pl_x(myplayer) Or y<>pl_y(myplayer) Or z<>pl_z(myplayer) Then SendNetMsg 2, myplayer+","+pl_x(myplayer)+","+pl_y(myplayer)+","+pl_z(myplayer), mynum, 0,0,0   ;Position senden, wenn verändert
EndIf   


Kann man 2 x in einer Zeile "or" vergeben ???
Der Neue
 

BIG BUG

BeitragDo, Jan 22, 2004 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub bei SendNetMsg hast du am Schluss eine 0 zuviel...
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group