Multiplayer - zu schwer für beginner?

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Donald Agu

Betreff: Multiplayer - zu schwer für beginner?

BeitragFr, Apr 22, 2005 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

mein Spiel ist fertig, aber nur Hot-Seat-tauglich. Jetzt würd ich gern noch einbauen, dass man das ganze über Netzwerk, v.a. aebr über Internet zocken kann, damit Wartezeiten wegfallen.

Ist das irrsinnig schwer und muss ich mir die Idee gleich wieder aus dem Kopf schlagen oder muss ich da nur ein paar Handgriffe machen?
Meine Erfahrungen mit der Online-Hilfe sagen mir Ersteres...

AGU

diGGa

GruppenKaspar

BeitragFr, Apr 22, 2005 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
in rene meyers buch kommt das recht leicht rüber... kommt natürlich immer auf die größe des spieles an und wieviele parameter übergeben werden müssen
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

Hubsi

BeitragFr, Apr 22, 2005 18:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach eine Sicherungskopie des jetzigen Codes und versuch Dich dran. Die paar Befehle sind nicht weiter kompliziert, es ist eher das Internet selbst Very Happy Eine Erfahrung ist es allemal wert Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Donald Agu

BeitragFr, Apr 22, 2005 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmmm...ja

Die Größe des Spiels sowie die Anzahl der Parameter sind minimal, das dürfte kein Problem geben.

Ich hab nur keine Ahnung, welche Befehle wichtig sind und welche man sich an den Hut stecken kann Wink

Jolinah

BeitragFr, Apr 22, 2005 19:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich empfehle TCP und/oder UDP:

Edit:

http://www.blitzbase.de/4a.htm

Unter 2d findest du die beiden Kategorien (tcp, udp) und da werden alle nützlichen Befehle erklärt Wink

nX^

BeitragFr, Apr 22, 2005 19:57
Antworten mit Zitat
Benutzer-Profile anzeigen
TCPIP/Direct Play is am einfachsten am anfang....

Hier nen Beispiel:

BlitzBasic: [AUSKLAPPEN]
;--------Consts
Const width=800,height=600


;--------Globals
Global send_freq=5
Global smoothing=5
Global Ping_time
Global player.Player=New Player
Global chat$


;--------Types
Type Info
Field txt$
End Type

Type Player
Field x#,y#,r# ;Position des Spielers
Field dx#,dy#,dr# ;Übertagungsspeed
Field name$,net_id
End Type


;--------Start


AppTitle \"Multiplayer\"

If Not StartNetGame() Then End
Graphics width,height

send_cnt=1

