Ping Pong Multiplayer

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

bruce185

Betreff: Ping Pong Multiplayer

BeitragDo, Nov 10, 2005 21:20
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, also ich habe gerade ein Ping Pong Spiel Geschrieben, ist noch nicht ganz fertig, weil ich die Kollision vom Schläger noch nicht berechnet habe, eigentlich wollte ich es erst Probieren wie das mit Multiplayer funktioniert, ich habe 2 schläger in mein Ping Pong Spiel, ein schläge befindet sich links, und der andere schläger auf der Rechten seite, nun möchte ich das so machen, das der eine PC nur den Linken Schläger bewegen kann, und der andere PC den Rechten Schläger bewegen kann, hier ist mal mein code:

BlitzBasic: [AUSKLAPPEN]

Graphics 600,500,16,2
SetBuffer BackBuffer()

Global angle# = Rnd(0,359)
Global x# = 400.0, y# = 300.0
Global speed# = 5

;Den Schlaeger Positionieren
Global a = 4
Global b = 200
Global c = 570
Global d = 200

;Den Ball Laden
ball = LoadImage(\"ball.bmp\")
MaskImage ball,255,0,255

;Den Schlaeger fuer Spieler eins laden
spieler1_schlaeger = LoadImage(\"spieler1schläger.bmp\")
MaskImage spieler1_schlaeger,255,0,255

;Den Schlaeger fuer Spieler zwei laden
spieler2_schlaeger = LoadImage(\"spieler2schläger.bmp\")
MaskImage spieler2_schlaeger,255,0,255

;warten auf Tastendruck um Fortzufahren
WaitKey

;Die Hauptschleife
Repeat
Cls

;Den Schlaeger für Spieler eins auf dem Bildschirm bringen
DrawImage spieler1_schlaeger,a,b

;Den Schlaeger für Spieler zwei auf dem Bildschirm bringen
DrawImage spieler2_schlaeger,c,d

;Den Ball auf dem Bildschirm bringen
DrawImage ball,x#,y#

;Den Ball bewegen lassen
x# = x# + Cos(angle#) * speed#
y# = y# + Sin(angle#) * speed#

;Ball Kollision berechnen
If x# < 0 Or x# > 576
angle# = 180 - angle#
EndIf

;Ball Kollision berechnen
If y# > 476 Or y# < 0
angle# = 360 - angle#
EndIf

;Den Schlaeger für Spieler eins nach unten bewegen
If KeyDown(208) Then
If b < 406 Then b = b + 3
EndIf

;Den Schlaeger für Spieler eins nach oben bewegen
If KeyDown(200) Then
If b > 4 Then b = b - 3
EndIf

;Die bilder flipen
Flip
;auf ESC wird das Spiel beendet
Until KeyHit(1)
End


habe noch kein code für Multiplayer spiel eingetippt, weil ich mir jetzt nicht sicher bin wie das genau funktioniert, für jede hilfe bin ich euch sehr dankbar, ich danke euch schonmal für die hilfe Sad

Andreas

SpionAtom

BeitragDo, Nov 10, 2005 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Nur mal so als Tipp. Mach das Spiel besser erst so fertig, dass es auf einem PC spielbar ist.
Danach kannst du dir überlegen, welche Daten die beiden Rechner austauschen.
Und dann erst beginnt die Netzwerkprogrammierung
Smile

bruce185

BeitragDo, Nov 10, 2005 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
ich danke dir, habe in der zeit das Spiel weiter geschrieben, man könnte es jetzt so lassen, hier mal der code:

BlitzBasic: [AUSKLAPPEN]

Graphics 600,500,16,2
SetBuffer BackBuffer()

Global angle# = Rnd(0,359)
Global x# = 400.0, y# = 300.0
Global speed# = 6

Global Gewonnen1% = 0
Global Gewonnen2% = 0

;Den Schlaeger Positionieren
Global a = 4
Global b = 200
Global c = 570
Global d = 200

;Den Ball Laden
ball = LoadImage(\"ball.bmp\")
MaskImage ball,255,0,255

;Den Schlaeger fuer Spieler eins laden
spieler1_schlaeger = LoadImage(\"spieler1schläger.bmp\")
MaskImage spieler1_schlaeger,255,0,255

;Den Schlaeger fuer Spieler zwei laden
spieler2_schlaeger = LoadImage(\"spieler2schläger.bmp\")
MaskImage spieler2_schlaeger,255,0,255


;warten auf Tastendruck um Fortzufahren
WaitKey

;Die Hauptschleife
Repeat
Cls

;Den Schlaeger für Spieler eins auf dem Bildschirm bringen
DrawImage spieler1_schlaeger,a,b

;Den Schlaeger für Spieler zwei auf dem Bildschirm bringen
DrawImage spieler2_schlaeger,c,d

;Den Ball auf dem Bildschirm bringen
DrawImage ball,x#,y#

;Den Ball bewegen lassen
x# = x# + Cos(angle#) * speed#
y# = y# + Sin(angle#) * speed#

;Ball Kollision berechnen
If x# < 0 Or x# > 576
angle# = 180 - angle#
EndIf

;Ball Kollision berechnen
If y# > 476 Or y# < 0
angle# = 360 - angle#
EndIf

;Den Schlaeger für Spieler eins nach unten bewegen
If KeyDown(208) Then
If b < 406 Then b = b + 4
EndIf

;Den Schlaeger für Spieler eins nach oben bewegen
If KeyDown(200) Then
If b > 4 Then b = b - 4
EndIf

If ImagesCollide(spieler1_schlaeger,a,b,0,ball,x,y,0) Then
angle# = 360 - speed#
EndIf

;wenn spieler 1 den Ball dürch lässt, bekommt spieler 2 ein Punkt
If x# < 0 Then
Gewonnen2% = Gewonnen2% + 1
EndIf

;wenn spieler 2 den Ball dürch lässt, bekommt spieler 1 ein Punkt
If x# > 576 Then
Gewonnen1% = Gewonnen1% + 1
EndIf

;wen spieler1 oder spieler2 21 Punkte erreicht hat, ist das Spiel zu ende
If Gewonnen1 > 20 Or Gewonnen2 > 20 Then
Ende()
EndIf

;Punkte stand anzeigen
Text 40,40, \"Es steht \" + Gewonnen1% + \":\" + Gewonnen2%

;Die bilder flipen
Flip
;auf ESC wird das Spiel beendet
Until KeyHit(1)



Function Ende()
Repeat
Cls

;wen Spieler1 mehr Punkte als Spieler2 hat, wird das hier ausgeführt
If Gewonnen1% > Gewonnen2% Then
Text 50,50, \"Das Spiel ist zu ende, Spieler1 führt mit \" + Gewonnen1% + \" zu \" + Gewonnen2%
Text 50,80, \"und damit hat Spieler1 gewonnen!\"
EndIf

;wen Spieler2 mehr Punkte als Spieler1 hat, wird das hier ausgeführt
If Gewonnen1% < Gewonnen2% Then
Text 50,50, \"Das Spiel ist zu ende, Spieler2 führt mit \" + Gewonnen2% + \" zu \" + Gewonnen1%
Text 50,80, \"und damit hat Spieler2 gewonnen!\"
EndIf

;auf ESC wird das Spiel Beendet
If KeyHit(1) Then Exit

Flip
Until KeyHit(1)
End Function

End


oder sollte ich da noch was umänder?
wie funktioniert das jetzt mit Multiplayer?, was muss ich schreiben damit man das im Netzwerk spielen kann, für die hilfe bin ich dir sehr dankbar Smile

Andreas

bruce185

BeitragFr, Nov 11, 2005 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hat keiner ne ahnung wie ich mein Spiel jetzt im Netzwerk spielen kann?

Andrreas

Hellfront

BeitragFr, Nov 11, 2005 16:50
Antworten mit Zitat
Benutzer-Profile anzeigen
guck ma unter www.Blitzbase.de da findest du tutorials zu multiplayer.

Im allgemeinen gillt: überleg dir als aller erstes welche daten gesendet werden müssen und dann solltest du es anhand des tuts leicht lösen lönnen Wink

bruce185

BeitragSo, Nov 13, 2005 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
das habe ich auch gemacht, aber es funzt nicht, wenn ich bei mir mein Spiel Starte, und das Spiel Hoste, dann kann mein Bruder ja das bestehende Spiel betreten, das funktioniert, aber wie tuhe ich Datenaustauschen, weil bei mir verhällt der ball sich viel anders als bei mein bruder, der ball ist auch ganz wo anders als bei mir, man muss doch Das Bild von mir muss ich doch bei meinem Bruder übertragen, aber wie, ich bin euch sehr dankbar wenn ihr mir da weiterhelfen könnt, ich danke euch schonmal Sad

Andreas

x-pressive

BeitragSo, Nov 13, 2005 9:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hole mal kurz ein bisschen aus:

Ein Spiel, daß immer exakt den selben Ablauf hat, müsste eigentlich gar keine Daten übetragen, da es ja auf allen Computern immer genau gleich abläuft (hauptsache, es wird auf beiden PCs zur gleichen Zeit gestartet). Soweit klar?

Jetzt überlegst du dir, an welchen Punkten dein Spiel aber eine Entscheidungsmöglichkeit für den Spieler bietet. Und nur diese Entscheidungsmöglichkeiten müssen dann übertragen werden, denn der eine PC weiß ja nicht, wie sich der Spieler am anderen entscheidet.

Das ist die ganze Logik, und damit ist auch klar, was übetragen werden muß, und was nicht.

Das, was also auf beiden PCs sowieso immer gleich ablaufen würde (z.B. Physik und der Rest des Gameplays) braucht man nicht übetragen. Selbst Zufallsentscheidungen brauchst du in der Regel nicht übertragen, weil Rand() ja, wenn beide PCs es genau gleich oft aufrufen, bei allen immer die selben Werte bringt.

Die einzigen "Entscheidungsmöglichkeiten" sind in deinem Fall eigentlich nur die Positionen der Schläger. Also muß ein Spiel nur genau bescheid wissen, wo sich der Schläger des anderen gerade befindet. Du brauchst also nur Informationen zur Bewegung der Schläger austauschen.

Du könntest es so machen, daß ein Schläger sich konstant in eine Richtung bewegt, sobald eine Taste gedrückt wird und sich erst wieder in die Gegenrichtung bewegt, wenn die andere Taste gedrückt wurde.

Das macht nicht nur mehr Spaß beim Spielen (da schwieriger), sondern du brauchst dann bei jedem Tastendruck nur zwei Informationen an den anderen Computer senden: die Richtung, in die sich der Schläger nun bewegt (-1 = hoch, 1 = runter) und die y-Position, an der sich die Richtung des Schlägers zuletzt geändert hat. Diese beiden Infos würden dem anderen PC schon reichen, um den selben Spielablauf zu liefern.
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

Hagbard

BeitragSo, Nov 13, 2005 9:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Super erklärt expressive,

Nochmal etwas zum Speed, falls du dein Spiel noch erweitern willst.
Ich würde da noch eine Speedbremse einbauen.
CreateTimer(),WaitTimer und FreeTimer() solltest du dir mal in der OnlineHilfe ansehen.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group