Passwort vergessen?   -   Registrieren

Selfmade HeadsUp-Dealer
Verfasser Nachricht
von7thal Offline
Administrator

Beiträge: 3,209
Registriert seit: Mar 2007
Beitrag #1
Selfmade HeadsUp-Dealer
Wie einige von euch vielleicht schon in einem Blog von armi gelesen habt, habe ich ein kleines Tool geschrieben, welches das mühsame Dealen in Shorthanded-Games abnehmen soll.
Vor allem in HeadsUp-Matches sind mehrere uncontested Pots keine Seltenheit.

Dieses Tool wird verwendet in dem man einen Laptop, bei welchem der Bildschirm ganz herunter geklappt werden kann, mit Karten ausrüstet um die Karten in den Ecken abzudecken. Ich habe keine Ahnung wieviele solche Laptops es gibt, meiner gehört dazu.

Gesetzt wird wie gehabt mit Chips.

Jeder muss für sich selbst entscheiden ob durch dieses Tool zuviel des Pokerfeelings verloren geht oder ob es die Geschwindkeit wert ist. (Wohl so 170 Hände pro Stunde wenn pre viel gemuckt wird.)

Ich muss euch aber warnen dass es weder wirklich sauber geschrieben, noch kommentiert noch von a-z getestet wurde. In seltenen Fällen kann es auch vorkommen dass sich einige Karten nicht mehr wechseln und das Programm neugestartet werden muss.

Das Tool wurde in Excel VBA 2003 für XP geschrieben da ich mich nur mit dieser Programmiersprache ein bisschen auskenne.
Ich habe keinerlei Tests auf Vista gemacht!
Sollte es auf Vista nicht funktionieren sollte die Anpassung aber nicht allzu schwierig sein.

Die Karten werden 2fach random gemixt. Als zufälliger Faktor wird die Systemzeit genommen.

Der Code ist offen einsehbar und ihr könnt ihn gern verbessern aber dann bitte hier posten.

Download HeadsUp-Dealer-1.0

Letzter Tipp. Bleibt das Programm hängen versucht als erstes die Tastenkombination Ctrl+Alt+Pause.

Have fun@ausprobieren. Vorschläge erwünscht!

PS: Habe mich nun def. als Riesennerd geoutet :-)

pokercoaching.ch
dein persönlicher Pokercoach

OmahaWinners.com
Seht euch mein kostenloses Omaha Preflop Chart an!
03-20-2009 05:36 PM
zitieren
Ostarr Offline
Posting Freak

Beiträge: 4,071
Registriert seit: Mar 2007
Beitrag #2
Re: Selfmade HeadsUp-Dealer
Habs kurz auf Vista ausporbiert und bei mir funktionierts,
ist sicher eine witzige idee, habe aber warscheinlich keine verwendung dafür....
03-20-2009 05:59 PM
zitieren
Fabo360 Offline
Posting Freak

Beiträge: 1,312
Registriert seit: Jan 2007
Beitrag #3
Re: Selfmade HeadsUp-Dealer
sehr geil, vonsi! hast du den random generator selber entworfen?
03-20-2009 06:20 PM
zitieren
dj_inter Offline
Posting Freak

Beiträge: 1,346
Registriert seit: Nov 2007
Beitrag #4
Re: Selfmade HeadsUp-Dealer
sehr nice, thx a lot

Nach dem 18- ist das 12- wie 4-tabling
03-20-2009 10:10 PM
zitieren
von7thal Offline
Administrator

Beiträge: 3,209
Registriert seit: Mar 2007
Beitrag #5
Re: Selfmade HeadsUp-Dealer
Fabo360 schrieb:sehr geil, vonsi! hast du den random generator selber entworfen?

nein. es wurde der random generator von vba verwendet, jedoch mit 2 unabhängigen zufallsgeneratoren.
ich werde euch das programm heute abend noch detaillierter erläutern.
zudem müsste noch eine individuelle bildschirmanpassung realisiert werden. momentan ist das spielfeld auf meine laptopauflösung von 1280x800 angepasst.

zudem hat meine freundin eben einen bug im easter egg entdeckt... :wink:

pokercoaching.ch
dein persönlicher Pokercoach

OmahaWinners.com
Seht euch mein kostenloses Omaha Preflop Chart an!
03-21-2009 01:52 PM
zitieren
von7thal Offline
Administrator

