sortieren funzt nicht richtig!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Hi!

Bin dabei ein Poker spiel zu coden! Aber um die Abfragen, ob man z.B. ein paar auf der Hand hat, relativ einfach zu halten, muss ich die karten erstmal sortieren! Aber da hängt es noch! Könnt ja mal bitte rein schauen? Danke!

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
from random import randint
import random
import time
#Variablen#
global kaf
kaf='Karo Roy Flash \n Glückwunsch!'
krf='Kreuz Roy Flash \n Glückwunsch!'
hrf=''


def fullrange(a,b,step=1):
    if step>0: return range(a,b+1,step)
    else: return range(a,b-1,step)
    
def swap(L,a,b):
    L[a],L[b] = L[b],L[a]
    
def zufall(n=10):
    liste = n*[0]
    for x in range(n):
        liste[x]=random.randrange(1,n+1)
    return liste
    
def dazu(n=10,neu=3):
    return fullrange(1,n-neu)+fullrange(1,neu)

def methoden():
    return ['bubble','bubbleclever','shaker','insertion','selection',\
            'shell','quick','heap','merge']
            
def bubbleclever(L):
    for oben in fullrange(len(L)-1,1,-1):
        for z in fullrange(0,oben-1):
            if L[z]>L[z+1]: swap(L,z,z+1)

def start(*a):
    random_cards()
    sort()
    check_cards()
    buttons()

def buttons():
    Button(root, image=k_1, command=test).grid(row=0,column=0)
    Button(root, image=k_2, command=test).grid(row=0,column=1)
    Button(root, image=k_3, command=test).grid(row=0,column=2)
    Button(root, image=k_4, command=test).grid(row=0,column=3)
    Button(root, image=k_5, command=test).grid(row=0,column=4) 
def test():
    start()

#Random#
def random_cards():
    global k_1, k_2, k_3, k_4, k_5
    k_r_1=randint(0,31)
    k_r_2=randint(0,31)
    k_r_3=randint(0,31)
    k_r_4=randint(0,31)
    k_r_5=randint(0,31)
    for i in range(10):
        if (k_r_2==k_r_1):
            k_r_2=randint(0,31)
        if (k_r_3==k_r_2 or k_r_3==k_r_1):
            k_r_3=randint(0,31)
        if (k_r_4==k_r_2 or k_r_4==k_r_1 or k_r_4==k_r_3):
            k_r_4=randint(0,31)
        if (k_r_5==k_r_2 or k_r_5==k_r_1 or k_r_5==k_r_3 or k_r_5==k_r_4):
            k_r_5=randint(0,31)
    k_1=karten[k_r_1]
    k_2=karten[k_r_2]
    k_3=karten[k_r_3]
    k_4=karten[k_r_4]
    k_5=karten[k_r_5]
def check_cards():
    ##Paar##
