Moin Jungs! Also wir haben heute Projektwoche in der Schule und müssen in Visual BAsic ein "Streetball Spiel" programmieren.
Der folgende Code ist vorhanden:
Code:
' Diese "Billigst-Version" kann immerhin die Ballbewegung real nachbilden! ...
' ... sonst aber auch nicht viel mehr.
' Es fehlen etliche Bedingungen, die formuliert werden müssen, z.B.:
' -- Abpraller an Wänden, Decke und Boden
' -- Bedingungen für Treffer
' -- Zählen der Treffer
' -- Gesamter Spielablauf für 2 Spieler ...
' -- Es könnten auch Bilder eines Balls (oder sogar ein ganzes Spielfeld
' als Bild) geladen und entsprechend bewegt werden. (siehe
' Beispiel "Fliegende Torte")
Option Explicit
' Farbnummern müssen Ganzzahlen sein, Integer reichen aber
' nicht aus, da die Farbnummern z.T. über 16 Mio. sind >> Long!
Dim i As Integer, _
X As Single, Y As Single, Kx As Single, Ky As Single, _
dt As Single, v As Single, alpha As Single, _
Vx As Single, Vy As Single, Entfernung As Single
Const Hintergrund = vbBlack
Const Vordergrund = vbRed
Const Füllung = vbBlue
Const Rahmenfarbe = vbYellow
Const Linienstärke = 3
Const pi = 3.1415926
Const g = 9.81
Const Radius = 0.2
Private Sub cmdEnde_Click()
End
End Sub
Private Sub cmdTest_Click()
Entfernung = Val(txtEntfernung.Text)
If Entfernung > 10 Then Entfernung = 10
If Entfernung < 1 Then Entfernung = 1
txtEntfernung.Text = Format(Entfernung, "0.00")
End Sub
Private Sub cmdTurnier_Click()
' Zufallszahl von 1 bis 10m, aber hier nicht Ganzzahl, sondern mit Kommastellen!
Entfernung = Rnd * 9 + 1 ' Hier NICHT Rnd * 10, da Int fehlt!!
txtEntfernung.Text = Format(Entfernung, "0.00")
End Sub
Private Sub cmdWurf_Click()
alpha = Val(txtWinkel.Text) ' Abwurfwinkel
v = Val(txtGeschwindigkeit.Text) ' Abwurfgeschwindikeit
alpha = alpha / 180 * pi ' alpha in Radiant umgerechnet
v = v / 3.6 ' v von km/h in m/s umgerechnet
Vx = v * Cos(alpha)
Vy = v * Sin(alpha)
tmrBlinker.Enabled = False
tmrBlinker.Enabled = True
Call Übermalen ' erst Übermalen des alten Balls
Call KorbZeichnen ' dann Korb neu zeichnen.
X = 12 - Entfernung
Y = 0 ' Ball liegt auf dem Boden! (evtl. auch Y = 1m o.ä. sinnvoll ...)
i = 0
End Sub
Private Sub Form_load()
tmrBlinker.Enabled = False
' Feld wird gezeichnet, Koordinaten werden festgelegt
Call Grundeinstellungen
End Sub
Private Sub Grundeinstellungen()
picStreetball.BackColor = Hintergrund
picStreetball.DrawStyle = vbSolid
picStreetball.ForeColor = Vordergrund
picStreetball.DrawWidth = Linienstärke
picStreetball.AutoRedraw = True ' sonst ist kein Überzeichnen möglich
picStreetball.Scale (0, 5)-(12, 0) ' von oben links nach unten rechts
dt = tmrBlinker.Interval / 1000 ' dt in Sekunden: Zeitintervall von einem Timer
' zum nächsten Timersprung -- in Sekunden!
Call KorbZeichnen
End Sub
Private Sub tmrBlinker_Timer()
Call Übermalen
' Geschwindigkeit in X-Richtung (v*cos(alpha)) ändert sich nicht!
Vy = Vy - g * dt ' Geschwindigkeit in Y-Richtung (nach oben)
X = X + Vx * dt ' Position X des Balls (nach rechts)
Y = Y + Vy * dt - 1 / 2 * g * dt ^ 2 ' Position Y (nach oben)
Call Ball
' Jetzt Fillstyle wieder zurücknehmen (sonst werden auch weitere Formen gefüllt)
picStreetball.FillStyle = vbFSTransparent
End Sub
Private Sub Übermalen()
' Übermalen des alten Kreises
picStreetball.FillColor = Hintergrund
picStreetball.FillStyle = vbFSSolid
picStreetball.Circle (X, Y), Radius, Hintergrund
End Sub
Private Sub Ball()
' Hier: Kreis mit "Füllung" (blau) und "Rahmenfarbe" (gelb)
picStreetball.FillColor = Füllung
picStreetball.FillStyle = vbFSSolid
picStreetball.Circle (X, Y), Radius, Rahmenfarbe
End Sub
Private Sub KorbZeichnen()
' Abstand des Korbes (Vorderkante) von der Wand --> Normwert mir unbekannt! (1m gesetzt)
Kx = 10.5
' Dies ist die Normhöhe eines Basketballs (3,05m).
Ky = 3.05
' Durchmesser des Korbes? Normwert mir unbekannt --> hier einfach 0.5m gesetzt.
picStreetball.Line (Kx, Ky)-(Kx + 0.9, Ky + 0.5), , B ' Korb zeichnen
picStreetball.Line (Kx + 0.9, Ky + 0.5)-(Kx + 1, Ky + 0.5)
End Sub
über option explicit steht mehr oder weniger der Auftrag!
Könnt ihr helfen??