Einzelnen Beitrag anzeigen
Alt 29.11.2004, 09:01   #1 (permalink)
cromelain
Gast
 

Beiträge: n/a

Standard Streetball in VB

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??
  Mit Zitat antworten