Hilfe bei Spiel

  • VB.NET

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Hilfe bei Spiel

    HI Leute,
    ich brauche dringend Hilfe bei einem Spiel, das ich für mein informatikunterricht in der Schule schreiben soll.

    Ich mache ein Spiel, in dem eine picturebox (pb_fänger) eine andere picturebox (pb_gefangen) fangen soll.
    Sobald pb_fänger pb_gefangen berührt soll es ein Punkt geben.
    Das Spiel ist schon fertig, allerdings total langweilig!

    Folgendes Problem:

    Punkte bekommt man nur wenn pb_fänger.location = pb_gefangen.location (ich kann nicht besonders gut programmieren und das war das einfachste was mir eingefallen ist).

    Wie muss ich dren Programmcode schreiben, damit es auch Punkte gibt, wenn sich pb_fänger und pb_gefangen nur berühren?


    Danke im Vorraus.
    Das Zauberwort heißt IntersectsWith

    VB.NET-Quellcode

    1. Dim rc1 As New Rectangle(1, 2, 3, 4)
    2. Dim rc2 As New Rectangle(2, 3, 4, 5)
    3. Dim contact As Boolean = rc1.IntersectsWith(rc2)
    Pack die Rahmen Deiner Boxen in die Rectangles und das Spiel Deinem Lehrer auf den Tisch. :thumbsup:
    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!
    Korrekt. Da, wo Du prüfst, ob die Location gleich ist, packst Du den Code anstelle des alten Tests hin.
    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!
    So sieht das jetzt aus funktioniert allerdings nicht.
    Sorry aber ich bin absolut beschissen im Programmieren ;)

    Private Sub pb_fänger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pb_fänger.LocationChanged
    If contact Then gewonnen = gewonnen
    lbl_gewonnen.Text = gewonnen + 1
    If gewonnen = 5 Then tmr_bewegungblau.Interval = 9000
    If gewonnen = 10 Then tmr_bewegungblau.Interval = 8000
    If gewonnen = 15 Then tmr_bewegungblau.Interval = 7000
    If gewonnen = 20 Then tmr_bewegungblau.Interval = 6000
    If gewonnen = 25 Then tmr_bewegungblau.Interval = 5000
    If gewonnen = 30 Then tmr_bewegungblau.Interval = 4000
    If gewonnen = 40 Then tmr_bewegungblau.Interval = 3000
    If gewonnen = 50 Then tmr_bewegungblau.Interval = 2000
    If gewonnen = 60 Then tmr_bewegungblau.Interval = 1000

    End Sub

    Arnole schrieb:

    VB.NET-Quellcode

    1. lbl_gewonnen.Text = gewonnen + 1

    Anfängerfehler, Rechnen mit Zahlen und Rexten.
    Gib Deinem Projekt Option strict On, da weint er gleich.

    VB.NET-Quellcode

    1. If contact Then
    2. gewonnen += 1
    3. End If
    4. lbl_gewonnen.Text = gewonnen.ToString
    Wie wird denn contact berechnet?
    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!
    Schieb mal bitte Deinen Code hoch und schreib dazu, was für Controls Du hast und wie die heißen.
    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!
    Public Class Form1
    Dim gewonnen As Integer
    Dim rc1 As New Rectangle(90, 90, 90, 90)
    Dim rc2 As New Rectangle(90, 90, 90, 90)
    Dim contact As Boolean = rc1.IntersectsWith(rc2)




    Private Sub pb_fänger_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pb_fänger.LocationChanged
    If contact Then
    gewonnen += 1
    End If
    lbl_gewonnen.Text = gewonnen.ToString
    If gewonnen = 5 Then tmr_bewegungblau.Interval = 9000
    If gewonnen = 10 Then tmr_bewegungblau.Interval = 8000
    If gewonnen = 15 Then tmr_bewegungblau.Interval = 7000
    If gewonnen = 20 Then tmr_bewegungblau.Interval = 6000
    If gewonnen = 25 Then tmr_bewegungblau.Interval = 5000
    If gewonnen = 30 Then tmr_bewegungblau.Interval = 4000
    If gewonnen = 40 Then tmr_bewegungblau.Interval = 3000
    If gewonnen = 50 Then tmr_bewegungblau.Interval = 2000
    If gewonnen = 60 Then tmr_bewegungblau.Interval = 1000
    End Sub



    Ich steuere pb_fänger mit buttons

    pb_gefangen:


    Private Sub tmr_bewegungblau_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmr_bewegungblau.Tick
    pb_gefangen.Left = Rnd() * 1040
    pb_gefangen.Top = Rnd() * 550
    End Sub
    Klar:

    VB.NET-Quellcode

    1. Dim rc1 As New Rectangle(90, 90, 90, 90)
    2. Dim rc2 As New Rectangle(90, 90, 90, 90)
    3. Dim contact As Boolean = rc1.IntersectsWith(rc2)
    contact ist also True. :D
    Du musst den Rectangles die Koordinaten der Boxen geben:

    VB.NET-Quellcode

    1. Dim rc1 = New Rectangle(PictureBox1.Location, PictureBox1.Size)
    2. Dim rc2 = New Rectangle(PictureBox2.Location, PictureBox2.Size)
    Male die beiden Boxen so, dass sie sich zu Beginn nicht berühren.
    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!
    Du prüfst nur ganz am Anfang, ob sich die beiden Rechtecke überschneiden. Du musst aber immer dann prüfen, wenn sich die Location einer PictureBox ändert.

    Übrigens, das wäre schöner:

    VB.NET-Quellcode

    1. Private int _gewonnen
    2. Public Property Gewonnen() As Integer
    3. Get
    4. Return _gewonnen
    5. End Get
    6. Set (ByVal value As Integer)
    7. _gewonnen = value
    8. lbl_gewonnen = _gewonnen.ToString
    9. End Set
    10. End Property
    11. ...
    12. If Contact Then Gewonnen += 1

    Google hierzu mal nach dem Stichwort "VB .NET Property"
    Grüße

    Arnole schrieb:

    Jetzt kann er nicht mehr debuggen

    Wer ist er?
    Wie äußert sich das?
    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!
    Merkwürden.
    Hast Du Deine Sourcen im Studio-Default-Verzeichnis gespeichert?
    Leg Dir ein separates Projekte-Verzeichnis an, in dem Du Deine Quellen speicherst.
    Hast Du eine Nicht-Voll-Version? Die spinnt manchmal rum.
    Erstell ggf. ein neues Projekt und übernimm die Quellen aus dem alten Projekt.
    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!