[VisualBasic] Texas Hold'EM

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Hellslayer, 17. Februar 2008 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 17. Februar 2008
    Texas Hold'EM

    Hey Leute ich habe jetzt begonnen ein Texas Hold'Em Spiel zu programmieren.

    Folgendes sollte das Programm beinhalten:
    - Einen Spieler
    - Einen Dealer
    - Der Dealer bekommt seine Karten verdeckt und geht immer mit
    - Der Spieler sieht seine Karten und kann je nach dem aussteigen und erhöhen

    Mein Problem ist jetzt, dass ich nicht so genau weiß wie ich das mit der Blattüberprüfung angehe. Also wer hat was zB ein Paar, einen Flush usw.

    Habe bis jetzt einen Button der die Karten verteilt und danach, noch den Flop/Turn/River aufdeckt. Die sieben Karten des Spielers und die sieben Karten des Dealers habe ich jetzt in Variablen gespeichert und jetzt sollte überprüft werden, wer dass bessere Blatt mit insgesamt fünf gewählten Karten zustande bringt.

    Nach folgedem Schema sind alle Karten eingespeichert:

    ' Kreuz Karo Herz Pik
    ' As 0 1 2 3
    ' Zwei 4 5 6 7
    ' Drei 8 9 10 11
    ' Vier 12 13 14 15
    ' Fünf 16 17 18 19
    ' Sechs 20 21 22 23
    ' Sieben 24 25 26 27
    ' Acht 28 29 30 31
    ' Neun 32 33 34 35
    ' Zehn 36 37 38 39
    ' Bube 40 41 42 43
    ' Dame 44 45 46 47
    ' König 48 49 50 51

    Wie überprüfe ich jetzt am besten wer was hat? Vielen Dank schonmal für eure Hilfen bin derzeit echt am Grübeln.
     

  2. Anzeige
  3. #2 18. Februar 2008
    AW: Texas Hold'EM

    du möchtest also rausfinden welche karten kombination ein spieler hat

    ich würde aus den karten objekte machen. als attribute würde ich wählen:
    -farbe,symbol,zahl

    es wäre am einfachsten wenn jeweils der dealer und der spieler alle möglichkeiten abprüfen und ihr ergebniss an den "topf" melden. der topf sollte die einsätze verwalten und nacher die gewinne ausschütten

    die abprüfung wäre am einfachsten wenn du einfach von der höchsten kombination zur niedriegsten abprüfst.
    den royal falsh kannst du ja so abprüfen:
    Code:
    PSEUDOCODE
    
    wenn alle karten das selbe symbol haben
     wenn das ass, der king, die dame, der bube und die 10 vorahnden sind
     dann melde dem topf ich habe einen royalflush
    
     
  4. #3 18. Februar 2008
    AW: Texas Hold'EM

    Solltest die der Variablen so wählen, das 1XX immer Karo, 2XX immer Herz.
    und dahinter den Wert. 102 für die Karo 2.

    und kann man Checken, ob alle die 1 vorne haben, 4 hinten gleich, bzw 3 hinten gleich.
    Das Ergebnis dann bewerten und dann das Ergebnis von Spieler und Dealer vergleichen.

    So das dann der Spieler z.b. ein Blatt mit dem Wert 10 auf der Hand hat und 15,19,14. und der Größte Wert wird mit der größten des Dealers verglichen.


    EDIT: Klingt kompliziert, ist auch so. :)
    Damit brauchst du eine Funktion die dann das Blatt bewertet bei beliebig vielen Spielern
     
  5. #4 18. Februar 2008
    AW: Texas Hold'EM

    vorsicht pseudocode

    Code:
    /**
    * vorsicht, das ist eine erfundene prog.sprache
    * (so fänd ich php ganz nice :D)
    */
    namespace holdEM {
     class Card {
     public string $name;
     public int $type;
     public int $num;
     
     public void __init($type) {
     switch($type) {
     case 0: 
     this.name = '2';
     this.type = 0; //type 0 = herz
     break;
     case 1:
     this.name = '2';
     this.type = 1; //type 1 = karo
     break;
     case 2:
     this.name = '2';
     this.type = 2; //type 2 = kreuz
     break;
     case 3:
     this.name = '2';
     this.type = 3; //type 3 = blatt
     break;
     //4,5,6,7,8...
     case 24:
     this.name = 'ass';
     this.type = 0; 
     break;
     case 25:
     this.name = 'ass';
     this.type = 1;
     break;
     case 26:
     this.name = 'ass';
     this.type = 2;
     break;
     //case 27:
     default:
     this.name = 'ass';
     this.type = 3;
     }
     
     this.num = $type;
     }
     }
    
     class Deck {
     public array $allCards;
     public array $playedCards;
     
     public void __init() {
     for(int $i = 0; $i < 27; $i++) {
     this.allCards.push(new Card($i));
     }
     }
     
     public void delete($i) {
     this.playedCards.push(this.allCards[$i]);
     unset this.allCards[$i];
     }
     
     public array shuffle() {
     return this.allCards.shuffle();
     }
     }
    
     class Player {
     public array $cards;
     //public int $money; usw...
     
     public void __init(ref CardDeck $allCards) {
     $cards = $allCards.shuffle();
     $card1 = $cards[0];
     $card2 = $cards[1];
     $allCards.delete($card1.num);
     $allCards.delete($card2.num);
     this.cards[0] = $card1;
     this.cards[1] = $card2;
     }
     }
    
     class Bank {
     private object $deck;
     private array $player;
     
     public void __init(ref CardDeck $allCards, $player) {
     this.deck = $allCards;
     
     each($player as $name and $obj) {
     this.player[$name] = $obj;
     }
     } 
     
     public void flop() {
     //alle noch spielbaren karten in this.deck.cards
     //alle verspielten karten in this.deck.played
     //mitspieler in this.player
     //karten der mitspieler in this.player[name].cards[nummer]
     }
     }
    }
    
    $allCards = new holdEM::CardDeck;
    
    //mitspieler
    array $player;
    $player['username1'] = new holdEM::Player($allCards);
    $player['username2'] = new holdEM::Player($allCards);
    
    //die bank
    $bank = new holdEM::Bank($allCards, $player);
    $bank.flop();
     
  6. #5 18. Februar 2008
    AW: Texas Hold'EM

    Zwar nicht vb, aber auch ganz geschickt.

    ist aber ja schon das fertige Programm.

    mfg
     
  7. #6 19. Februar 2008
    AW: Texas Hold'EM

    nö das is kein programm^^ das is ne mischung aus php/javascript/c++ - wie gesagt pseudocode ums zu erklären wie mans machen könnte.

    langeweile^^
     
  8. #7 19. Februar 2008
    AW: Texas Hold'EM

    Danke Leute bin schon ein großes Stück weiter gekommen.

    Habe jetzt alle sieben Karten auf dem Tisch. Jede Karte ist in Farbe(1-4) und in eine Zahl(0-12) eingeteilt.
    Hier mal die Farben (Suits):
    suit(1) = 1 Kreuz
    suit(2) = 2 Karo
    suit(3) = 3 Herz
    suit(4) = 4 Pik

    Hier die Zahlen (Values):
    value(0) = 0 ASS
    value(1) = 1 2
    usw...

    Jetzt wollte ich eben auslesen welches Blatt man getroffen hat. Beginnend mit dem besten Blatt, wenn zB ein Royal Flush getroffen wurde dann werden die anderen Blätter sofort übersprungen da es ja nichts besseres geben kann.

    Royal Flush geht ja soweit noch, aber das Straight Flush macht mir probleme, da es ja so viele Kombinationen gibt. Habt ihr vielleicht einen Plan wie ich das am besten anstelle? Stehe echt auf der Leitung.

    Hier mal der Codeauszug fürs Royal Flush:
    Code:
    kreuz = 0
    karo = 0
    herz = 0
    pik = 0
    'ROYAL FLUSH
    royalFlush = 0
    'checking the symbols
    For x = 1 To 7
     Select Case suit(x)
     Case 1 'Kreuz
     kreuz = kreuz + 1
     Case 2 'Karo
     karo = karo + 1
     Case 3 'Herz
     herz = herz + 1
     Case 4 'Pik
     pik = pik + 1
     End Select
    Next
    
    If kreuz >= 5 Then
     ry = 1
    End If
    If karo >= 5 Then
     ry = 2
    End If
    If herz >= 5 Then
     ry = 3
    End If
    If pik >= 5 Then
     ry = 4
    End If
    
    For x = 1 To 7
    If ry = suit(x) Then
     Select Case value(x)
     Case 0
     royalFlush = royalFlush + 1 'AS
     Case 9
     royalFlush = royalFlush + 1 '10er
     Case 10
     royalFlush = royalFlush + 1 '...
     Case 11
     royalFlush = royalFlush + 1
     Case 12
     royalFlush = royalFlush + 1
     End Select
    End If
    Next
    
    Das RoyalFlush scheint schonmal zu funzen könntet ihr mir bei den andern Blättern auch noch ein bisschen zur Seite stehen? zB glaube ich dass mein Code für ein Paar noch optimiert werden muss hier mal der Code:

    Code:
    'check if ONEpair
    ONEpair = 0
    Select Case value(1)
     Case value(2)
     ONEpair = ONEpair + 1
     Case value(3)
     ONEpair = ONEpair + 1
     Case value(4)
     ONEpair = ONEpair + 1
     Case value(5)
     ONEpair = ONEpair + 1
     Case value(6)
     ONEpair = ONEpair + 1
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Select Case value(2)
     Case value(3)
     ONEpair = ONEpair + 1
     Case value(4)
     ONEpair = ONEpair + 1
     Case value(5)
     ONEpair = ONEpair + 1
     Case value(6)
     ONEpair = ONEpair + 1
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Select Case value(3)
     Case value(4)
     ONEpair = ONEpair + 1
     Case value(5)
     ONEpair = ONEpair + 1
     Case value(6)
     ONEpair = ONEpair + 1
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Select Case value(4)
     Case value(5)
     ONEpair = ONEpair + 1
     Case value(6)
     ONEpair = ONEpair + 1
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Select Case value(5)
     Case value(6)
     ONEpair = ONEpair + 1
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Select Case value(6)
     Case value(7)
     ONEpair = ONEpair + 1
    End Select
    
    Bewertungen habt ihr natürlich alle bekommen.
     
  9. #8 19. Februar 2008
    AW: Texas Hold'EM

    also strait flush heißt ja 5 karten einer farbe hinter einander weg

    ich würde die karten einer farbe der reihe nach ordnen und dan abprüfen ob ich nachfolger für die karten habe

    wenn du 5 direkte nachfolger findest haste nen strait flush
     
  10. #9 20. Februar 2008
    AW: Texas Hold'EM

    Verstehe was du meinst, ich habe jedoch keine Ahnung wie ich die Karten in eine bestimmte Reihenfolge bringe...
     
  11. #10 20. Februar 2008
    AW: Texas Hold'EM

    Mal ne Frage rein Interesse halber ...

    Wie kann man das dann loesen das das Ass ja gleichzeitig die groeßte als auch die kleinste Karte im Texas Hold´EM ist ...

    muss man da das Ass 2 mal definieren ...??

    MfG seT-87
     
  12. #11 20. Februar 2008
    AW: Texas Hold'EM

    kleiner nachtrag am rande
    // aus wikipedia
    Round The Corner Straights, beispielsweise von König bis Vier gelten dagegen nicht. Daraus folgt, dass eine Straße stets eine 5 oder eine 10 enthalten muss.
    //ende

    melde dich mal per pm bei mir
     
  13. #12 21. Februar 2008
    AW: Texas Hold'EM

    Ok habe alle Karten überprüft war eigentlich eh ganz einfach. Falls jemand wissen will wie kann er mich per PN kontaktieren ;)

    ### CLOSE ###
     

  14. Videos zum Thema
Die Seite wird geladen...