Python :: Aufgabe #175 :: Lösung #2
3 Lösungen
#175
Mischen von Spielkarten
Anfänger - Python
von hollst
- 14.01.2018 um 16:42 Uhr
Man schreibe eine GUI-Anwendung, die einen 52er Kartensatz mischt und die entstandene Reihenfolge anzeigt (BILD 2).
Die Anwendung soll zwei Befehlsknöpfe haben: MISCHEN und RESET. Mit RESET soll die Default-Reihenfolge angezeigt werden (BILD 1).
Einen Satz von Image-Dateien der Spielkarten könnt ihr z. B. unter http://www.nongnu.org/cardpics/cardpics.en.html herunterladen und darüber frei verfügen, sofern ihr eure Lösung nicht für kommerzielle Zwecke vermarkten wollt.
Die Anwendung soll zwei Befehlsknöpfe haben: MISCHEN und RESET. Mit RESET soll die Default-Reihenfolge angezeigt werden (BILD 1).
Einen Satz von Image-Dateien der Spielkarten könnt ihr z. B. unter http://www.nongnu.org/cardpics/cardpics.en.html herunterladen und darüber frei verfügen, sofern ihr eure Lösung nicht für kommerzielle Zwecke vermarkten wollt.
#2
von GateCore (50 Punkte)
- 04.04.2018 um 15:20 Uhr
ich habe wxPython verwendet. Um den Code zum laufen zu bringen imagepath durch den richtigen Pfad ersetzen, möglicherweise die Fenster noch besser anpassen an Größe etc.
Ich nehme sehr gerne konstruktive Kritik und Verbesserungsvorschläge an
Python-Code
Ich nehme sehr gerne konstruktive Kritik und Verbesserungsvorschläge an
import wx, random, os
class Deck52(list):
WERTE = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "Bube", "Dame", "König", "Ass"]
FARBEN = ["Kreuz", "Pik", "Herz", "Karo"]
images = [r"imagepath" + "\\" + d for d in
os.listdir(r"imagepath")]
def __init__(self):
self.karten = [Karte(farbe, wert) for farbe in self.FARBEN for wert in self.WERTE]
for i, karte in enumerate(self.karten):
karte.image = self.images[i]
list.__init__(self, self.karten)
class Karte(object):
def __init__(self, farbe, wert, image="default"):
self.farbe = farbe
self.wert = wert
self.image = image
class MyFrame(wx.Frame):
def __init__(self, parent, title, size):
super().__init__(parent, title=title, size=size)
self.talon = Deck52()
pnl2 = wx.Panel(self, pos=(0, 0), size=(1200, 60))
shuffleButton = wx.Button(pnl2, id=wx.ID_ANY, label="Shuffle", pos=(5, 10), size=(80, 40))
resetButton = wx.Button(pnl2, id=wx.ID_ANY, label="Reset", pos=(85, 10), size=(80, 40))
self.Bind(wx.EVT_BUTTON, self.onReset, resetButton)
self.Bind(wx.EVT_BUTTON, self.onShuffle, shuffleButton)
self.panel1()
self.Show(True)
def panel1(self):
self.pnl = wx.Window(self, pos=(0, 60), size=(1400, 540), style=wx.BORDER_SIMPLE)
self.pnl.SetBackgroundColour((20, 200, 20))
xpos = lambda x: (x * 80) % 1040
for i, karte in enumerate(self.talon):
ypos = 0
if 12 < i < 26:
ypos = 125
elif 25 < i < 39:
ypos = 250
elif 38 < i:
ypos = 375
picture = wx.Image(karte.image, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
wx.StaticBitmap(self.pnl, -1, picture, (xpos(i), ypos), (picture.GetWidth(), picture.GetHeight()))
self.Refresh()
def onReset(self, e):
self.talon = Deck52()
self.panel1()
def onShuffle(self, event):
random.shuffle(self.talon)
self.panel1()
if __name__ == '__main__':
app = wx.App(False)
frame = MyFrame(None, "Shufflethis", size=(1200, 700))
app.MainLoop()
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1
