vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Memory - Buttons mit Zufallszahlen belegen 
Autor: iComupterfreak
Datum: 20.11.12 19:25

Hallo, ich arbeite gerade an einem Memory.

Bisher sieht mein Code zur Belegung der Buttons so aus:

Sub Random()
        Dim zahlen As New ListBox
        Dim wert As Integer = 1
        Dim zähler As Integer
        For i As Integer = 0 To 15
            zahlen.Items.Add(wert)
            zähler += 1
            If zähler = 2 Then
                wert += 1
                zähler = 0
            End If
        Next
        'Zahlen ist nun mit den Zahlen von 1-8 jeweils zwei mal gefüllt (1, 1, 
        ' 2, 2, 3, 3, ....)
        Dim randomitem As Integer
        For i As Integer = 0 To 15
            randomitem = CInt(Rnd() * zahlen.Items.Count - 1)
            cmd(i).Text = If(zahlen.Items(randomitem).ToString <> "", _
              zahlen.Items(randomitem).ToString, "Button")
            zahlen.Items.RemoveAt(randomitem)
        Next
    End Sub
Nun besteht folgendes Problem:
Wenn ich das Programm Debugge sind nicht alle Buttons mit Zahlen gefüllt. Ich habe schon alles ausprobiert und weiß nun nicht mehr weiter

Oder hat vielleicht jemand von euch eine Idee wie ich das mit den Zufallszahlen lösen könnte?

_______________________________________________________________________
Heute stehen wir am Abgrund. Morgen sind wir schon einen Schritt weiter.

iComputerfreak

Beitrag wurde zuletzt am 20.11.12 um 19:27:01 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Memory - Buttons mit Zufallszahlen belegen 
Autor: iComupterfreak
Datum: 20.11.12 19:35

Ok sorry hab meinen Fehler:

Blödes Punkt-Vor-Strich

randomitem = CInt(Rnd() * zahlen.Items.Count - 1)
Er rechnet statt "zahlen.items.count - 1" nur das "zahlen.items.count" als Obergrenze. Da fehlt also noch eine Klammer.

_______________________________________________________________________
Heute stehen wir am Abgrund. Morgen sind wir schon einen Schritt weiter.

iComputerfreak

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Memory - Buttons mit Zufallszahlen belegen 
Autor: ModeratorDaveS (Moderator)
Datum: 20.11.12 19:54

Ich hab's mal so gemacht

TableLayoutPanel1 (4x4), Button1, Label1...
Public Class Form1
 
    Private vals(15) As Integer
    Private r As New Random()
    Private idx1 As Integer
    Private idx2 As Integer
    Private lidx As Integer = -1
    Private bgc As Color
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
 
        Label1.Text = String.Empty
        bgc = Me.BackColor
 
        ' Create button array in TableLayoutPanel
        For i = 0 To 15
            Dim b As New Button
            b.Text = String.Empty
            b.Tag = i
            b.Enabled = False
            AddHandler b.Click, AddressOf Button_Click
            TableLayoutPanel1.Controls.Add(b)
        Next
 
    End Sub
 
    ' Start game
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
 
        Dim i As Integer = 0
        Me.BackColor = bgc
 
        ' Create random numbers array
        Do
            Dim newval As Integer = Math.Floor(100 * r.NextDouble()) + 1
            If Not vals.Contains(newval) Then
                vals(i) = newval
                Debug.WriteLine("Add newval " & i.ToString() & " " & _
                  newval.ToString())
                i += 1
            End If
        Loop While i < 16
 
        idx1 = 0
        idx2 = 0
 
        ' Set two buttons the same
        Do
            idx1 = Math.Floor(16 * r.NextDouble())
            idx2 = Math.Floor(16 * r.NextDouble())
        Loop While idx1 = idx2 OrElse idx1 + 1 = idx2 OrElse idx1 - 1 = idx2 _
          OrElse idx1 + 4 = idx2 OrElse idx1 - 4 = idx2
 
        vals(idx1) = vals(idx2)
 
        ' Enable buttons and set "enabled" colours
        For Each b As Button In TableLayoutPanel1.Controls
            b.BackColor = Color.Honeydew
            b.Text = "?"
            b.Enabled = True
        Next
 
        lidx = -1
 
    End Sub
 
    ' Check result when user selects button
    Private Sub Button_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs)
 
        Dim sb As Button = CType(sender, Button)
        Dim idx As Integer = sb.Tag
 
        If (idx = idx1 AndAlso lidx = idx2) OrElse (idx = idx2 AndAlso lidx = _
          idx1) Then
 
            ' The user hit the two buttons consecutively. Well done, user!
 
            ' Show all numbers and hilight the two equal buttons
            Dim i As Integer = 0
            For Each b As Button In TableLayoutPanel1.Controls
                b.Text = vals(i).ToString()
                If i = idx1 Or i = idx2 Then
                    b.BackColor = Color.Red
                End If
                i += 1
            Next
 
            ' Now flash the background 
            For i = 1 To 3
                Me.BackColor = Color.BlueViolet
                Me.Refresh()
                System.Threading.Thread.Sleep(200)
                Me.BackColor = bgc
                Me.Refresh()
                System.Threading.Thread.Sleep(100)
            Next
 
            Me.BackColor = Color.BlueViolet
            Me.Refresh()
            System.Threading.Thread.Sleep(3000)
 
            ' Reset everything
            Me.BackColor = bgc
            i = 0
            For Each b As Button In TableLayoutPanel1.Controls
                b.Text = String.Empty
                b.BackColor = Me.BackColor
                b.Enabled = False
                i += 1
            Next
            Label1.Text = String.Empty
            lidx = -1
            idx1 = 0
            idx2 = 0
        Else
            ' Show value for 1 second and then let user try again
            sb.Text = vals(sb.Tag).ToString()
            sb.BackColor = Color.Yellow
            Me.Refresh()
            System.Threading.Thread.Sleep(1000)
            sb.Text = "?"
            sb.BackColor = Color.Honeydew
            lidx = idx
        End If
 
    End Sub
 
    ' Secret label with the answer
    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Label1.Click
 
        If Label1.Text = String.Empty AndAlso idx1 <> 0 Then
            Label1.Text = idx1.ToString() & ", " & idx2.ToString()
        Else
            Label1.Text = String.Empty
        End If
 
    End Sub
 
End Class

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Memory - Buttons mit Zufallszahlen belegen 
Autor: iComupterfreak
Datum: 20.11.12 20:05

Vielen Dank DaveS,
hast du den Programmcode gerade eben geschrieben oder hast du den schon gespeichert gehabt ? :O

Ich hab mir alles durchgelesen und verstanden. Und Kompliment: Du hast sogar noch eingefügt, dass er 2 gleiche Zahlen nebeneinander vermeidet

Also nochmals Vielen Dank für den Code

_______________________________________________________________________
Heute stehen wir am Abgrund. Morgen sind wir schon einen Schritt weiter.

iComputerfreak

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Memory - Buttons mit Zufallszahlen belegen 
Autor: ModeratorDaveS (Moderator)
Datum: 20.11.12 20:17

Das ist nicht neu, so schnell bin ich auch nicht Ich hatte einfach keine Lust den richtigen Teil auszuschneiden und habe deswegen das komplette kleine Programm gepostet. Mein Sudoku Control (C#) liegt auch irgendwo hier rum, falls du dich für solche Spielchen interessierst.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel