Code: Alles auswählen
#Rollenspiel
import random
import pickle
import time
import easygui
#Charakter
class Charakter:  #Standard des Charakters
    def __init__(self, charaktername, leben=10, erforderliche_xp=100, gold=300):
        self.name=charaktername
        self.leben=leben
        self.level=1
        self.erfahrung=0
        self.erforderliche_xp=erforderliche_xp
        self.gold=gold
        self.heiltränke=1
        self.standard_angriffskraft=2
        self.waffen_angriffskraft=0
        self.heiltrankskosten=100
        self.skillpunkte=0
        self.vorherige_angriffskraft=0
        self.waffe="Einfaches Schwert"
    def inventar_anzeigen(self):
        print ("Gold:", self.gold)
        print ("Heiltränke:", self.heiltränke)
        print ("Erfahrungspunkte:", self.erfahrung, "von", self.erforderliche_xp)
    def aufnehmen_Inventar(self, gold, heiltränke):
        self.gold+=gold
        self.heiltränke+=heiltränke
    def zeige_Charakterdaten(self):
        print (self.name, "ist auf Level", self.level)
        print ("Angriffskraft:", self.angriffskraft)
        print ("Leben:", self.leben)
    def neues_Level(self):
        if self.erfahrung>=self.erforderliche_xp:
            self.level+=1
            self.erfahrung=0
            self.erforderliche_xp=self.erforderliche_xp*1.5+self.level*50
            print ("Sie haben ein neues Level erreicht:", self.level,
                   "\nSie benötigen für das nächste Level", self.erforderliche_xp, "Erfahrungspunkte\n"
                   "Sie haben 2 Skillpunkte bekommen")
            Abstand()
            self.skillpunkte=self.skillpunkte+1
    def skillen(self):
        while True:
            if self.skillpunkte==0:
                break
            skill=easygui.buttonbox("Was soll geskillt werden? Sie haben:",
                                    choices=("Leben+1", "Angriffskraft+1"))
            self.skillpunkte=self.skillpunkte-1
            if skill=="Leben+1":
                self.leben+=1
            if skill=="Angriffskraft+1":
                self.standard_angriffskraft+=1
    def angreifen(self):
        self.vorherige_angriffskraft=self.angriffskraft
        self.angriffskraft=random.randint(self.angriffskraft-1, self.angriffskraft+1)
    def debuggen_angreifen(self):
        self.angriffskraft=self.vorherige_angriffskraft
    def heiltränke_kaufen(self):
        self.zahl=easygui.integerbox("Wie viele Heiltränke möchten sie kaufen")
        if self.heiltrankskosten*self.zahl<self.gold:
            self.gold-self.heiltrankskosten*self.zahl
            self.heiltränke+=self.zahl
        else:
            print("Nicht genug Geld")
    def aktualisiere_Charakter(self):
        self.angriffskraft=self.standard_angriffskraft+self.waffen_angriffskraft
class Schwertkämpfer(Charakter):
    def __init__(self, name, leben=11):
        Charakter.__init__(self, charaktername=name, leben=leben)
class Ork(Charakter):
    def __init__(self, name):
        Charakter.__init__(self, charaktername=name)
        self.standard_angriffskraft+=1
class Monster:
    def __init__(self, angriffskraft, name, beute,leben, erfahrung):
        self.angriffskraft=angriffskraft
        self.name=name
        self.beute=beute
        self.leben=leben
        self.erfahrung=erfahrung
class Quest:
    def __init__(self, monster, belohnung, erfahrung, monster_anzahl, text, charakter, bestätigung=False):
        self.monster=monster
        self.belohnung=belohnung
        self.monster_anzahl=monster_anzahl
        self.text=text
        self.bestätigung=bestätigung
        self.erfahrung=erfahrung
    def quest_durchführen(self, charakter):
        print (self.text)
        entscheidung=easygui.buttonbox("Willst du die Quest antreten???!",
                                       choices=["Ja", "Nein"])
        if entscheidung=="Ja":
            self.bestätigung=True
        else:
            self.bestätigung=False
        if self.bestätigung:
            for i in range(self.monster_anzahl):
                Kampf(charakter, self.monster)
                Abstand()
            charakter.gold+=self.belohnung
            charakter.erfahrung+=self.erfahrung