root=Tk() 
#define Images#
#karo#
_7akaro_7=PhotoImage(file='karo/7.gif')
_8akaro_8=PhotoImage(file='karo/8.gif')
_9akaro_9=PhotoImage(file='karo/9.gif')
_10akaro_10=PhotoImage(file='karo/10.gif')
_11akaro_bube=PhotoImage(file='karo/bube.gif')
_12akaro_dame=PhotoImage(file='karo/dame.gif')
_13akaro_koenig=PhotoImage(file='karo/könig.gif')
_14akaro_as=PhotoImage(file='karo/as.gif')
#Herz#
_7bherz_7=PhotoImage(file='herz/7.gif')
_8bherz_8=PhotoImage(file='herz/8.gif')
_9bherz_9=PhotoImage(file='herz/9.gif')
_10bherz_10=PhotoImage(file='herz/10.gif')
_11bherz_bube=PhotoImage(file='herz/bube.gif')
_12bherz_dame=PhotoImage(file='herz/dame.gif')
_13bherz_koenig=PhotoImage(file='herz/könig.gif')
_14bherz_as=PhotoImage(file='herz/as.gif')
#Pik#
_7cpik_7=PhotoImage(file='pik/7.gif')
_8cpik_8=PhotoImage(file='pik/8.gif')
_9cpik_9=PhotoImage(file='pik/9.gif')
_10cpik_10=PhotoImage(file='pik/10.gif')
_11cpik_bube=PhotoImage(file='pik/bube.gif')
_12cpik_dame=PhotoImage(file='pik/dame.gif')
_13cpik_koenig=PhotoImage(file='pik/könig.gif')
_14cpik_as=PhotoImage(file='pik/as.gif')
#kreuz#
_7kreuz_7=PhotoImage(file='kreuz/7.gif')
_8kreuz_8=PhotoImage(file='kreuz/8.gif')
_9kreuz_9=PhotoImage(file='kreuz/9.gif')
_10dkreuz_10=PhotoImage(file='kreuz/10.gif')
_11dkreuz_bube=PhotoImage(file='kreuz/bube.gif')
_12dkreuz_dame=PhotoImage(file='kreuz/dame.gif')
_13dkreuz_koenig=PhotoImage(file='kreuz/könig.gif')
_14dkreuz_as=PhotoImage(file='kreuz/as.gif')
#Ende Images#
#Karten#
karten=[_7akaro_7, _8akaro_8, _9akaro_9, _10akaro_10,_11akaro_bube, _12akaro_dame, _13akaro_koenig, _14akaro_as, _7bherz_7, _8bherz_8, _9bherz_9, _10bherz_10, _11bherz_bube, _12bherz_dame, _13bherz_koenig, _14bherz_as, _7cpik_7, _8cpik_8, _9cpik_9, _10cpik_10, _11cpik_bube, _12cpik_dame, _13cpik_koenig, _14cpik_as, _7kreuz_7, _8kreuz_8, _9kreuz_9, _10dkreuz_10, _11dkreuz_bube, _12dkreuz_dame, _13dkreuz_koenig, _14dkreuz_as]

def sort():
    global k_1, k_2, k_3, k_4, k_5
    cards=[k_1, k_2, k_3, k_4, k_5]
    bubbleclever(cards)
    k_1=cards[0]
    k_2=cards[1]
    k_3=cards[2]
    k_4=cards[3]
    k_5=cards[4]
start()
root.bind('<F2>', start)
root.mainloop() 
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

Soweit bin ich jetzt:
Ich bruach 'nur' noch aus den Sortierten Werten die Karten auszugeben.. nur wie ?

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *
from random import randint
import random
import time
#Variablen#
global kaf
kaf='Karo Roy Flash \n Glückwunsch!'
krf='Kreuz Roy Flash \n Glückwunsch!'
hrf=''


def fullrange(a,b,step=1):
    if step>0: return range(a,b+1,step)
    else: return range(a,b-1,step)
    
def swap(L,a,b):
    L[a],L[b] = L[b],L[a]
    
def zufall(n=10):
    liste = n*[0]
    for x in range(n):
        liste[x]=random.randrange(1,n+1)
    return liste
    
def dazu(n=10,neu=3):
    return fullrange(1,n-neu)+fullrange(1,neu)

def methoden():
    return ['bubble','bubbleclever','shaker','insertion','selection',\
            'shell','quick','heap','merge']
            
def bubbleclever(L):
    for oben in fullrange(len(L)-1,1,-1):
        for z in fullrange(0,oben-1):
            if L[z]>L[z+1]: swap(L,z,z+1)

def start(*a):
    random_cards()
    sort()
    check_cards()
    buttons()

def buttons():
    Button(root, image=k_1, command=test).grid(row=0,column=0)
    Button(root, image=k_2, command=test).grid(row=0,column=1)
    Button(root, image=k_3, command=test).grid(row=0,column=2)
    Button(root, image=k_4, command=test).grid(row=0,column=3)
    Button(root, image=k_5, command=test).grid(row=0,column=4) 
def test():
    start()

#Random#
def random_cards():
    global k_1, k_2, k_3, k_4, k_5, k_r_1, k_r_2, k_r_3, k_r_4, k_r_5
    k_r_1=randint(0,31)
    k_r_2=randint(0,31)
    k_r_3=randint(0,31)
    k_r_4=randint(0,31)
    k_r_5=randint(0,31)
    for i in range(10):
        if (k_r_2==k_r_1):
            k_r_2=randint(0,31)
        if (k_r_3==k_r_2 or k_r_3==k_r_1):
            k_r_3=randint(0,31)
        if (k_r_4==k_r_2 or k_r_4==k_r_1 or k_r_4==k_r_3):
            k_r_4=randint(0,31)
        if (k_r_5==k_r_2 or k_r_5==k_r_1 or k_r_5==k_r_3 or k_r_5==k_r_4):
            k_r_5=randint(0,31)
def check_cards():
    ##Paar##
    pass
root=Tk() 
#define Images#
#karo#
_7akaro_7=PhotoImage(file='karo/7.gif')
_8akaro_8=PhotoImage(file='karo/8.gif')
_9akaro_9=PhotoImage(file='karo/9.gif')
_10akaro_10=PhotoImage(file='karo/10.gif')
_11akaro_bube=PhotoImage(file='karo/bube.gif')
_12akaro_dame=PhotoImage(file='karo/dame.gif')
_13akaro_koenig=PhotoImage(file='karo/könig.gif')
_14akaro_as=PhotoImage(file='karo/as.gif')
#Herz#
_7bherz_7=PhotoImage(file='herz/7.gif')
_8bherz_8=PhotoImage(file='herz/8.gif')
_9bherz_9=PhotoImage(file='herz/9.gif')
_10bherz_10=PhotoImage(file='herz/10.gif')
_11bherz_bube=PhotoImage(file='herz/bube.gif')
_12bherz_dame=PhotoImage(file='herz/dame.gif')
_13bherz_koenig=PhotoImage(file='herz/könig.gif')
_14bherz_as=PhotoImage(file='herz/as.gif')
#Pik#
_7cpik_7=PhotoImage(file='pik/7.gif')
_8cpik_8=PhotoImage(file='pik/8.gif')
_9cpik_9=PhotoImage(file='pik/9.gif')
_10cpik_10=PhotoImage(file='pik/10.gif')
_11cpik_bube=PhotoImage(file='pik/bube.gif')
_12cpik_dame=PhotoImage(file='pik/dame.gif')
_13cpik_koenig=PhotoImage(file='pik/könig.gif')
_14cpik_as=PhotoImage(file='pik/as.gif')
#kreuz#
_7dkreuz_7=PhotoImage(file='kreuz/7.gif')
_8dkreuz_8=PhotoImage(file='kreuz/8.gif')
_9dkreuz_9=PhotoImage(file='kreuz/9.gif')
_10dkreuz_10=PhotoImage(file='kreuz/10.gif')
_11dkreuz_bube=PhotoImage(file='kreuz/bube.gif')
_12dkreuz_dame=PhotoImage(file='kreuz/dame.gif')
_13dkreuz_koenig=PhotoImage(file='kreuz/könig.gif')
_14dkreuz_as=PhotoImage(file='kreuz/as.gif')
#Ende Images#
#Karten#
karten=[_7akaro_7, _8akaro_8, _9akaro_9, _10akaro_10,_11akaro_bube, _12akaro_dame, _13akaro_koenig, _14akaro_as, _7bherz_7, _8bherz_8, _9bherz_9, _10bherz_10, _11bherz_bube, _12bherz_dame, _13bherz_koenig, _14bherz_as, _7cpik_7, _8cpik_8, _9cpik_9, _10cpik_10, _11cpik_bube, _12cpik_dame, _13cpik_koenig, _14cpik_as, _7dkreuz_7, _8dkreuz_8, _9dkreuz_9, _10dkreuz_10, _11dkreuz_bube, _12dkreuz_dame, _13dkreuz_koenig, _14dkreuz_as]
wert=[7.1, 8.1, 9.1, 10.1, 11.1, 12.1, 13.1, 14.1, 7.2, 8.2, 9.2, 10.2, 11.2, 12.2, 13.2, 14.2, 7.3, 8.3, 9.3, 10.3, 11.3, 12.3, 13.3, 14.3, 7.4, 8.4, 9.4, 10.4, 11.4, 12.4, 13.4, 14.4]
def sort():
    global k_1, k_2, k_3, k_4, k_5
    cards=[wert[k_r_1], wert[k_r_2], wert[k_r_3], wert[k_r_4], wert[k_r_5]]
    bubbleclever(cards)
    print cards
    ###  //Hier müssten dann die KartenBilder in den Variablen gespeichert werden\\  ###
    k_1=karten[cards[k_r_1]]
    k_2=cards[k_r_2]
    k_3=cards[k_r_3]
    k_4=cards[k_r_4]
    k_5=cards[k_r_5]
