Pokerhilfe Programm

Anfängerfragen zum Programmieren mit PureBasic.
c9ma
Beiträge: 8
Registriert: 29.11.2006 22:27

Pokerhilfe Programm

Beitrag von c9ma »

Hallo Jungs.

Ich habe eine Vorstellung von einem Programm, welches beim Pokern als Hilfe dienen soll.

Falls einer von euch Poker spielt wird er bestimmt schon von dem Punktesystem gehört haben, nachdem man bestimmen kann, was für eine Chance man mit dem jeweilligen Blatt hat.

Das Programm sollte mehrere buttons haben über welche man seine "Hand" (seine 2 Karten) auswählt.

Die buttons haben dann verschiedene Werte, welche pro Klick zusammenaddiert werden:
________________________________________

2 : + 2 Punkte
3 : + 3 Punkte
4 : + 4 Punkte
5 : + 5 Punkte
6 : + 6 Punkte
7 : + 7 Punkte
8 : + 8 Punkte
9 : + 9 Punkte
10: + 11 Punkte
J : + 12 Punkte
Q : + 13 Punkte
K : + 14 Punkte
A : + 16 Punkte

Suited (Selbe Farbe (zb Hertz)): + 4 Punkte
Paar auf der Hand hat : + 4 Punkte
Straßen Chance : + 3 Punkte

Punkte für Sitzplatz am Pokertisch (Bietrunden):

Einer der Ersten der bietet : 0 Punkte
Einer der Mittleren der bietet : + 3 Punkte
Einer der Letzen der bietet : + 5 Punkte
________________________________________

Hoffe ihr versteht was ich meine.
Also wenn ich zb folgende Kombination drücke, kommt am Ende __27__ herraus:

Ich habe eine Hertz 9 auf der Hand ( + 9 Punkte )
Ich habe eine Hertz Dame auf der Hand ( + 13 Punkte )
Sie sind beide Hertz (Suited) ( + 4 Punkte )
Ich bin einer der letzten in der Bietrunde ( + 5 Punkte )

So sollte dann das Ergenbis entstehen und in einem Feld im Fenster angezeigt werden.


Es wäre super wenn ihr mir sagt ob so etwas möglich ist.

Noch netter wäre es natürlich wenn jemand Spaß am Programmieren hat und es für mich machen würde (vorrausgesetzt es ist nicht zu schwer oder zu viel verlangt!).

Ich weiß zB. garnicht wie ich buttons erstelle und denen Werte geben kann etc. :(

Hier noch ein Bild, welches zeigt wie ich es mir vorstelle :)

Bild

Ich freue mich auf reichliche Antworten,
Mit freundlichen Grüßen,
c0ma
Benutzeravatar
Bax
Beiträge: 20
Registriert: 16.08.2005 21:45
Wohnort: Erlensee

Beitrag von Bax »

Hi C9ma,

Irgendwie bin ich bei meinem aktuellen Projekt nicht richtig vorwärts gekommen und hatte auch irgendwie nichts zu tun heute Abend.
Da hab ich eben angefangen dein Poker-Prog zu schreiben. Dachte zuerst, dass das nur eine halbe Stunde dauern würde, wurde zwar jetzt ein bisschen mehr, aber immerhin es ist fertig und funktioniert (Spaß gemacht hats auch). :D

Wer mag kann den XP-Skin aktivieren. Die Buttons sind groß genug, so dass es übersichtlich bleibt.

Code: Alles auswählen

; Bax - 01|07
; PB 4.02