def Kampf(charakter, monster):
    alte_monster_leben=monster.leben
    alte_charakter_leben=charakter.leben
    print("Sie kämpfen gegen einen",monster.name)
    while True:
        kampf_auswahl=easygui.buttonbox("Was möchten sie tun?",
                                        choices=["Kämpfen", "Heiltrank einsetzen"])
        time.sleep(2)
        if kampf_auswahl=="Heiltrank einsetzen":
            if charakter.heiltränke>0:
                charakter.leben=alte_charakter_leben
                charakter.heiltränke-=1
            else:
                easygui.msgbox("Keine Heiltränke mehr")
        if kampf_auswahl=="Kämpfen":
            charakter.angreifen()
            monster.leben=monster.leben-charakter.angriffskraft
            charakter.leben=charakter.leben-monster.angriffskraft
            print ("Treffer, das Monster verlor", charakter.angriffskraft, "Leben")
            if monster.leben<=0:
                print ("Es hat alle Leben verloren")
                break
            else:
                print ("Es hat noch", monster.leben, "Leben")
            print ("Sie haben noch", charakter.leben, "Leben")
            charakter.debuggen_angreifen()
            if charakter.leben<=0:
                print("Du bist tot")
                wiederbelebung=easygui.buttonbox("Möchten sie wiederbelebt werden? Eine Wiederbelebung kostet 200 Gold.",
                                             choices=["Ja", "Nein"])
                if wiederbelebung=="Nein":
                    wiederbelebung_nein=esygui.buttonbox("Sind sie sicher? Sie verlieren all Spielstände!!!",
                                                     choices=["Sicher", "Wiederbelebung"])
                    if wiederbelebung_nein=="Sicher":
                        charakter.level=0
                        charakter.gold=0
                        charakter.erfahrung=0
                        charakter.angriffskraft=2
                        charakter.leben=10
                        charakter.skillpunkte=0
                    elif wiederbelebung_nein=="Wiederbelebung":
                        wiederbeleben(charakter)
                    
                elif wiederbelebung=="Ja":
                    wiederbeleben(charakter)
                    return
            
    if monster.leben<=0:
        print ("Der", monster.name, "ist tot. Sie erhielten", monster.beute, "Gold und", monster.erfahrung, "Erfahrungspunkte.")
        charakter.gold=charakter.gold+monster.beute
        charakter.erfahrung=charakter.erfahrung+monster.erfahrung
        monster.leben=alte_monster_leben
        charakter.leben=alte_charakter_leben
        return
def Waffenladen(charakter):
    x=easygui.choicebox("Was für eine Waffe wollen sie kaufen",
                        choices=["Dolch (Kosten:150)", "Kurzschwert (Kosten:350)", "Axt (Kosten:4700)"])
    if x=="Dolch (Kosten:150)":
        Waffenladenverkürzung(charakter, "Dolch", 1, 150)
    elif x=="Kurzschwert (Kosten:350)":
        Waffenladenverkürzung(charakter, "Kurzschwert", 2, 350)
    elif x=="Axt (Kosten:4700)":
        Waffenladenverkürzung(charakter, "Axt", 6, 4700)
    elif x=="Zweihandschwert (Kosten:2000)":
        Waffenladenverkürzung(charakter, "Zweihandschwert", 4, 2000)
        
                        
def Waffenladenverkürzung(charakter, name, angriffskraft, kosten):
    if charakter.gold>kosten:
        charakter.waffe=name
        charakter.waffen_angriffskraft=angriffskraft
        charakter.gold-=kosten
        easygui.msgbox("Kauf erfolgreich")
    else:
        easygui.msgbox("Zu wenig Geld")
        
    
def Abstand():
    for i in range(3):
        print ()
