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