Multiplayer Kugel
Übersicht BlitzBasic Blitz3D
dreamfileBetreff: Multiplayer Kugel |
Do, Jan 22, 2004 9:24 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 11:22 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 11:42 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 11:45 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 11:58 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 12:07 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Jan 22, 2004 14:48 Antworten mit Zitat |
|
---|---|---|
Ich glaub bei SendNetMsg hast du am Schluss eine 0 zuviel... | ||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
Übersicht BlitzBasic Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group