wie angekündigt kurzes statement zum random generator.
alle karten sind in einer userform namens frmHolecards in "image-boxen" hinterlegt welche von c1 bis c52 durchnummeriert wurde. alle karten haben hier zwar einen statischen wert welcher in etwa mit der kartennummer wächst aber habe mich dabei nicht gross geachtet ob die reihenfolge eingehalten wird.
sind keine holecards verteilt wird mittels dem "shuffle up and deal"-button folgender programmcode aufgerufen:
Code:
Sub shuffledeal()
Dim anzCardsInDeck, rndNr, anzPlayer, cnt, counter, rndC As Integer
Dim card, anzCards, feld As String
table.c1.Picture = frmHolecards.c_empty.Picture
table.c1.Tag = ""
table.c2.Picture = frmHolecards.c_empty.Picture
table.c2.Tag = ""
table.c3.Picture = frmHolecards.c_empty.Picture
table.c3.Tag = ""
table.c4.Picture = frmHolecards.c_empty.Picture
table.c4.Tag = ""
Sheets(2).Select
counter = 1
anzCardsInDeck = 52
anzPlayer = table.anzspieler.Value
anzCards = anzPlayer * 2
cnt = 1
Range("A1:A52").clear
Do While Not counter > 52
Randomize
rndC = Int((anzCardsInDeck - 1 + 1) * Rnd + 1)
If Cells(rndC, 1).Value = Empty Then
Cells(rndC, 1).Value = "c" & counter
Else
Do While Not Cells(rndC, 1).Value = Empty
rndC = rndC + 1
If rndC > 52 Then
rndC = 1
End If
Loop
Cells(rndC, 1).Value = "c" & counter
End If
counter = counter + 1
Loop
Do While Not cnt > anzCards
Randomize
rndNr = Int((anzCardsInDeck - 1 + 1) * Rnd + 1)
card = Sheets(2).Range("A" & rndNr).Value
Sheets(2).Range("A" & rndNr).Value = ""
Do While card = Empty
rndNr = rndNr + 1
If rndNr > anzCardsInDeck Then
Randomize
rndNr = Int((anzCardsInDeck - 1 + 1) * Rnd + 1)
End If
card = Sheets(2).Range("A" & rndNr).Value
Sheets(2).Range("A" & rndNr).Value = ""
Loop
feld = "c" & cnt
table(feld).Picture = frmHolecards(card).Picture
table(feld).Tag = "c"
cnt = cnt + 1
Loop
Sheets(1).Select
End Sub
soweit ich das verstanden habe wird ab "Randomize" die systemzeit gemessen bis die random zahl uf der nächsten zeile generiert wurde. dieser wert ist abhängig von sonstigen prozessen welche zur zeit bearbeitet werden und somit für privatpersonen absolut genug random.
ich wollte aber ein bisschen etwas kniffligeres austüfteln und habe mich für folgende methode entschieden:
zu beginn wird auf sheet 2 namens "kartendeck" gewechselt. nun werden in zelle 1-52 alle zahlen von 1-52 zufällig verteilt eingefügt. (jeweils wie die "image-boxen" benannt wurden. also c34 zum beispiel)
diese reihenfolge bleibt jetzt für den rest einer runde.
nun kommt das eigentliche austeilen der karten:
jede holecardbox hat eine ID von c1-c8 (jeweils 2 holecardboxes pro spieler).
nun wird pro holecardbox (anzahl abhängig von gewählter spieleranzahl) zufällig ein wert von 1-52 erzeugt. wird als erstes der wert 18 ausgegeben so wird die karte der imagebox welche in zelle A18 auf sheet 2 ("kartendeck") steht, in die erste holecardbox kopiert und der inhalt von zelle A18 gelöscht da jede karte nur einmal zugewiesen werden kann. wird als zweite zufallszahl erneut die 18 ausgegeben, so merkt das programm dass die zelle leer ist und nimmt die nächste zelle, in diesem fall A19. wäre die nächste zelle A53 so wird erneut eine zufällige zahl generiert.
mit den boardcards verhält es sich ziemlich gleich wie oben beschrieben.
wenn ihr mehr infos zur umsetzung haben wollt. dann nur zu.