![]() |
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 [/code] über option explicit steht mehr oder weniger der Auftrag! Könnt ihr helfen?? |
| Alle Zeitangaben in WEZ +1. Es ist jetzt 17:33 Uhr. |
Powered by vBulletin® Version 3.8.10 (Deutsch)
Copyright ©2000 - 2026, vBulletin Solutions, Inc.
SEO by vBSEO 3.5.2 ©2010, Crawlability, Inc.