Pong Game - Spieler Kollision

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

GearTechDE

ehemals 'KillerJo96'

Betreff: Pong Game - Spieler Kollision

BeitragSo, Jun 19, 2011 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Freunde,

Ich bin gerade dabei ein kleines Pong Game zu programmieren. Da ich mir doch bewusst geworden bin, das 3D und UDP noch was zu schwer für mich ist, habe ich mich dazu entschlossen. Ich habe sogar auch schon die ersten Probleme...

Und zwar:

Ich habe bei meinem Pong Game schon die Grundstruktur gebastelt und es beinhaltet bis jetzt folgende Funktionen:

Arrow Bei Kollision mit Rand 1 Punk für Gegenspieler
Arrow Ball bei Kollision mit Rand für den jenigen Spieler ausrichten.

Was noch kommen soll und Probleme:

Arrow Den Ball schräg laufen lassen.
Arrow Ich habe für die Player jeweils eine Line erstellt. Jetzt weiß ich nicht, wie ich es realisiere, dass bei Kollision mit der Line der Ball abprallt und in welche Richtung katapultiert wird.

Hier mein Code;

BlitzBasic: [AUSKLAPPEN]

;Pong

xmax = 320
ymax = 480
Local Player1X1 = 160
Local Player1X2 = 100
Local Player1Y = 460
Local Player2Y = 20
Local Player2X1 = 200
Local Player2X2 = 260
Local BallX = 160
Local BallY = 240

Local BallRichtung = 0
Local BallSpeed# = 0

Local P1Score = 0
Local P2Score = 0

Graphics xmax,ymax,32,2
SetBuffer BackBuffer()
AppTitle "Pong Game"


Repeat

;KeyControl
Cls

;KeyControl
Cls

;Control Line
Line 0,40,320,40
;Control Line

;Ball zeichnen
Oval BallX,BallY,10,10,1
;Ball zeichnen

;Ball bewegen
If KeyHit(57) Then BallSpeed# = BallSpeed# + 1
If BallSpeed# > 10 Then BallSpeed = 0

If BallRichtung = 0 Then
BallY = BallY + BallSpeed#
ElseIf BallRichtung = 1
BallY = BallY - BallSpeed#
End If
;Ball bewegen

;Kollision Rand
If BallY > 460 Then
P1Score = P1Score + 1
BallSpeed = 0
BallY = 240
BallRichtung = 1
End If

If BallY < 50 Then
P2Score = P2Score + 1
BallSpeed = 0
BallY = 240
BallRichtung = 0
End If
;Kollision Rand

;Kollision Spieler



;Kollision Spieler


;Player1 komplett
Line Player1X1,50,Player1X2,50
If KeyDown(203) Then
Player1X1 = Player1X1 - 2 : Player1X2 = Player1X2 - 2
End If

If KeyDown(205) Then
Player1X1 = Player1X1 + 2 : Player1X2 = Player1X2 + 2
End If

If Player1X1 > 320 Then
Player1X1 = 0
Player1X2 = 60
End If
If Player1X1 < 0 Then
Player1X1 = 320
Player1X2 = 260
End If
;Player1 komplett

;Player2 komplett
Line Player2X1,470,Player2X2,470
If KeyDown(30) Then
Player2X1 = Player2X1 - 2 : Player2X2 = Player2X2 - 2
End If

If KeyDown(32) Then
Player2X1 = Player2X1 + 2 : Player2X2 = Player2X2 + 2
End If

If Player2X1 > 320 Then
Player2X1 = 0
Player2X2 = 60
End If
If Player2X1 < 0 Then
Player2X1 = 320
Player2X2 = 260
End If
;Player2 komplett
Text 0,0,"Ball: " + BallSpeed#
Text 140,15, P1Score + " : " + P2Score
Flip

Until KeyHit(1)
End


Danke im Voraus.

MFG Killerjo96
Mit freundlichen Grüßen: GearTechDE

Midimaster

BeitragSo, Jun 19, 2011 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Schräg laufen lassen


am besten fügst Du für "BallX" genau die gleichen Zeilen ein, die Du schon für "BallY" im Code stehen hast.

das bedeutet, du brauchst neben der BallSpeed auch zwei unterschiedliche Teilkomponoenten BallSpeedX und BallSpeedY.

