Klickspiel Programierung / Mehrere Labels gleichzeitig auf "enabled" setzen / Zufallsgenerator

  • VB.NET
  • .NET (FX) 4.0

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Klickspiel Programierung / Mehrere Labels gleichzeitig auf "enabled" setzen / Zufallsgenerator

    Meine Aufgabe ist es bis nächsten Donnerstag ein Spiel in Informatik (11. Klasse) abzugeben. Meine Idee lautet wie folgt: Es gibt ein 8x8 Feld aus Labelboxen (größe 50x50) und man muss innerhalb von einer bestimmten Zeit so viele Label anklicken wie nur möglich. Es ist allerdings immer nur ein Label sichtbar und aktiviert. Sobald man das hervorgehobene Label anklickt erhält man einen Punkt. Das geklickte Label wird wieder unsichtbar und ein anderes (per Zufall) gewähltes Label erscheint. Dies wiederholt sich bis die Zeit abgelaufen ist.
    Mein Problem ist nun das ich nicht weiß wie ich per Zufall die Label aktiviere oder verschwinden lasse... ?(

    Ich bitte um Verständniss, denn ich bin ein kompletter Anfänger was Visual Basic angeht. Falls ihr Lösungsvorschläge hättet bitte ich deshalb um simple Vorschläge ^^ .
    Hier ist noch einmal was ich bisher aus eigener Erfahrung geschaffen habe.
    Entwurf gyazo.com/e656e7be49c49ef656b679070affd7c7 (s. Anhang)
    Code

    VB.NET-Quellcode

    1. Public Class Spiel
    2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. ms.Text = ms.Text + 1
    4. If ms.Text = 100 Then
    5. sek.Text += 1
    6. ms.Text = 0
    7. End If
    8. If sek.Text = 1 Then
    9. Timer1.Stop()
    10. Dim ergebnis As DialogResult = MessageBox.Show("Zeit abgelaufen." & vbCrLf & "Noch einmal?", "Auswahl", MessageBoxButtons.YesNo)
    11. If ergebnis = Windows.Forms.DialogResult.Yes Then
    12. Start.ranking.Items.Add("Punkte --> " & lbl_punkte.Text & " Zeit " & sek.Text & " : " & ms.Text)
    13. Neustart()
    14. End If
    15. If ergebnis = Windows.Forms.DialogResult.No Then
    16. Start.ranking.Items.Add("Punkte --> " & lbl_punkte.Text & " Zeit " & sek.Text & " : " & ms.Text)
    17. Start.Show()
    18. Me.Close()
    19. End If
    20. End If
    21. End Sub
    22. Private Sub Neustart()
    23. sek.Text = "0"
    24. lbl_punkte.Text = "0"
    25. End Sub
    26. Private Sub cmd_spielen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_spielen.Click
    27. Timer1.Start()
    28. End Sub
    29. Private Sub punkt(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click, Label8.Click, Label7.Click, Label64.Click, Label63.Click, Label62.Click, Label61.Click, Label60.Click, Label6.Click, Label59.Click, Label58.Click, Label57.Click, Label56.Click, Label55.Click, Label54.Click, Label53.Click, Label52.Click, Label51.Click, Label50.Click, Label5.Click, Label49.Click, Label48.Click, Label47.Click, Label46.Click, Label45.Click, Label44.Click, Label43.Click, Label42.Click, Label41.Click, Label40.Click, Label4.Click, Label39.Click, Label38.Click, Label37.Click, Label36.Click, Label35.Click, Label34.Click, Label33.Click, Label32.Click, Label31.Click, Label30.Click, Label3.Click, Label29.Click, Label28.Click, Label27.Click, Label26.Click, Label25.Click, Label24.Click, Label23.Click, Label22.Click, Label21.Click, Label20.Click, Label2.Click, Label19.Click, Label18.Click, Label17.Click, Label16.Click, Label15.Click, Label14.Click, Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click
    30. lbl_punkte.Text += 1
    31. End Sub
    32. Private Sub beenden(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    33. If e.KeyCode = Keys.Escape Then
    34. Start.Show()
    35. Me.Close()
    36. End If
    37. End Sub
    38. End Class
    Bilder
    • e656e7be49c49ef656b679070affd7c7.png

      17,37 kB, 892×497, 197 mal angesehen
    Willkommen im Forum. :thumbup:

    Nikkel schrieb:

    Mein Problem ist nun das ich nicht weiß wie ich per Zufall die Label aktiviere oder verschwinden lasse.
    Pack alle Label in eine List und hole Dir per Zufallsgenerator den Index des darzustellenden Labels.
    Ohne das Klicken sieht das nun so aus:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private lbl As New List(Of Label)
    3. Private rnd As New Random
    4. Private lastIndex As Integer = 0
    5. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    6. lbl.AddRange({Me.Label1, Me.Label2, Me.Label3})
    7. For Each lb In lbl
    8. lb.Visible = False
    9. Next
    10. End Sub
    11. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    12. Me.Timer1.Enabled = Not Me.Timer1.Enabled ' Timer togglen
    13. End Sub
    14. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    15. lbl(lastIndex).Visible = False
    16. lastIndex = rnd.Next(0, lbl.Count)
    17. lbl(lastIndex).Visible = True
    18. End Sub
    19. End Class
    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!
    Hi RFG,
    es sollte

    VB.NET-Quellcode

    1. lastIndex = rnd.Next(0, lbl.Count - 1)


    sein, da ja der Index bei 0 beginnt.

    LG
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer

    RushDen schrieb:

    Was ist denn Start in deinem Code?
    Was genau meinst Du?
    Mit dem Button wird der Timer getoggelt, das Klicken hab ich nicht implementiert. Das ist nur der "Zufalls"-Rumpf, den Schnickschnack kann @Nikkel allein machen. :D
    @milaim : Hat RushDen schon gesagt.
    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!

    milaim schrieb:

    Sorry
    Du musst Dich nicht bei mir entschuldigen, eher bei Dir. ;)
    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!
    Ich war grad bei PHP und da gibt eben rand(0,2) -> 0, 1 oder 2 aus - also auch den maxValue.. :)
    Man merkt schon, dass ich seit fast 2 Jahren aus dem Thema raus bin ;)
    "Wenn jemand in einem Betrieb unverzichtbar ist, dann ist dieser Betrieb falsch organisiert." - Roberto Niederer

    RodFromGermany schrieb:

    RushDen schrieb:

    Was ist denn Start in deinem Code?
    Was genau meinst Du?
    Mit dem Button wird der Timer getoggelt, das Klicken hab ich nicht implementiert. Das ist nur der "Zufalls"-Rumpf, den Schnickschnack kann @Nikkel allein machen. :D
    @milaim : Hat RushDen schon gesagt.


    Damit meinte Ich den TE, weil ich glaube das Start eine Form ist und keine Instanz.

    RushDen schrieb:

    Damit meinte Ich den TE
    Jou, hab ich falsch verstanden.
    Leider hat sich @Nikkel noch nicht zu geäußert.
    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!
    Erstmal vielen dank für die schnelle Hilfe :D Ich hätte allerdings noch eine letzte Frage. Ich würde es gerne so einrichten, dass alle 10 Punkte der Timer um 5 Sekunden zurückgesetzt wird. Ich bin mir sicher das man das mit einer For Next/Each Schleife einrichten kann, aber wie?

    Nikkel schrieb:

    dass alle 10 Punkte der Timer um 5 Sekunden zurückgesetzt wird.
    Was meinen tust genau Du?
    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!