start()
root.bind('<F2>', start)
root.mainloop() 
Iopodx
User
Beiträge: 68
Registriert: Sonntag 5. September 2004, 08:58

OK, danke, hab nach ewigen probieren geschafft, mit ner einfachen IF Abfrage :)

Code: Alles auswählen

for i in range(32):
        if (cards[0]==wert[i]):
            k_1=karten[i]
    for i in range(32):
        if (cards[1]==wert[i]):
            k_2=karten[i]
    for i in range(32):
        if (cards[2]==wert[i]):
            k_3=karten[i]
    for i in range(32):
        if (cards[3]==wert[i]):
            k_4=karten[i]
    for i in range(32):
        if (cards[4]==wert[i]):
            k_5=karten[i]
Gast

hehe, so wie der Zufall es will hab ich grad was ganz ähnlihces gemacht. Um mich nen bisserl das tkinter GUI einzuarbeiten hab ich mir nen kleines Kniffel zusammengeschraubt.
Ich denke mal du kennst die Regeln.
Hier hasse die entsprechenden Snipps mit denen ich auf verschiedene Kombinationen getestet hab:

self.wuerfel ist eine Liste von Ganzzahlen die die Würfel repräsentiert (halt Werte von 1-6). Das meiste solltest Du so wie es ist übertragen können, wenn du deine Karten als Zahlen von 1-14 darstellst und König=14 erst später auflöst.
Entschuldige bitte den fiesen Stil, meine Funktionen geben direkt den "Wert" einer Würfelkombination wieder, kein Bool. Sollte schnell gehen. Ich werds nie wieder tun, ich schwöre. ;)

Listen von Typen die sich mittels <= vergleichen lassen, kannst du überigens mit li.sort() sortieren, ohne da irgendwas dran tun zu müssen.

Code: Alles auswählen

  def fuenfen(self):
    ret = 0  
    for w in self.wuerfel:
      if w == 5: ret += 5
    return ret
    
  def sechsen(self):
    ret = 0  
    for w in self.wuerfel:
      if w == 6: ret += 6
    return ret

  def dreierPasch(self):
    for i in range(5):
      treffer=0
      for j in range(5):
        if self.wuerfel[i] == self.wuerfel[j]:
	  treffer += 1
        if treffer >= 3:
          return self.augenGesamt()
    return 0
   
  def viererPasch(self):
    for i in range(5):
      treffer=0
      for j in range(5):
        if self.wuerfel[i] == self.wuerfel[j]:
	  treffer += 1
        if treffer >= 4:
          return self.augenGesamt()
    return 0

  def kniffel(self):
    for w in range(3):
      if self.wuerfel[w] != self.wuerfel[4]: return 0
    return 50      

  def fullHouse(self):
    wb = self.copy()
    wb.sort()
    if wb.wuerfel[0] != wb.wuerfel[1]: return 0
    if wb.wuerfel[3] != wb.wuerfel[4]: return 0
    if wb.wuerfel[2] == wb.wuerfel[1]: return 25
    if wb.wuerfel[2] == wb.wuerfel[3]: return 25
    return 0
    
  def grosseStrasse(self):
    if self.laengsteSequenz() == 5: return 40
    return 0    
    
  def laengsteSequenz(self):
    aktuelleSeq = 0
    laengsteSeq = 1
    for i in range(1,7):
      try:
        self.wuerfel.index(i)
	aktuelleSeq += 1
        laengsteSeq = max(laengsteSeq, aktuelleSeq)
      except ValueError:
        aktuelleSeq = 0
    return laengsteSeq
	
  def kleineStrasse(self):
    if self.laengsteSequenz() >= 4: return 30
    return 0

  def chance(self):
    return self.augenGesamt()

  def augenGesamt(self):
    ret=0
    for w in self.wuerfel:
      ret += w
    return ret

  def copy(self):
    wb = Wuerfelbecher()
    for i in range(len(wb.wuerfel)):
      wb.wuerfel[i] = self.wuerfel[i]
    return wb

  def minWuerfel(self):
    min(self.wuerfel)

Ich hoffe mal das hilft dir irgendwie, es ist aber wirklich sehr häßlicher Code, der nur mal auffe Schnelle so hingerotzt wurde.
Antworten