def Ablauf(charakter, q_liste):
    global cheaten
    c1.aktualisiere_Charakter()
    Abstand()
    eingabe=easygui.buttonbox("Was möchten sie tun???",
                              choices=["Charakterdaten", "Kampf", "Quests", "Shop", "Beenden", " "])
    if eingabe=="Charakterdaten":
        Abstand()
        charakter.zeige_Charakterdaten()
        charakter.inventar_anzeigen()
    elif eingabe=="Kampf":
        Abstand()
        if c1.level<=3:
            Kampf(charakter, random.choice(level_1_monster))
        if c1.level<=6:
            Kampf(charakter, random.choice(level_4_monster))
        elif c1.level<=10:
            Kampf(charakter, random.choice(level_10_monster))
    elif eingabe=="Quests":
        try:
            x=random.choice(q_liste)
            x.quest_durchführen(charakter)
            q_liste.remove(x)
        except:
            print ("Keine Quest verfügbar")
    elif eingabe=="Shop":
        geschäft=easygui.buttonbox("Möchten sie Heiltränke oder Waffen kaufen?",
                                   choices=["Heiltränke", "Waffen"])
        if geschäft=="Heiltränke":
            charakter.heiltränke_kaufen()
        elif geschäft=="Waffen":
            Waffenladen(charakter)
        
    elif eingabe=="Beenden":
        try:
            speicher_auswahl=easygui.buttonbox("Wollen sie abspeichern?",
                                                choices=["Ja", "Nein"])
            if speicher_auswahl=="Ja":
                speichern(c1)
                quit("Speichern erfolgreich")
            else:
                quit("Beendet ohne Abzuspeichern")
        except:
            pass
    charakter.neues_Level()
    charakter.skillen()
def speichern(charakter):
    with open("gespeicherte_charakterdaten.pkl", "wb") as datei:
        pickle.dump(charakter, datei)
        datei.close()
def wiederbeleben(charakter):
    charakter.gold-=200
    charakter.erfahrung-=50
   
#Laden
try:
    with open("gespeicherte_charakterdaten.pkl", "rb") as datei:
        c1=pickle.load(datei)
#Neuen Charakter erstellen
except:
    charaktername=easygui.enterbox("Wie soll dein Charakter heißen: ")
    charaktertyp=easygui.buttonbox("Soll dein Charakter ein Schwertkämpfer oder Ork sein",
                                    choices=("Ork", "Schwertkämpfer"))
    if charaktertyp=="Schwertkämpfer":
        c1=Schwertkämpfer(charaktername)
    elif charaktertyp=="Ork":
        c1=Ork(charaktername)
cheaten=False
#Monster
m1=Monster(angriffskraft=3, name="Wolf", beute=100, leben=6, erfahrung=15)
m2=Monster(angriffskraft=4, name="Rohrling", beute=150, leben=5, erfahrung=20)
m3=Monster(angriffskraft=4, name="Braunbär", beute=170, leben=9,erfahrung=30)
m4=Monster(angriffskraft=7, name="Werwolf", beute=200, leben=6, erfahrung=35)
m5=Monster(angriffskraft=3, name="Schildträger", beute=200, leben=20, erfahrung=35)
#Quests
q1=Quest(m1, 1000, 150, 5, "Die Stadt wird von Wölfen angegriffen! Töte 5 Wölfe", False)
q2=Quest(m2, 1000, 170, 3, "Drei Rohrlinge haben dich zum Kampf aufgefordert", False)
q3=Quest(m3, 1400, 180, 2, "Zwei Braunbären treiben ihr Unwesen in den Wäldern. Töte sie", False)
#Listen
quest_liste=[q1, q2]
level_1_monster=[m1, m2]
level_4_monster=[m2, m3, m4]
level_10_monster[m3, m4, m5]
while True:
    Ablauf(c1, quest_liste)Ich möchte noch mehr Quest einfügen.
Leben sollen sich nach einer gewissen Zeit regenerieren und nicht direkt nach dem Kampf wieder voll sein.
Bitte um Anmerkungen, Kritik was besser gemacht werden könnte und eventuell was ich hinzufügen sollte.
Grüße Pythoraner