If OpenWindow(0, 0, 0, 178, 590, "Pokerhilfe", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)

  ; Konstanten für die vier Farben
  Enumeration
    #Pik
    #Karo
    #Kreuz
    #Herz
  EndEnumeration

  Global NewList cards.l()   ; Liste der ausgewählten Karten
  Global result.l            ; Bewertungsergebnis

  ;{ Images für die vier Farben
  CreateImage(#Karo, 32, 32)
    StartDrawing(ImageOutput(#Karo))
      Box(0, 0, 32, 32, $D8E9E9)
      LineXY(16,  0, 32, 16, $0000FF)
      LineXY(32, 16, 16, 32, $0000FF)
      LineXY(16, 32,  0, 16, $0000FF)
      LineXY( 0, 16, 16,  0, $0000FF)
      FillArea(16, 16, $0000FF, $0000FF)
    StopDrawing()
  CreateImage(#Herz, 32, 32)
    StartDrawing(ImageOutput(#Herz))
      Box(0, 0, 32, 32, $D8E9E9)
      Circle(9, 9, 8, $0000FF)
      Circle(23, 9, 8, $0000FF)
      LineXY(0, 8, 16, 30, $0000FF)
      LineXY(32, 8, 16, 30, $0000FF)
      FillArea(16, 24, $0000FF, $0000FF)
    StopDrawing()
  CreateImage(#Pik, 32, 32)
    StartDrawing(ImageOutput(#Pik))
      Box(0, 0, 32, 32, $D8E9E9)
      Circle(9, 16, 7, $000000)
      Circle(23, 16, 7, $000000)
      Box(15, 16, 2, 16, $000000)
      LineXY(3, 13, 16, 0, $000000)
      LineXY(29, 13, 16, 0, $000000)
      Circle(16, 32, 6, $000000)
      FillArea(16, 8, $000000, $000000)
    StopDrawing()
  CreateImage(#Kreuz, 32, 32)
    StartDrawing(ImageOutput(#Kreuz))
      Box(0, 0, 32, 32, $D8E9E9)
      Circle(8, 16, 5, $000000)
      Circle(16, 8, 5, $000000)
      Circle(24, 16, 5, $000000)
      Box(8, 15, 16, 2, $000000)
      Box(15, 8, 2, 24, $000000)
      Circle(16, 32, 5)
    StopDrawing()
  ;}

  CreateGadgetList(WindowID(0))
    ; Kartenauswahl für jede Farbe (x)
    For x=0 To 3
      ImageGadget(x*14, 10 + x*42, 10, 32, 32, ImageID(x))
      For y=2 To 10
        ButtonGadget(x*14 + (y-1), 10 + x*42, 36 + (y-1)*24, 32, 24, Str(y), #PB_Button_Toggle)
      Next
      ButtonGadget(x*14 + 10, 10 + x*42, 286, 32, 24, "J", #PB_Button_Toggle)
      ButtonGadget(x*14 + 11, 10 + x*42, 310, 32, 24, "Q", #PB_Button_Toggle)
      ButtonGadget(x*14 + 12, 10 + x*42, 334, 32, 24, "K", #PB_Button_Toggle)
      ButtonGadget(x*14 + 13, 10 + x*42, 368, 32, 24, "A", #PB_Button_Toggle)
    Next
    
    ; Position des Spielers
    OptionGadget(56,  10, 402, 53, 20, "First")  :  SetGadgetState(56, #True)
    OptionGadget(57,  63, 402, 53, 20, "Middle")
    OptionGadget(58, 116, 402, 52, 20, "Last")

    ; Besonderheiten
    CheckBoxGadget(60, 10, 432, 158, 20, "suited")
    CheckBoxGadget(61, 10, 452, 158, 20, "pair")
    CheckBoxGadget(62, 10, 472, 158, 20, "straight chance")

    ; Ausrechnen
    ButtonGadget(  59, 10, 502, 158, 24, "Berechnen")  :  DisableGadget(59, #True)
    TextGadget(    63, 50, 526,  79, 20, "", #PB_Text_Center|#PB_Text_Border)

    ; Zurücksetzen
    ButtonGadget(64, 10, 556, 158, 24, "Zurücksetzen")



  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget

        ; Karte auswählen / aus Auswahl entfernen
        If (EventGadget() < 56) And (EventGadget() % 14)
          If GetGadgetState(EventGadget())
            AddElement(cards())  :  cards() = EventGadget()
          Else
            ForEach cards()   ; die richtige Karte löschen
              If cards() = EventGadget()
                DeleteElement(cards())
                Break
              EndIf
            Next
          EndIf
          ; Berechnen möglich / unmöglich:
          If CountList(cards()) = 2  :  DisableGadget(59, #False)  :  Else  :  DisableGadget(59, #True)  :  EndIf


        ; Berechnen:
        ElseIf EventGadget() = 59
          result = 0
        
          SelectElement(cards(), 0)  :  card_1 = cards()
          SelectElement(cards(), 1)  :  card_2 = cards()

          If (card_1 / 14) = (card_2 / 14) Or GetGadgetState(60)  :  result + 4  :  EndIf   ; gleiche Farbe
          If (card_1 % 14) = (card_2 % 14) Or GetGadgetState(61)  :  result + 4  :  EndIf   ; Paar
          If GetGadgetState(62)                                   :  result + 3  :  EndIf   ; Chance auf eine Straße
          
          If GetGadgetState(57)       ; Mitte
            result + 3
          ElseIf GetGadgetState(58)   ; hinten
            result + 5
          EndIf
          
          ForEach cards()
            If (cards() % 14) < 9           ; 2-9
              result + (cards() % 14) + 1
            ElseIf (cards() % 14) < 13      ; 10 / B-D-K
              result + (cards() % 14) + 2
            Else                            ; Ass
              result + 16
            EndIf
          Next
          
          SetGadgetText(63, Str(result))

      
        ; Zurücksetzen:
        ElseIf EventGadget() = 64
          For i=0 To 55
            If (i%14) = 0  :  Continue  :  EndIf   ; Images überspringen
            SetGadgetState(i, #False)
          Next
          SetGadgetState(56, #True)
          DisableGadget(59, #True)
          For i=60 To 62  :  SetGadgetState(i, #False)  :  Next
          SetGadgetText(63, "")
          
          ClearList(cards())


        EndIf
        
    EndSelect
  ForEver

EndIf
Die Grafiken sind etwas rudimentär, ging eher darum, dass man die Zeichen erkennt.

Was mir noch aufgefallen ist:
In deiner Beispiel-Rechnung ist 9+13+4+5 = 31 und nicht 27. :twisted:
c9ma
Beiträge: 8
Registriert: 29.11.2006 22:27

Beitrag von c9ma »

WOW !

Ich bin beeindruckt :)
Sieht echt sehr gut aus und funktioniert auch perfekt..

Danke vielmals! :D
Antworten