Run-Game funktioniert nicht ganz, wie es soll

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Rtholl.

    Run-Game funktioniert nicht ganz, wie es soll

    Liebe Member

    Ich habe mit ein kleines Katz&Maus Spiel programmiert und habe nun ein paar Fragen:

    1. Als erstes frage ich mich wieso nichts passiert, wenn die Spielfigur und "das Monster" (Gegenspieler) die gleiche Position haben (sprich man gefangen wurde)
    Am Schluss des Codes, soll überprüft werden, ob man gefangen wurde

    2. Wie kann ich das Spielfeld, welches sich in einem Panel befindet auf das Panel begrenzen, dass die Figuren nicht aus dem Panel raus gehen können?

    VB.NET-Quellcode

    1. Private Sub Form1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    2. Select Case e.KeyChar
    3. Case "w"
    4. Player.Top = Player.Top - 10
    5. Case "s"
    6. Player.Top = Player.Top + 10
    7. Case "a"
    8. Player.Left = Player.Left - 10
    9. Case "d"
    10. Player.Left = Player.Left + 10
    11. End Select
    12. End Sub
    13. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    14. If (Player.Location.X > Monster.Location.X) Then
    15. Monster.Left = Monster.Left + 5
    16. End If
    17. If (Player.Location.X < Monster.Location.X) Then
    18. Monster.Left = Monster.Left - 5
    19. End If
    20. If (Player.Location.Y < Monster.Location.Y) Then
    21. Monster.Top = Monster.Top - 5
    22. End If
    23. If (Player.Location.Y > Monster.Location.Y) Then
    24. Monster.Top = Monster.Top + 5
    25. End If
    26. If Player.Location.X And Player.Location.Y = Monster.Location.X And Monster.Location.Y Then
    27. MsgBox("Verloren!")
    28. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)
    29. End If
    30. End Sub


    Danke fürs Anschauen!
    Ich hab mir nicht alles angeschaut, aber es ist seeehr unwahrscheinlich, dass der Player, und das Monster die gleiche Position haben...
    Du musst eine Kollision prüfen. Und ich schreibe dir auch gleich wie das geht, aber erst sende ich das hier ab, damit ich der erste Poster bin.

    EDIT: Oke also : Ganz leicht : Du prüfst, ob die Player.X-Position größer als die Monster.X Position ist, aber trotzdem kleiner als die Monster.X Position + die Breite des Monsters.
    Das gleiche kannste mit Y machen, wenn du verstanden hast wie das geht. Wenn die Xposition des Spielers größer ist als die des Monsters, dann kann er rechts neben dem Monster sein.
    Wenn sie aber dazu noch kleiner sein muss, als die X-Position des Monsters plus die breite des Monsters, da x ja immer oben rechts einer Textur gemmesen wird, muss er das Monster berühren, damit das Ergebnis ausgelöst wird.
    Danke für die schnelle Antwort.

    Meinst du mit der Abfrage etwa sowas?

    VB.NET-Quellcode

    1. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    2. If (Player.Location.X > Monster.Location.X) And (Player.Location.X < (Monster.Location.X + Monster.Size.Width)) Then
    3. Monster.Left = Monster.Left + 5
    4. Else
    5. Timer1.Stop()
    6. MsgBox("Verloren")
    7. Timer1.Start()
    8. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)
    9. End If
    10. If (Player.Location.X < Monster.Location.X) And (Player.Location.X > (Monster.Location.X + Monster.Size.Width)) Then
    11. Monster.Left = Monster.Left - 5
    12. Else
    13. Timer1.Stop()
    14. MsgBox("Verloren")
    15. Timer1.Start()
    16. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)
    17. End If
    18. If (Player.Location.Y < Monster.Location.Y) And (Player.Location.Y > (Monster.Location.X + Monster.Size.Height)) Then
    19. Monster.Top = Monster.Top - 5
    20. Else
    21. Timer1.Stop()
    22. MsgBox("Verloren")
    23. Timer1.Start()
    24. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)
    25. End If
    26. If (Player.Location.Y > Monster.Location.Y) And (Player.Location.Y < (Monster.Location.Y + Monster.Size.Height)) Then
    27. Monster.Top = Monster.Top + 5
    28. Else
    29. Timer1.Stop()
    30. MsgBox("Verloren")
    31. Timer1.Start()
    32. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)
    33. End If
    34. End Sub


    Wenn ich das allerdings starte, habe ich immer verloren, egal wo meine Maus steht :(

    Noch ne Frage wegen der Spielfeld-Begrenzung haste da ne Idee wie ich das machen könnte?

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

    Schmeiß zunächst Deinen Code weg.
    4x dieser Code schreit nach Zusammenfassung.

    VB.NET-Quellcode

    1. Timer1.Stop()
    2. MsgBox("Verloren")
    3. Timer1.Start()
    4. Player.Location = New Point(Player.Location.X = 50, Player.Location.Y = 50)

    Was soll

    VB.NET-Quellcode

    1. New Point(Player.Location.X = 50, Player.Location.Y = 50)
    Meinst Du

    VB.NET-Quellcode

    1. New Point(50, 50)
    ?
    Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Dim pt As New Point(10, 20)
    2. Dim rc As New Rectangle(1, 2, 3, 4)
    3. If (rc.Contains(pt)) Then
    4. ' drin
    5. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Nein mit dem meinte ich, dass wenn ich erwischt wurde, die Maus wieder am Punkt X=50 und Y=50 springt und man dann nochmal spielen kann, bis man gefangen wurde. BDG hat mir ja iwas gesagt wie ich das schlau anstellen könnte, dass ich als Maus vom Monster gefangen werden kann. Nur bring ich das nicht ganz hin.

    RodFromGermany schrieb:

    Meinst Du

    VB.NET-Quellcode

    1. New Point(50, 50)

    Rtholl schrieb:

    Nein mit dem meinte ich, dass wenn ich erwischt wurde, die Maus wieder am Punkt X=50 und Y=50 springt und man dann nochmal spielen kann, bis man gefangen wurde.

    Was soll ich dazu sagen?
    Lerne die Grundlagen.
    Lerne zu verstehen, was andere Dir posten.
    Nutze Option Strict On
    Bilder
    • OptionStrictOn.jpg

      11,03 kB, 712×69, 106 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!