Beiträge: 3,209
Registriert seit: Mar 2007
Beitrag #6
Re: Selfmade HeadsUp-Dealer
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.

pokercoaching.ch
dein persönlicher Pokercoach

OmahaWinners.com
Seht euch mein kostenloses Omaha Preflop Chart an!
03-21-2009 10:03 PM
zitieren
Nimifluk Offline
Posting Freak

Beiträge: 1,730
Registriert seit: Nov 2006
Beitrag #7
Re: Selfmade HeadsUp-Dealer
Hab mal obigen Code überflogen ohne das Excel anzuschauen und mir ist aufgefallen, dass Du Randomize zig mal aufrufst, das kannst Du Dir sparen. Diese Funktion ruft man lediglich zu Beginn einmal auf, um den Startwert des RNG 'zufällig' zu initialisieren, weitere Aufrufe verbessern die Qualität nicht, da mit der RND-Funktion die initialiserte Startsequenz automatisch fortgesetzt wird.
Das Mischen der Karten ist am einfachsten über ein Kartenarray lösbar, d.h. Array mit den 52 Kartenwerten (bzw. Referenzen auf die Karten) und dann jeden Index einmal mit einem zufällig ermiteltem zweiten Index swappen.


Zitat:rndC = Int((anzCardsInDeck - 1 + 1) * Rnd + 1)
Nice :lol:
Int(AnzCardsInDeck*RND+1) würd ausreichen, der Rest (-1+1) ist Zeit- und Energierverschwendung ;-)
Denken ist auch beim coden erlaubt, selbst wenn viele Samples es so machen wie Du :mrgreen:
03-22-2009 12:18 PM
zitieren
von7thal Offline
Administrator

Beiträge: 3,209
Registriert seit: Mar 2007
Beitrag #8
Re: Selfmade HeadsUp-Dealer
Nimifluk schrieb:Hab mal obigen Code überflogen ohne das Excel anzuschauen und mir ist aufgefallen, dass Du Randomize zig mal aufrufst, das kannst Du Dir sparen. Diese Funktion ruft man lediglich zu Beginn einmal auf, um den Startwert des RNG 'zufällig' zu initialisieren, weitere Aufrufe verbessern die Qualität nicht, da mit der RND-Funktion die initialiserte Startsequenz automatisch fortgesetzt wird.
Das Mischen der Karten ist am einfachsten über ein Kartenarray lösbar, d.h. Array mit den 52 Kartenwerten (bzw. Referenzen auf die Karten) und dann jeden Index einmal mit einem zufällig ermiteltem zweiten Index swappen.

ah ok.
habe ursprünglich keine randomize eingefügt was aber zu ständig identischen kartenverteilungen führte :-)

die hilfe sagte dann etwas von randomize und dachte dass dies zählt BIS eine RN generiert wurde. dann werde ich das anpassen wenn ich das nächste mal rumbastle. ty

array macht def. sinn =D habe das kartendeck ursprünglich nur in textform im excel sheet gespeichert und den ursprung dann belassen. aus faulheit aber auch aus unwissenheit wie ein sauberer array programmiert wird :wink: 'richtig' programmieren kann ich nicht wirklich :wink:

Nimifluk schrieb:rndC = Int((anzCardsInDeck - 1 + 1) * Rnd + 1)
Nice :lol:
Int(AnzCardsInDeck*RND+1) würd ausreichen, der Rest (-1+1) ist Zeit- und Energierverschwendung ;-)
Denken ist auch beim coden erlaubt, selbst wenn viele Samples es so machen wie Du :mrgreen:

haha :-) wollte mich jetzt nicely rausschwatzen dass ich bloss die hilfe von MS ge copy pasted habe aber die sind wohl nicht ganz hirnlos.. Tongue wtf kommt das da hin =D

thx für tipps. darfst natürlich sehr gerne den kompletten code überarbeiten und verbessern wenn du willst :wink:

pokercoaching.ch
dein persönlicher Pokercoach

OmahaWinners.com
Seht euch mein kostenloses Omaha Preflop Chart an!
03-22-2009 01:47 PM
zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste

Kontakt | raise.ch | Nach oben | Zum Inhalt | Archiv-Modus | RSS-Synchronisation
Deutsche Übersetzung: MyBBoard.de, Powered by MyBB, © 2002-2024 MyBB Group.
Designed by © Dynaxel