Eine Art Flappy Bird programmieren

  • VB6

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    Eine Art Flappy Bird programmieren

    Hallo,
    ich bin mir relativ sicher das ihr alle das Spiel Flappy Bird kennt. Ich versuche als Übung dieses Spiel sozusagen nachzubauen. Ich bin jetzt soweit, dass die Balken durch die man durchfliegen muss erstellt werden und das man meinen Character (immoment nur eine Picture Box) bewegen kann (nur nach oben/vorne). Nun versuche ich irgendwie eine relativ realistische "Gravitation" zu programmieren.
    Mein bisheriger Ansatz war mithilfe eines Timers, der die Eigenschaften .top der PictureBox halt jeweils so verändert das es sich nach unten bewegt.

    Mein Code sieht bis jetzt so aus:

    Visual Basic-Quellcode

    1. Dim a As Integer
    2. Dim c As Integer
    3. Dim x As Integer
    4. Dim d As Integer
    5. Dim i As Integer
    6. Dim n As Integer
    7. Private Sub cbStart_Click()
    8. Timer1.Enabled = True
    9. x = 0
    10. d = 0
    11. For x = 0 To 10000 Step 1500
    12. Pic1.Line (x, a)-(d, -20), vbBlack, BF
    13. Pic1.Line (x, c)-(d, 6000), vbBlack, BF
    14. d = x + 1000
    15. a = Int((2000 * Rnd) + 1)
    16. c = a + 2000
    17. Next x
    18. End Sub
    19. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    20. Select Case KeyCode
    21. Case 38:
    22. Me.pic2.Top = Me.pic2.Top - 750
    23. Me.pic2.Left = Me.pic2.Left - 450
    24. End Select
    25. End Sub
    26. Private Sub Form_Load()
    27. n = 0
    28. cbStart.Visible = True
    29. Timer1.Enabled = False
    30. Me.KeyPreview = True
    31. End Sub
    32. Private Sub Timer1_Timer()
    33. For i = 0 To 20
    34. Me.pic2.Top = Me.pic2.Top + 5
    35. Next i
    36. End Sub


    Meine Frage ist jetzt, wie kann ich das ganze noch ein bisschen "realistischer" machen, da z.B. beim "Springen" also der Pfeiltaste nach oben, der Spieler ja sozusagen hochteleportiert wird und nicht hoch-"springt". Und zusätzlich noch wie ich daraus ein unendliches game machen kann, bzw. so um die 50 Balken mehr reinprogrammieren kann. Weil wenn ich den Wert z.B. auf 20.000 erhöhe ist meine PictureBox zu klein.

    Sorry wenn es unübersichtlich ist oder so, bin sehr neu hier.

    Mit freundlichem Gruß
    lang

    Verschoben. ~Thunderbolt

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Thunderbolt“ ()

    Nee, ich kenn Flappy Bird nicht. Aber hab bei youtube geschaut. Geht n bisken in Richtung Crazy Jump!, wo es auch schon um Physik ging.
    Statt schon das komplette Level im Voraus zu erstellen, generiere es zur Laufzeit. Besonders gut, wenn Du einen scrollenden Screen hast, wo also Dein Vögelchen effektiv auf der Stelle bleibt und sich die Röhren bewegen. Dann kann man nämlich außerhalb des Screens die Röhren generieren und muss nicht schon vor Spielbeginn wissen, was abgeht. Siehe A.I. learns to play Flappy Bird.
    Für die Physik: Tja, Physikunterricht eben. Zu irgendwas muss der ja gut sein :P Also: Der freie Fall ist nun mal eine beschleunigte Bewegung, daher nimmt die FallGeschwindigkeit in Richtung Boden konstant zu. Ich sag nur s = g:2 x t² Und was wirkt der Gravitation entgegen? Flügelschläge, die eine entgegengesetzte Bewegung nach oben bewirken.

    Das Hochteleportieren liegt einmal an Deinem Timer1_Timer-Code. Bei jedem Ticken des Timers bewegt er die PicBox in 20 Schritten um 5 Pixel runter. Die Änderungen werden aber nicht gezeigt. Da kannst Du das Teil gleich um 100 Pixel nach unten schmeißen. Bei jedem Tick musst Du die Gravitation quasi walten lassen, siehe oben. t in der o.g. Formel wird dann quasi nach jedem Flügelschlag auf Null gesetzt. Und mit dem Springen/Hochfliegen: Mach einen Counter rein, der beim Drücken der Taste auf z.B. 20 gesetzt wird und bei jedem Timer_Tick (sorry, das war VB.Net) Timer1_Timer-Aufruf um 1 verringert wird. Solange der Counter > 0 ist, wird pic2.Top um 5 kleiner. Wenn der Counter Null ist, fängt es wieder mit der Gravitation an.

    btw: auch in VB6 müsste statt Me.pic2.Top = Me.pic2.Top + 5 gehen: Me.pic2.Top += 5. Oder?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Generell würde ich es so machen das dein Avatar 2 Geschwindigkeiten hat. Eine in X und eine in Y Richtung.Wobei X die Bewegung nach Rechts ist die mit Taste Pfeil-Rechts schneller wird mit Taste Pfeil Links langsamer.
    Die Geschwindigkeit Y bewegt deinen Avatar nach oben. Diese errechnest Du nach der Formel ( V(End) = V(Anfang) − g⋅t ) Sprich die aktuelle Geschwindigkeit ist die Anfangsgeschwindigkeit minus der Gravitation mal der Zeit)

    Wenn ein drücken der Pfeiltaste nach oben jetzt deine Figur zum Beispiel mit 10 m/s losbewegt ist sie nach etwa einer Sekunde bei 0 m/s Aufwärtsbewegung angekommen und wird dann nach unten beschleunigt.
    Nach wieder einer Sekunde ist sie wieder am Ausgangspunkt mit der negativen Ausgangsgeschwindigkeit angekommen. Natürlich vernachlässigen wir die Reibung.

    Wenn Du jetzt noch einen Boden definierst bei X = 0 kannst du sogar einscheiden ob Dein Avatar falls die Endgeschwindigkeit einen Bestimmten Betrag überschreitet zerschellt.
    Für den flüssigen Ablauf solltest Du mit verschiedenen Gravitationskonstaten experimentieren. Je nach dem wie groß Dein Spielfenster ist könntest Du erstmal mit 100 Pixel/s² anfangen.
    Gibt es einen bestimmten Grund dafür, daß du mit der völlig verallteten Sprache VB6,
    anstatt mit der aktuellen Sprache VB.Net zu arbeitest ?
    Habe hier im Forum vor einigen Jahren mal einen Klon gebastelt und mit euch geteilt. Die Links scheinen auch noch zu funktionieren. Ist zwar nicht mit VB gemacht, aber vielleicht kannst du es dir da bisschen abschauen wie es gemacht war. Die "Physic" bzw. die Art wie sich der Vogel bewegt ist da relativ genau zum original.

    FlappyBird Klon in Java/Android mit LibGDX