Flappy Bird - Problem mit den Röhren

  • VB.NET

Es gibt 49 Antworten in diesem Thema. Der letzte Beitrag () ist von Lica Studios.

    Flappy Bird - Problem mit den Röhren

    Hallo,

    ich habe begonnen Flappy Bird auf Visual Basic zu programmieren, und habe mit den Röhren begonnen. Ich habe die Breite des Fensters auf 300 eingestellt, und den Abstand der Röhren auf 120. Aber Problem ist, dass nicht nach 120 die anderen 2 Röhren kommen, sondern sie kommen erst, wenn die anderen zwei Röhren aus dem Fenster raus sind, obwohl sie nach 120 Pixel kommen sollten. ?(

    Wer kann mir weiterhelfen?

    Danke :)
    Da deine Beschreibung passt wird es an deinem Code liegen.
    Da können wir aber ohne Code nur raten und nicht helfen, außer deine Röhre wäre 180 Breit (120+180 = 300)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Da deine Beschreibung passt wird es an deinem Code liegen.Da können wir aber ohne Code nur raten und nicht helfen, außer deine Röhre wäre 180 Breit (120+180 = 300)


    Habe alles so eingestellt:

    Dim Pipe1() As Integer = {0, 0, 0, 0}
    Dim Pipe2() As Integer = {0, 0, 0, 0}
    Dim pipeWidth As Integer = 55
    Dim pipeDifY As Integer = 120
    Dim pipeDifX As Integer = 120
    Dim start As Boolean = True

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Lica Studios“ ()

    Das ist schön. Aber das ist nicht dein Code.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hier mal der komplette Code:

    Public Class Form5

    Quellcode

    1. [i]Dim Pipe1() As Integer = {0, 0, 0, 0}
    2. Dim Pipe2() As Integer = {0, 0, 0, 0}
    3. Dim pipeWidth As Integer = 55
    4. Dim pipeDifY As Integer = 120
    5. Dim pipeDifX As Integer = 120
    6. Dim start As Boolean = True
    7. Private Sub Game_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Game.Tick
    8. Me.Invalidate()
    9. End Sub
    10. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    11. End Sub
    12. Private Sub pipeTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pipeTimer.Tick
    13. If Pipe1(0) + pipeWidth <= 0 Or start = True Then
    14. Dim rnd As New Random
    15. Dim px As Integer = Me.Width
    16. Dim py As Integer = rnd.Next(40, (Me.Height - pipeDifY))
    17. Pipe1(0) = Pipe1(0) - 2
    18. Pipe1(2) = Pipe1(2) - 2
    19. End If
    20. If Pipe2(0) + pipeWidth <= 0 Then
    21. Dim rnd As New Random
    22. Dim px As Integer = Me.Width
    23. Dim py As Integer = rnd.Next(40, (Me.Height - pipeDifY))
    24. Dim p2x = px
    25. Dim p2y = py + pipeDifY
    26. Pipe2 = {px, py, p2x, p2y}
    27. Else
    28. Pipe2(0) = Pipe2(0) - 2
    29. Pipe2(2) = Pipe2(2) - 2
    30. End If
    31. If start = True Then
    32. start = False
    33. End If
    34. End Sub
    35. Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    36. Dim rnd As New Random
    37. Dim py As Integer = rnd.Next(40, (Me.Height - pipeDifY))
    38. Dim p2y As Integer = py + pipeDifY
    39. Pipe1 = {Me.Width, py, Me.Width, p2y}
    40. py = rnd.Next(40, (Me.Height - pipeDifY))
    41. p2y = py + pipeDifY
    42. Pipe2 = {Me.Width + pipeDifX, py, Me.Width + pipeDifX, p2y}
    43. End Sub
    44. Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    45. Game.Enabled = True
    46. pipeTimer.Enabled = True
    47. Button1.Visible = False
    48. End Sub
    49. Private Sub Form5_Paint1(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
    50. e.Graphics.FillRectangle(Brushes.Green, New Rectangle(Pipe1(0), 0, pipeWidth, Pipe1(1)))
    51. e.Graphics.FillRectangle(Brushes.Green, New Rectangle(Pipe1(2), Pipe1(3), pipeWidth, Me.Height - Pipe1(3)))
    52. e.Graphics.FillRectangle(Brushes.Green, New Rectangle(Pipe2(0), 0, pipeWidth, Pipe2(1)))
    53. e.Graphics.FillRectangle(Brushes.Green, New Rectangle(Pipe2(2), Pipe2(3), pipeWidth, Me.Height - Pipe2(3)))
    54. End Sub
    55. End Class[/i]


    Ich habe ein Tutorial auf YouTube versucht zu befolgen.

    Lica Studios schrieb:

    Ich habe ein Tutorial auf YouTube versucht zu befolgen.

    Dann werf den Code sofort in den Papierkorb. Bestätigt sich mal wieder, dass YouTube-Tutorials zu VB.NET zu 98% Mist sind. Der Code ist total ranzig.
    Also, lass die Finger von YT.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Mehr oder weniger OT: Man nutzt eig. oft Notation, d.h. anstatt "Form5" "frmGame" etc. //offtopic

    Pack den Code der FOrm5_Load mal in Form5_Shown, das sollte vllt gehen und vor die defenition des Random Ein

    Visual Basic-Quellcode

    1. Randomize()

    Lica Studios schrieb:

    Pipe2 = {Me.Width + pipeDifX, py, Me.Width + pipeDifX, p2y}


    Wenn ich das hier richtig verstehe setzt du die Pipe2 hier auf die Position von Formbreite+xPos von Pipe1. Damit ist klar warum die erst auftaucht wenn die 1. Pipe aus dem Bild verschwindet.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Darum geht es nicht. Nur weil etwas geht muss es nicht unbedingt gut sein. In der Programmierung geht es auch darum auf die Performance und eine saubere Architektur zu achten, denn sonst wird es schwierig.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Schamash schrieb:

    Lica Studios schrieb:

    Pipe2 = {Me.Width + pipeDifX, py, Me.Width + pipeDifX, p2y}


    Wenn ich das hier richtig verstehe setzt du die Pipe2 hier auf die Position von Formbreite+xPos von Pipe1. Damit ist klar warum die erst auftaucht wenn die 1. Pipe aus dem Bild verschwindet.


    Ich habe den Code umgeändert sodass es so aussah:

    Quellcode

    1. ​Pipe2 = {Me.Width, py, Me.Width + pipeDifX, p2y}


    Aber Problem war, dass immer die gleichen Pipes kamen und wenn die Ersten aus dem Bild waren, kamen dann die nächsten Pipes, hat also auch nicht weitergeholfen...

    Gonger96 schrieb:

    Dass du am Besten erstmal nur mit Konsolen arbeitest und später dann zu Forms oder WPF wechselst.


    Lol ich programmiere schon seit einem Jahr mit Windows-Forms, hab schon einen Web-Browser, Medienplayer, Scrennshot-Programm und einen FPS-Zähler programmiert. Aber um das geht es ja jetzt nicht.
    WAT. Ein Jahr? Dann solltest Du Dir aber schleunigst ein Buch aneignen, denn mit YouTube geht das nicht. Ich wette mit Dir, dass diese Programme von YT stammen und total schlechte Codes enthalten.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Lica Studios
    Also ich habe mir das "Spiel" mal erstellt.
    Der Code macht genau das was er "soll" er lässt EIN paar Röhren durchs Bild laufen.

    Um daraus ein Spiel zu machen, ist es nicht mit "mal kurz was anpassen" getan. Der Code unterstützt nur genau das. Wenn du mehr Röhren haben möchtest musst du mehr Röhren erstellen. Das ist aber weder "schön" noch "gut" noch "elegant". Ich würde dir empfehlen das ganze neu anzufangen.

    Versuche den Code zu verstehen und nutze die "richtigen" Elemente. Alles andere kannst du in die Tonne Hauen.

    der 2. Timer "Game" ist z.B. im Aktuellen Beispiel überflüssig. me.invalidate könntest du auch einfach am ende des Timers "pipeTimer" aufrufen.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich fasse das ganze mal kurz zusammen, weil ich glaube, ICH kann es nicht so gut erklären:

    Ich habe erst mal die Röhren programmiert, und es klappt wunderbar, Ich habe bei Dim pipeDifY As Integer = 120 eingestellt, damit die 2 Röhren die parallel übereinander sind 120 Pixel Abstand haben von den anderen 2 Röhren die parallel übereinander sind. Aber das Problem: Mein Fenster (oder meine Form) ist 300x595 groß und die anderen 2 Röhren kommen erst nach 300 Pixel, obwohl ich es auf 120 Pixel eingestellt habe.