Seite 1 von 1
Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 14:40
von Pythoraner123
Hallo,
ich versuche ein Rollenspiel zu programmieren.
Leider hab ich ein Problem, wenn ich mehrere Charakter erstellen möchte.
Code: Alles auswählen
def neuercharacter():
global charaktername, ctyp
charaktername=input("Wie soll der Charakter heißen")
ctyp=input("1 für Schwertkämpfer, 2 für Ork")
Jetzt hab ich keine andere Möglichkeit gefunden als im Hauptprogramm zu schreiben:
So ist es aber nur möglich einen Charakter herzustellen.
Wie schafft man mehrere?
Danke schon mal im Voraus.
Re: Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 14:43
von derdon
1. Vergiss, das global existiert. Benutze Funktionen und Rückgabewerte.
2. Erstelle Listen von Objekten, wenn du mehr als eine Instanz einer Klasse erstellen möchtest. Das geht mit der eingebauten Funktion map, mit einer List-Comprehension oder "per hand" indem du zuerst eine leere Liste erstellst und sie dann in einer for-Schleife mit der Methode append mit Werten füllst.
Re: Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 15:07
von Pythoraner123
Könntest du mir ein Besipiel machen?
Bin noch nicht so lange bei Phyton dabei.
Den Rest des Programms hab ich objektorientiert geschrieben, nur bei den Charaktern hab ich Probleme
Danke
Re: Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 15:19
von Sirius3
Hallo Pythoraner123,
das was Du schreibst ist kein Python (z.B. = statt == bei Vergleichen).
Ich würde Dir, bevor Du Dich an komplizierte Rollenspiele
heranwagst ein Einsteiger-Tutorial empfehlen.
Dort lernst Du dann auch was Listen sind.
Achte vor allen darauf, die Eingaben von der eigentlichen Programmlogik sauber zu trennen.
Hier nur mal ein kleiner Anfang:
Code: Alles auswählen
class AllgemeinerCharakter:
def __init__(self, charaktername):
self.charaktername = charaktername
# noch mehr allgemeine Eigenschaften
class Ork(AllgemeinerCharakter):
AnzeigeName = 'Ork'
class Schwertkaempfer(AllgemeinerCharakter):
AnzeigeName = 'Schwertkämpfer'
class CharakterFabrik:
def __init__(self, *prototypen):
self.prototypen = list(prototypen)
def neuer_charakter(self, charaktername, ctyp):
return self.prototypen[int(ctyp)-1](charaktername)
def get_inputfields(self):
return ["Wie soll der Charakter heißen?",
', '.join('{} für {}'.format(nr+1, prototyp.AnzeigeName) for nr, prototyp in enumerate(self.prototypen))
]
charakter_fabrik = CharakterFabrik(Schwertkaempfer, Ork)
charaktere = []
print("Gib 3 Charaktere ein!")
for num in range(3):
args = []
for text in charakter_fabrik.get_inputfields():
args.append(input(text))
charaktere.append(charakter_fabrik.neuer_charakter(*args))
Grüße
Sirius
Re: Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 16:58
von derdon
Pythoraner123 hat geschrieben:Könntest du mir ein Besipiel machen?
Ja, kann ich (für Python3 geschrieben; weil du Umlaute in deinen Namen verwendest, habe ich angenommen, dass du Python3 benutzt):
Code: Alles auswählen
>>> class Schwertkämpfer:
... def __init__(self, charaktername):
... self.charaktername = charaktername
... def __repr__(self):
... return '{}({!r})'.format(self.__class__.__name__, self.charaktername)
...
>>> # möglichkeit 1: mit der Funktion map
...
>>> list(map(Schwertkämpfer, ["Grombor", "Jöörk", "Oxgär"]))
[Schwertkämpfer('Grombor'), Schwertkämpfer('Jöörk'), Schwertkämpfer('Oxgär')]
>>> # Möglichkeit 2: mit einer List-Comprehension
...
>>> [Schwertkämpfer(name) for name in ["Grombor", "Jöörk", "Oxgär"]]
[Schwertkämpfer('Grombor'), Schwertkämpfer('Jöörk'), Schwertkämpfer('Oxgär')]
>>> # Möglichkeit 3: manuell mit einer for-Schleife und der Methode append
...
>>> kämpfer = []
>>> for name in ["Grombor", "Jöörk", "Oxgär"]:
... kämpfer.append(Schwertkämpfer(name))
...
>>> kämpfer
[Schwertkämpfer('Grombor'), Schwertkämpfer('Jöörk'), Schwertkämpfer('Oxgär')]
Re: Mehrere Charakter erstellen
Verfasst: Sonntag 6. Januar 2013, 20:34
von Pythoraner123
Entschuldigung erstmal wegen dem "=" statt dem "==" beim Vergleich.
Flüchtigkeitsfehler.
Code: Alles auswählen
#Rollenspiel
import random
#Charakter
class Charakter: #Standard des Charakters
def __init__(self, charaktername, level=1, erfahrung=0, erforderliche_xp=100, gold=500, heiltränke=1, heiltrankskosten=100):
self.name=charaktername
self.level=level
self.erfahrung=erfahrung
self.erforderliche_xp=erforderliche_xp
self.gold=gold
self.heiltränke=heiltränke
self.heiltrankskosten=heiltrankskosten
def anzeigen_Inventar(self):
print ("Gold:", self.gold)
print ("Heiltränke:", self.heiltränke)
def aufnehmen_Inventar(self, gold, heiltränke):
self.gold+=gold
self.heiltränke+=heiltränke
def kaufen_Inventar(self, anzahl_gekaufter_heiltränke):
self.gold-=heiltrankskosten*anzahl_gekaufter_heiltränke
def angreifen(self):
return True
def zeige_Charakterdaten(self):
print (self.name, "ist auf Level", self.level)
def neues_Level(self):
if self.erfahrung>=self.erforderliche_anzahl_xp:
self.level+=1
self.erfahrung=0
self.erforderliche_anzahl_xp=self.erforderliche_xp*1.5+self.level*100
class Schwertkämpfer(Charakter):
def __init__(self, leben=10, rüstung=10, angriffskraft=2):
Charakter.__init__(self, charaktername,level=1, erfahrung=0)
self.leben=leben
self.rüstung=rüstung
self.angriffskraft=angriffskraft
def angreifen(self):
#Trefferwahrscheinlichkeit
self.treffer=random.choice([True, True, True, True, True, True, True, True, True, False])
return self.treffer
def zeige_Charakterdaten(self):
Charakter.zeige_Charakterdaten(self)
print ("Angriffskraft:", self.angriffskraft)
class Ork(Charakter):
def __init__(self, leben=10, rüstung=5,angriffskraft=3):
Charakter.__init__(self, charaktername,level=1,erfahrung=0)
self.leben=leben
self.rüstung=rüstung
self.angriffskraft=angriffskraft
def angreifen(self):
self.treffer=random.choice([True, True, True, True, False])
return self.treffer
def zeige_Charakterdaten(self):
Charakter.zeige_Charakterdaten(self)
print ("Angriffskraft:", self.angriffskraft)
Jetzt wollte ich eine Funktion programmieren, die den Benutzer am Anfang fragt wie der Charakter heißen soll und ob er den Typ Schwertkämpfer oder Ork wählen möchte.
Code: Alles auswählen
def neuer_charakter():
charaktername=input()
charakter_typ=input("1 für Ork, 2 für Schwertkämpfer")
Aber wie schaffe ich es dann diese Funktionen ins Programm einzubinden. Ja klar
Aber wie schaffe ich es dass der Benutzer einen weiteren Charakter zu erstellen auf den ich dann wie im ersten sozum Beispiel zugreifen kann.