Die Variable BallRichtung würde ich nicht nur auf 0 oder 1 beschränken, sondern alle 360° zulassen.

Aus BallSpeed und BallRichung kannst Du dann mit SINUS und COSINUS die beiden Anteile BallSpeedX und BallSpeedY errechnen.

Da läuft derzeit ein anderes Them, das genau zu deinen Fragen passt: https://www.blitzforum.de/foru...hp?t=37292

Dort wird auch genau erklärt wie der Ball an den Banden oder Schläger umzukehren hat. Es ist nur nötig den Winkel BallRichtung neu zu bestimmen



Kollision mit Schläger

das hast du eigentlich schon gelöst. Nämlich bei der Kollision mit dem Rand. Mit den Schläger geht das genauso. Allerdings musst Du nicht nur BallY mit 460 vergleichen, sondern den Ball mit dem rechteckigen Bereich um den Schläger vergleichen:

BlitzBasic: [AUSKLAPPEN]
If ( BallX > PlayerX1 - 5 ) And   ( BallX < PlayerX1 +60 + 5)
If ( BallY > PlayerY1 - 5 ) And ( BallY < PlayerY1 + 5)
; dann war es eine kollision
EndIf
EndIf



was in deinem Code stört sind die vielen Zahlen. Gewöhne dir an, diese fixen Zahlen immer durch Variable oder Constanten zu ersetzen:


BlitzBasic: [AUSKLAPPEN]
If ( BallX > PlayerX1 - BallRadius ) And   ( BallX < PlayerX1 +SchlaegerBreite + BallRadius)
If ( BallY > PlayerY1 - BallRadius ) And ( BallY < PlayerY1 + SchlaegerHoehe + BallRadius)
; dann war es eine kollision
EndIf
EndIf

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Jun 19, 2011 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke..
Mit freundlichen Grüßen: GearTechDE

GearTechDE

ehemals 'KillerJo96'

BeitragSo, Jun 19, 2011 20:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke für die hilfe werds mal probieren

Edit: Sorry für den Doppelpost, habe internet probleme
Mit freundlichen Grüßen: GearTechDE
  • Zuletzt bearbeitet von GearTechDE am So, Jun 19, 2011 20:36, insgesamt einmal bearbeitet
 

PhillipK

BeitragMo, Jun 20, 2011 4:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Meld dich wieder, falls du etwas nicht verstehst oder etwas genauer erklärt haben willst.

Es bringt dir nichts, wenn du etwas abschreibst, ohne die Logik dahinter zu verstehen. Dh wenn du dir zb bei den Cos() und Sin() berechnungen unsicher bist, was dort passiert, frage lieber einmal mehr nach, wie es einfach nicht zu lernen Smile
Wir reißen hier niemanden den Kopf ab Smile

Gruß, Phillipk

GearTechDE

ehemals 'KillerJo96'

BeitragDo, Jun 23, 2011 10:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Philip ... hat mir ein wenig mehr Mut gegeben mehr zu Posten anstatt selbst irgendwas auszudenken, was was sein könnte.

MFG Killerjo96
Mit freundlichen Grüßen: GearTechDE
 

PhillipK

BeitragDo, Jun 23, 2011 10:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also grundsätzlich befürworte ich es, wenn jemand sich selbst gedanken macht.
Aber wenn das nicht klappt, gibts immernohc das forum hier.

Ich frag auch immer ziemlich Banale sachen nach, wenn ichs einfach nicht besser weiß.

Das ist okay, solange man sich selbst gedanken macht und nicht einfach ankommt mit.. "ich möchte ein programm, was das und das macht. Kann mir das jemand schreiben?" -> Falsch.

"Ich habe versucht, das und das und das zu machen, aber ich komme nicht weiter. Ich habe einen seltsamen fehler, aber weiß nicht genau, wodurch das passiert. Hier mein testprogramm: *programmquellcode*" -> richtig Smile

Solange man von niemanden erwartet, das die einem die ganze arbeit abnehmen, ist es durchaus richtig ein wenig nach Hilfestellung oder Ansätzen zu fragen - die arbeit allerdings liegt bei jedem selbst, der etwas haben möchte!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group