ich habe ein kleines Spiel Programmiert mit Grafischer Benutzeroberfläche in dem man Wörter erraten muss. Möglich ist das ganze in Deutscher und in Englischer Sprache, Es ist ein kleines Punktesystem dabei und am Ende wird die erreichte Gesamtpunktzahl angezeigt. Als nächsten Schritt möchte ich eine Highscore-Liste einfügen und das ganze über eine Webseite nutzbar machen. Außerdem sollen Fehlerhafte Wörter gemeldet werden können, evtl. per e-mail Benachrichtigung an mich über den bereits eingefügten Button auf der rechten Seite.
Wichtig: Es müssen die zwei Dateien (wortliste_de.txt und wortliste_en.txt) mit den Wortlisten im gleichen Verzeichnis liegen.
Wortliste DE: https://www.dropbox.com/s/23iccovudy2z3 ... e.txt?dl=0
Wortliste EN: https://www.dropbox.com/s/b6tf2yd1qpcc2 ... n.txt?dl=0
Code: Alles auswählen
from tkinter import *
from random import *
class Hangman:
"""Spiel"""
def __init__(self):
# Fenster und Rahmen
self.fenster = Tk()
self.fenster.title('Wörterraten')
self.font = 'Helvetica'
self.entry = StringVar()
self.rahmen_oben = Frame(master=self.fenster, relief=FLAT)
self.rahmen_mitte = Frame(master=self.fenster, relief=FLAT, width=110)
self.rahmen_unten = Frame(master=self.fenster, relief=FLAT)
self.rahmen_unten_l = Frame(master=self.rahmen_unten, relief=FLAT, width=10)
self.rahmen_unten_r = Frame(master=self.rahmen_unten, relief=FLAT, width=20)
# Benutzeroberfläche
self.titel = Label(master=self.rahmen_oben, text='Wörterraten', font=(self.font, 24), width=30)
self.punkte_label = Label(master=self.rahmen_oben, text='Punkte: ', font=(self.font, 16))
self.wort_label = Label(master=self.rahmen_oben, text='Wort: ', font=(self.font, 16))
self.wortzahl = Wortzahl(self.rahmen_oben)
self.max_woerter = Label(master=self.rahmen_oben, text='/5', font=(self.font, 16), bg='LightCyan2')
self.tip = Label(master=self.rahmen_oben, text='Treffer: +1 Pkt.\tFehlversuch: -1 Pkt.\tWort erraten: +5 Pkt.',
font=(self.font, 10), fg='black')
# Objekte
self.sprache = Sprache(self.rahmen_unten_l)
self.punkte = Punkte(self.rahmen_oben, 20)
self.ausgabe = Ausgabe(self.rahmen_mitte, self.sprache)
self.fehler_melden = Fehler(self.rahmen_mitte, self.sprache, self.ausgabe)
self.eingabe = Entry(master=self.rahmen_unten_r, textvariable=self.entry, font=(self.font, 24),
width=2, bg='white')
self.ok = ButtonOK(self.rahmen_unten_r, self.eingabe, self.ausgabe, self.punkte, self.wortzahl)
self.neu = ButtonNeu(self.rahmen_unten_r, self.punkte, self.sprache, self.ausgabe, self.wortzahl, self.ok)
self.layout()
self.fenster.mainloop()
def layout(self):
self.rahmen_oben.pack(side=TOP, padx=20)
self.rahmen_mitte.pack(side=TOP, fill=X)
self.rahmen_unten.pack(side=TOP, fill=X)
self.rahmen_unten_l.pack(side=LEFT)
self.rahmen_unten_r.pack(side=RIGHT)
self.titel.pack(padx=20, pady=10, side=TOP)
self.tip.pack(side=BOTTOM)
self.punkte.label.pack(side=RIGHT)
self.punkte_label.pack(side=RIGHT)
self.wort_label.pack(side=LEFT)
self.wortzahl.label.pack(side=LEFT)
self.max_woerter.pack(side=LEFT)
self.fehler_melden.button.pack(side=RIGHT, padx=20, anchor=E)
self.ausgabe.label.pack(padx=10, pady=10, side=TOP)
self.neu.button_neu.pack(side=LEFT, padx=20, pady=5)
self.eingabe.pack(side=LEFT)
self.ok.button.pack(side=RIGHT, padx=20, pady=5)
class Punkte:
def __init__(self, master, p):
self.punkte = IntVar()
self.punkte.set(p)
self.label = Label(master, textvariable=self.punkte, width=2, font=('Helvetica', 16), bg='LightCyan2')
def aktualisiere(self, wert):
self.punkte.set(self.punkte.get() + wert)
class Wortzahl:
def __init__(self, master):
self.wortzahl = IntVar()
self.wortzahl.set(1)
self.label = Label(master, textvariable=self.wortzahl, font=('Helvetica', 16), bg='LightCyan2')
class Ausgabe:
def __init__(self, master, sprache):
self.master = master
self.sprache = sprache
self.wort = self.sprache.wg.get_wort()
self.ausgabe = len(self.wort) * '-'
self.label = Label(self.master, text=self.ausgabe, width=int(len(self.wort)*1.5),
font=('Helvetica', 30), bg='white')
def neues_wort(self):
self.wort = self.sprache.wg.get_wort()
self.ausgabe = len(self.wort) * '-'
self.label.config(text=len(self.wort)*'-')
self.label.config(width=int(len(self.wort)*1.5))
class Fehler:
def __init__(self, master, sprache, ausgabe):
self.master = master
self.sprache = sprache
self.ausgabe = ausgabe
self.button = Button(master, text='Fehlerhaftes\nWort melden',
font=('Helvetica', 10), command=self.fehler_melden)
def fehler_melden(self):
wort = self.ausgabe.wort
sprache = self.sprache.sprache.get()
print('Gemeldetes Wort: ' + wort + ', Sprache: ' + sprache)
class Sprache:
def __init__(self, master):
self.master = master
self.sprache = StringVar()
self.font = 'Helvetica'
self.de = Radiobutton(master, text='Deutsch', font=self.font, value='de',
variable=self.sprache)
self.en = Radiobutton(master, text='Englisch', font=self.font, value='en',
variable=self.sprache)
self.de.pack(padx=20)
self.de.select()
self.en.pack(padx=20, pady=10)
self.wg = Wortgenerator(self.sprache)
def get_datei(self):
return self.sprache.get()
def neuer_wg(self):
self.wg = Wortgenerator(self.sprache)
class ButtonNeu:
def __init__(self, master, punkte, sprache, ausgabe, wortzahl, ok):
self.master = master
self.punkte = punkte
self.sprache = sprache
self.ausgabe = ausgabe
self.wz = wortzahl
self.ok = ok
self.button_neu = Button(master, text='Neu', font=('Helvetica', 12), command=self.neues_spiel)
def neues_spiel(self):
self.sprache.neuer_wg()
self.punkte.punkte.set(20)
self.wz.wortzahl.set(1)
self.ausgabe.neues_wort()
self.ok.button.config(command=self.ok.pruefe)
class ButtonOK:
def __init__(self, master, eingabe, ausgabe, punkte, wortzahl):
self.master = master
self.eingabe = eingabe
self.ausgabe = ausgabe
self.punkte = punkte
self.wz = wortzahl
self.button = Button(master, text='OK', font=('Helvetica', 12), command=self.pruefe)
def pruefe(self):
z = self.eingabe.get().upper()
ausgabeliste = list(self.ausgabe.ausgabe)
self.eingabe.delete(0, 2)
if z in self.ausgabe.wort and z not in ausgabeliste:
# Ausgabe aktualisieren
for b in range(len(self.ausgabe.wort)):
if self.ausgabe.wort[b] == z:
ausgabeliste[b] = z
self.ausgabe.ausgabe = ausgabeliste
self.ausgabe.label.config(text=''.join(ausgabeliste))
self.punkte.aktualisiere(1)
# Wenn Wort vollständig, wird neues Wort erzeugt
if '-' not in self.ausgabe.ausgabe:
if self.wz.wortzahl.get() == 5:
self.ausgabe.label.config(text=str('Fertig! ' + str(self.punkte.punkte.get()) + ' Punkte'))
self.ausgabe.label.config(width=18)
self.button.config(command='')
else:
self.button.after(1000, self.ausgabe.neues_wort)
self.punkte.aktualisiere(5)
self.wz.wortzahl.set(self.wz.wortzahl.get() + 1)
else:
self.punkte.aktualisiere(-1)
class Wortgenerator:
def __init__(self, sprache):
self.sprache = sprache.get()
datei = 'wortliste_' + self.sprache + '.txt'
self.wortliste = []
f = open(datei, 'r')
self.liste = f.readlines()
f.close()
for x in self.liste:
w = list(x)
del w[-1]
wort = ''
for buchstabe in w:
wort += buchstabe
self.wortliste.append(wort.upper())
def get_wort(self):
# Liefert aus Wortliste ein Zufallswort
return choice(self.wortliste)
Hangman()