wir sollten für die Schule ein Programm zum Glücksspiel "Chuck-A-Luck" programmieren, welches übrigens verboten ist weil es extrem vorteilhaft für die Bank ist;)
Schnell die Regeln:
Man zahlt einen Einsatz, wählt dann eine Zahl aus und würfelt mit 3 Würfeln.
Wenn man die Zahl einmal trifft, erhält man zweimal den Einsatz, das heißt man gewinnt einmal den Einsatz.
Für jeden weiteren Treffer, erhält man nochmal den Einsatz, das ganze Spiel wird übrigens fair wenn man hier für jeden weiteren Treffer 2 mal den Einsatz erhält, falls ich mich nicht verrechnet hab...^^
Das ganze könnt ihr auch im Programm nachlesen, wenn ihr auf das Fragezeichen klickt(Allerdings sieht das iwie blöd aus, hab aber keinen Plan wie das besser aussehen könnte^^)
Hier unten der Code, ich bin ganz zufrieden damit und würde gerne eure Meinungen hören:)
Code: Alles auswählen
#-------------------------------------------------------------------------------
# Name: module1
# Purpose:
#
# Author: Eric
#
# Created: 03.06.2014
# Copyright: (c) Eric 2014
# Licence: <your licence>
#-------------------------------------------------------------------------------
try:
from tkinter import *
except ImportError:
from Tkinter import *
from random import randint
class Spielzahl(object):
def __init__(self):
self.spielzahl = None
def setzen(self,wert):
self.spielzahl = wert
class Wuerfel(object):
def __init__(self):
self.augen = randint(1,6)
def werfen(self):
self.augen = randint(1,6)
class Konto(object):
def __init__(self,stand=0):
self.stand = int(stand)
def einzahlen(self,betrag):
self.stand += betrag
def auszahlen(self,betrag):
self.stand -= betrag
class CaLM(object):
def __init__(self):
self.k = Konto(randint(50,150))
self.s = Spielzahl()
self.wA = Wuerfel()
self.wB = Wuerfel()
self.wC = Wuerfel()
def einsatzZahlen(self,einsatz):
if self.k.stand<=0:
print("Konto leer! Bitte verlassen sie nun unser Kasino")
return 1
else:
if self.k.stand-einsatz < 0:
print("So viel Geld haben sie leider nicht mehr! Setzen sie weniger!")
return 2
else:
self.k.auszahlen(einsatz)
self.einsatz = einsatz
return 3
def spielzahlSetzen(self,zahl):
self.s.setzen(zahl)
def wuerfelWerfen(self):
self.wA.werfen()
self.wB.werfen()
self.wC.werfen()
def gewinnAuszahlen(self):
anzahlTreffer=0
if self.wA.augen == self.s.spielzahl:
anzahlTreffer += 1
if self.wB.augen == self.s.spielzahl:
anzahlTreffer += 1
if self.wC.augen == self.s.spielzahl:
anzahlTreffer += 1
if anzahlTreffer >= 1:
self.k.einzahlen(2*self.einsatz)
if anzahlTreffer >= 2:
self.k.einzahlen(self.einsatz)
if anzahlTreffer == 3:
self.k.einzahlen(self.einsatz)
class CaLGUI(Frame):
def __init__(self,master,imageListe):
self.imageListe = imageListe
self.hilfzaehler=0
self.model=CaLM()
Frame.__init__(self,master)
self.menu=Menu(self.master)
self.master.config(menu=self.menu)
self.menu.add_checkbutton(label="Beenden",command=self.master.destroy)
self.optionmenu=Menu(self.menu)
self.menu.add_cascade(label="Optionen",menu=self.optionmenu)
self.optionmenu.add_command(label="Geld Einzahlen",command=self.geldEinzahlen)
self.LabelChuckALuck = Label(master,background="darkgrey",text="Chuck-A-Luck",font=("timesnewroman",15))
self.LabelChuckALuck.place(x=5,y=5,width=420,height=25)
self.infoButton = Button(master,background="white",text="?",font=("timesnewroman",15),relief=SOLID,command=self.info)
self.infoButton.place(x=430,y=5,width=30,height=25)
self.master.geometry("465x141")
self.master.title("Chuck-A-Luck")
self.frameZahl = Frame(master,background="lightgreen")
self.frameZahl.place(x=120,y=35,width=110,height=100)
self.labelUeberschriftZahl = Label(self.frameZahl,text="Spielzahl",background="white")
self.labelUeberschriftZahl.place(x=5,y=5,width=100,height=20)
self.spielzahl = IntVar()
self.radiobutton1 = Radiobutton(self.frameZahl,text="1",value=1,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton1.place(x=5,y=30,width=30,height=18)
self.radiobutton2 = Radiobutton(self.frameZahl,text="2",value=2,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton2.place(x=40,y=30,width=30,height=18)
self.radiobutton3 = Radiobutton(self.frameZahl,text="3",value=3,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton3.place(x=75,y=30,width=30,height=18)
self.radiobutton4 = Radiobutton(self.frameZahl,text="4",value=4,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton4.place(x=5,y=53,width=30,height=18)
self.radiobutton5 = Radiobutton(self.frameZahl,text="5",value=5,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton5.place(x=40,y=53,width=30,height=18)
self.radiobutton6 = Radiobutton(self.frameZahl,text="6",value=6,variable=self.spielzahl,command=self.zahl,state=DISABLED)
self.radiobutton6.place(x=75,y=53,width=30,height=18)
self.gewinnButton = Button(self.frameZahl,text="Gewinn auszahlen",relief=SOLID,background="white",command=self.gewinn,state=DISABLED)
self.gewinnButton.place(x=5,y=76,width=100,height=20)
self.frameKonto = Frame(master,background="red")
self.frameKonto.place(x=5,y=35,width=110,height=100)
self.labelUeberschriftKonto = Label(self.frameKonto,text="Konto",background="white")
self.labelUeberschriftKonto.place(x=5,y=5,width=100,height=20)
self.einsatzButton = Button(self.frameKonto,text="Einsatz zahlen",relief=SOLID,background="white",command=self.einsatz)
self.einsatzButton.place(x=5,y=76,width=100,height=20)
self.einsatzEntry = Entry(self.frameKonto)
self.einsatzEntry.place(x=5,y=51,width=100,height=20)
self.standLabel = Label(self.frameKonto,text=self.model.k.stand,background="white")
self.standLabel.place(x=40,y=30,width=30,height=15)
self.frameWuerfel = Frame(master,background="orange")
self.frameWuerfel.place(x=235,y=35,width=110,height=100)
self.labelUeberschriftWuerfel = Label(self.frameWuerfel,text="Wuerfel",background="white")
self.labelUeberschriftWuerfel.place(x=5,y=5,width=100,height=20)
self.labelwA = Label(self.frameWuerfel,image=self.imageListe[self.model.wA.augen-1],relief=SOLID)
self.labelwA.place(x=5,y=35,width=30,height=31)
self.labelwB = Label(self.frameWuerfel,image=self.imageListe[self.model.wB.augen-1],relief=SOLID)
self.labelwB.place(x=40,y=35,width=30,height=31)
self.labelwC = Label(self.frameWuerfel,image=self.imageListe[self.model.wC.augen-1],relief=SOLID)
self.labelwC.place(x=75,y=35,width=30,height=31)
self.werfButton = Button(self.frameWuerfel,text="Wuerfel werfen",relief=SOLID,background="white",command=self.werfen,state=DISABLED)
self.werfButton.place(x=5,y=76,width=100,height=20)
self.frameZaehler=Frame(master,background="lightblue")
self.frameZaehler.place(x=350,y=35,width=110,height=100)
self.labelUeberschriftZaehler=Label(self.frameZaehler,text="Zaehler",background="white")
self.labelUeberschriftZaehler.place(x=5,y=5,width=100,height=20)
self.eingabe=Entry(self.frameZaehler)
self.eingabe.place(x=5,y=35,width=100,height=31)
self.zaehlButton=Button(self.frameZaehler,text="Spiele durchfuehren",relief=SOLID,background="white",command=self.testspiele)
self.zaehlButton.place(x=5,y=76,width=100,height=20)
def einsatz(self):
x=self.model.einsatzZahlen(int(self.einsatzEntry.get()))
self.standLabel.configure(text=self.model.k.stand)
if x==1:
self.infoButton.config(state=DISABLED)
if x==1 or x==3:
self.einsatzEntry.config(state=DISABLED)
self.einsatzButton.config(state=DISABLED)
self.zaehlButton.config(state=DISABLED)
if x==3:
self.radiobutton1.config(state=NORMAL)
self.radiobutton2.config(state=NORMAL)
self.radiobutton3.config(state=NORMAL)
self.radiobutton4.config(state=NORMAL)
self.radiobutton5.config(state=NORMAL)
self.radiobutton6.config(state=NORMAL)
def zahl(self):
self.model.spielzahlSetzen(self.spielzahl.get())
self.radiobutton1.config(state=DISABLED)
self.radiobutton2.config(state=DISABLED)
self.radiobutton3.config(state=DISABLED)
self.radiobutton4.config(state=DISABLED)
self.radiobutton5.config(state=DISABLED)
self.radiobutton6.config(state=DISABLED)
self.werfButton.config(state=NORMAL)
def werfen(self):
if self.hilfzaehler<=10:
self.hilfzaehler+=1
self.model.wuerfelWerfen()
self.labelwA.config(image=self.imageListe[(self.model.wA.augen)-1])
self.labelwB.config(image=self.imageListe[(self.model.wB.augen)-1])
self.labelwC.config(image=self.imageListe[(self.model.wC.augen)-1])
self.master.after(75,self.werfen)
else:
self.werfButton.config(state=DISABLED)
self.gewinnButton.config(state=NORMAL)
self.hilfzaehler=0
def testspiele(self):
hilf1=self.model.k.stand
for i in range(int(self.eingabe.get())):
self.model.einsatzZahlen(1)
self.model.spielzahlSetzen(randint(1,6))
self.model.wuerfelWerfen()
self.gewinn()
if self.model.k.stand<=0:
print("Nach",i,"Spielen hatten sie kein Geld mehr!")
hilf2=self.model.k.stand
hilf3=hilf1-hilf2
print("Sie haben",hilf3/i,"EUR pro Spiel verloren.")
break
self.standLabel.config(text=self.model.k.stand)
def gewinn(self):
self.model.gewinnAuszahlen()
self.standLabel.configure(text=self.model.k.stand)
self.gewinnButton.config(state=DISABLED)
self.einsatzEntry.config(state=NORMAL)
self.einsatzEntry.delete(0,END)
self.einsatzButton.config(state=NORMAL)
self.zaehlButton.config(state=NORMAL)
def info(self):
infText="""Setzen sie ihren Einsatz und treffen sie die richtige Zahl!
Fuer einen Treffer erhalten sie ihren doppelten Einsatz!
Fuer jeden weiteren Treffer gibt es nochmal den Einsatz!"""
self.info=Toplevel()
self.info.title("Chuck-A-Luck")
self.info.geometry("300x210")
self.infoFrame=Frame(self.info,background="yellow")
self.infoFrame.place(x=5,y=5,width=290,height=200)
self.msg=Message(self.infoFrame,background="white",text=infText,font=("timesnewroman",11),anchor=NW)
self.msg.place(x=5,y=5,width=280,height=180)
self.infoButton=Button(self.infoFrame,background="white",text="Bestaetigen!",command=self.zerstoeren)
self.infoButton.place(x=5,y=170,height=25,width=280)
self.info.transient(self.master)
self.info.grab_set()
self.master.wait_window(self.info)
def zerstoeren(self):
self.info.destroy()
def geldEinzahlen(self):
passwort=input("Passwort Bitte!")
if passwort==str(self.model.k.stand):
geld=int(input("Wie viel Geld soll eingezahlt werden? (In EUR)"))
else:
geld=0
self.model.k.einzahlen(geld)
self.standLabel.config(text=self.model.k.stand)
def main():
root=Tk()
bilder=[PhotoImage(file='w1.gif'),
PhotoImage(file='w2.gif'),
PhotoImage(file='w3.gif'),
PhotoImage(file='w4.gif'),
PhotoImage(file='w5.gif'),
PhotoImage(file='w6.gif')]
root=CaLGUI(root,bilder)
root.mainloop()
if __name__=='__main__':
main()
Das Passwort um neues Geld einzuzahlen ist immer der aktuelle Kontostand^^, dazu will ich noch fragen ob es möglich ist bei Inputs "*" anzeigen zu lassen, bei Entrys geht das auf jeden Fall.
Ich freu mich auf eure Kommentare:D
Dulac