;Playername
Repeat
Cls
Color 0,48,0
For x=0 To width-1 Step 32
Rect x,0,1,height
Next
For y=0 To height-1 Step 32
Rect 0,y,width,1
Next
Color 255,255,255
Locate 16,height/4
name$=Input$( \"Name? \" )
Until name$<>\"\"

;erstellen eines localen spielers
player.Player=New Player
player\x=width/2
player\y=height/2
player\r=0
player\name=name$
player\net_id=CreateNetPlayer( name$ )



SetBuffer BackBuffer()

While Not KeyDown(1)

UpdateNetwork()

send_cnt=send_cnt-1
If send_cnt=0
send_cnt=send_freq
send=True
Else
send=False
EndIf

UpdatePlayers( send )

RenderAll()

Flip
Wend

End

;Netzwerk Update
Function UpdateNetwork()
While RecvNetMsg()
Select NetMsgType()
Case 1:
p.Player=FindPlayer( NetMsgFrom() )
If p<>Null Then UnpackPlayerMsg( NetMsgData$(),p )
Case 2:
info( NetPlayerName$( NetMsgFrom() )+\":\"+NetMsgData$() )
Case 3:
SendNetMsg 4,\"Pong!\",player\net_id,0,0
Case 4:
t=MilliSecs()-Ping_time
info( \"Ping: \"+t+\"ms\" )
Case 100:
p.Player=New Player
p\net_id=NetMsgFrom()
p\name=NetPlayerName$( NetMsgFrom() )
info( p\name+\" tritt dem Spiel bei. \" )
Case 101:
p.Player=FindPlayer( NetMsgFrom() )
If p<>Null
info( p\name+\" hat das Spiel verlassen. \" )
Delete p
EndIf
Case 102:
info( \"Host \" )
Case 200:
EndGraphics
Print \"Die Session wurde beendet\"
WaitKey
End
End Select
Wend
End Function

Function UpdatePlayers( send )

If KeyHit(59)
Ping_time=MilliSecs()
SendNetMsg 3,\"Ping!\",player\net_id,0,0
EndIf
If KeyHit(60) And send_freq>0 Then send_freq=send_freq-1
If KeyHit(61) Then send_freq=send_freq+1
If KeyHit(62) And smoothing>0 Then smoothing=smoothing-1
If KeyHit(63) Then smoothing=smoothing+1

For p.Player=Each Player
If NetPlayerLocal( p\net_id )

;L/R rotation
If KeyDown( 203 )
p\r=p\r-5
Else If KeyDown( 205 )
p\r=p\r+5
EndIf

;Thrust
If KeyDown( 200 )
p\x=p\x+Cos(p\r)*5
p\y=p\y+Sin(p\r)*5
EndIf

;Chat
key=GetKey()
If key
If key=13
If chat$<>\"\" SendNetMsg 2,chat$,p\net_id,0,0
chat$=\"\"
Else If key=8
If Len(chat$)>0 Then chat$=Left$(chat$,Len(chat$)-1)
Else If key>=32 And key<127
chat$=chat$+Chr$(key)
EndIf
EndIf

;Übertragung der Player Positionen
If send
SendNetMsg 1,PackPlayerMsg$(p),p\net_id,0,0
EndIf
Else
p\x=p\x+p\dx
p\y=p\y+p\dy
p\r=p\r+p\dr
EndIf
Next
End Function

Function RenderPlayers()
For p.Player=Each Player
x1=p\x+Cos(p\r)*8
y1=p\y+Sin(p\r)*8
x2=p\x+Cos(p\r+150)*8
y2=p\y+Sin(p\r+150)*8
x3=p\x+Cos(p\r-150)*8
y3=p\y+Sin(p\r-150)*8

Color 255,255,255
Line x1,y1,x2,y2:Line x2,y2,x3,y3:Line x3,y3,x1,y1

Color 0,0,255
Text p\x+12,p\y,p\name,0,1
Next

End Function

Function info( t$ )
i.Info=New Info
i\txt$=t$
Insert i Before First Info
End Function

Function RenderAll()
;malen
Cls
Color 0,255,0
Text 0,FontHeight()*0,\"Multiplayer!\"
Text 0,FontHeight()*1,\"F1:ping\"
Text 0,FontHeight()*2,\"Send freq:\"+send_freq+\" (F2-, F3+)\"
Text 0,FontHeight()*3,\"Smoothing:\"+smoothing+\" (F4-, F5+)\"
Text 0,FontHeight()*4,\">\"+chat$
y=FontHeight()*5
r=255
For i.Info=Each Info
If r>0
Color r,r/2,0
Text 0,y,i\txt$
y=y+FontHeight()
r=r-12
Else
Delete i
EndIf
Next

RenderPlayers()

End Function

;pack player in einen String
Function PackPlayerMsg$( p.Player )
Return LSet$( Int(p\x),6 )+LSet$( Int(p\y),6 )+LSet$( Int(p\r),6 )
End Function

;unpack player aus dem String
Function UnpackPlayerMsg( msg$,p.Player )
x=Mid$( msg$,1,6 )
y=Mid$( msg$,7,6 )
r=Mid$( msg$,13,6 )
p\dx=(x-p\x)/smoothing
p\dy=(y-p\y)/smoothing
p\dr=(r-p\r)/smoothing
End Function

;Player und ID finden
Function FindPlayer.Player( id )
For p.Player=Each Player
If p\net_id=id Then Return p
Next
End Function
  • Zuletzt bearbeitet von nX^ am Fr, Apr 22, 2005 20:05, insgesamt einmal bearbeitet

Hubsi

BeitragFr, Apr 22, 2005 20:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist DirectPlay. Das ist zwar einfach, aber aus eigener Erfahrung rate ich Dir dringend davon ab. Lokal noch ganz nett, aber für Internet völliger Mist da die allermeisten User mit Firewall arbeiten und keine Lust haben 100 oder mehr Ports zu öffnen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

nX^

BeitragFr, Apr 22, 2005 20:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ja. aber udp is schwerer. reicht doch vollkommen für lan aus Smile

Hubsi

BeitragFr, Apr 22, 2005 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
UDP ist auch nicht schwerer, das Prinzip muss man in beiden Fällen begreifen. Es wär also unsinnig sich erst mit DP zu ärgern und dann nochmal in UDP einzuarbeiten. Doppelt gemoppelt hält in dem Fall nicht besser Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Donald Agu

BeitragSa, Apr 23, 2005 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Also erst mal vielen Dank fürs tolle Beispiel Very Happy

So viel, brauch ich aber doch gar net. Das Ganze mit playerposition etc. ist mir gar net so wichtig. Was ich wissen muss, ist, wie man die beiden Spieler miteinander verbindet und wie man kontrolliert, wer was auf seinen Screen bekommt. Dann kommt bestimmt auch nicht so ein gewurschtel raus Wink

Von udp hab ich ehrlich gesagt noch nie so richtig was gehört Embarassed
Mir würde aber DP völlig reichen.

THX

AGU
 

Donald Agu

BeitragDo, Mai 05, 2005 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollt grad das Beispiel von nex ausprobieren, aber damit kann irgend was net stimmen. Wenn ich den Code in BB einfüge, erscheinen da unzählige identische links, irgendwas mit "bblinker" usw.
Oder ist das so gedacht? kann ich mir aber kaum vorstellen...
 

Donald Agu

BeitragSo, Mai 08, 2005 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hilfe! Crying or Very sad
 

noir

BeitragSo, Mai 08, 2005 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
das sind die verlinkungen der bb befehle mit der Onlinehilfe. Du musst es "richtig" kopieren, dann klappt es auch. Kommt drauf welchen Browser du benutzt. Bei mir funzt es auch wenn ich alles markiere -> rechtsklick->copy...
Fragt und man wird euch helfen

Das Alternativ BlitzBasic-Forum: FreeCoder
Einfach chatten: BlitzChat
Code&Text schnell und einfach pasten: FreePasting
 

Donald Agu

BeitragMi, Mai 18, 2005 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Also tut mir Leid, dass ich schon wieder so dumm fragen muss, Rolling Eyes aber:

wie kopiere ich es denn richtig?? Question Question

BB macht aus jedem Befehl im Internet Explorer einen Link, was von dem Beispiel nur noch einen Riesensalat übrig lässt... Crying or Very sad

skey-z

BeitragMi, Mai 18, 2005 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
da kann ich dir nur einen Tipp geben, Mozilla Firefox^^

ist eh der beste browser
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Dreamora

BeitragMi, Mai 18, 2005 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Donald Agu hat Folgendes geschrieben:
Also erst mal vielen Dank fürs tolle Beispiel Very Happy

So viel, brauch ich aber doch gar net. Das Ganze mit playerposition etc. ist mir gar net so wichtig. Was ich wissen muss, ist, wie man die beiden Spieler miteinander verbindet und wie man kontrolliert, wer was auf seinen Screen bekommt. Dann kommt bestimmt auch nicht so ein gewurschtel raus Wink

Von udp hab ich ehrlich gesagt noch nie so richtig was gehört Embarassed
Mir würde aber DP völlig reichen.

THX

AGU


Nun dafür brauchst du aber leider Playerpositionen und das restliche "Gewurschtel", da die Gegner sonst ja nicht wissen wo man ist und was man macht und somit diese Dinge auch nicht angezeigt bekommen können auf dem Screen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Donald Agu

BeitragFr, Mai 20, 2005 22:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Und mit dem Internet Explorer geht es gar nicht???? Shocked

bloxx01

BeitragFr, Mai 20, 2005 22:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Lern gleich UDP, dann hast du was vernünftiges, womit du auch später vieles anstellen kannst. Direct Play wird dir immer große Steine in den Weg stellen.
3 Gründe warum du zu UDP greifen solltest:

1: Es ist schneller.
2: Nicht so viele Probleme mit Firewalls/Routern
3: Meiner Meinung nach gleich schwer zu erlernen, wie Hubsi schon meinte es ist total sinnlos erst DP und dann UDP zu lernen.

Lerne UDP wenn du was mit Onlinespielen machen willst Wink.
Space Threat - der kostenlose 3D Multiplayer Spaceshooter
www.SpaceThreat.de
 

Apocalyptic

BeitragSa, Mai 21, 2005 10:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du einen Code aus dem IE kopierst, darfst du ihn nicht mit Strg+V einfügen, du musst den Paste Button in der Toolbar benutzen.
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]
 

Donald Agu

BeitragMo, Mai 23, 2005 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehs nicht!´Das Einfügen klapt bei mir einfach nicht. Dabei markier ich einfach den ganzen Code und füge ihn (über die Toolbar) ganz normal ein. Und jedesmal krieg ich die blöden links mit rein!!
Ich kanns nicht glauben, bald tipp ich noch alles manuell ein, oder... nein, lieber doch nicht Crying or Very sad Crying or Very sad Crying or Very sad

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group