Seite 1 von 1
Mehrere Quest
Verfasst: Montag 28. Januar 2013, 16:13
von Pythoraner123
Hallo nochmals,
in meinem Rollenspiel
http://www.python-forum.de/viewtopic.php?f=9&t=30862
möchte ich dass wenn die erste quest abgeschlossen ist, dass man sie nicht wiederholt, sondern dei zweite beginnt.
Ich kam jetzt nur auf diese Lösung:
Code: Alles auswählen
quest1_id=True
if quest1_id:
quest1.quest_durchführen()
quest1_id=False
Und immer so weiter mit der zweiten:
Code: Alles auswählen
quest2_id=True
if quest2_id:
quest2.quest_durchführen()
quest2_id=False
usw.
Kann man das kürzer und eleganter machen???
gruß pythoraner
Re: Mehrere Quest
Verfasst: Montag 28. Januar 2013, 16:25
von /me
Pythoraner123 hat geschrieben:Kann man das kürzer und eleganter machen?
Wenn du anfängst Dinge durchzunummerieren willst du fast immer eine Liste haben.
Code: Alles auswählen
quests = ['Start', 'nächste Aufgabe']
print quests[0]
print quests[1]
for quest in quests:
print quest
Jetzt kannst du in der Liste natürlich auch komplexere Datenstrukturen unterbringen.
Code: Alles auswählen
class Quest(object):
def __init__(self, name):
self.name = name
self.solved = False
quests = [Quest('Start'), Quest('nächste Aufgabe')]
quests[0].solved = True
for quest in quests:
if not quest.solved:
print quest.name
Re: Mehrere Quest
Verfasst: Dienstag 29. Januar 2013, 10:32
von Pythoraner123
Ich habe es jetzt so gelöst
Code: Alles auswählen
x=random.choice(quest_liste)
x.quest_durchführen()
quest_liste.remove(x)
Re: Mehrere Quest
Verfasst: Dienstag 29. Januar 2013, 10:36
von EyDu
Löschen aus Listen, wenn es sich nicht gerade um das letzte Element handelt, ist keine sehr schöne Lösung. Am einfachsten ist es, wenn du die shuffle-Funktion aus dem random-Modul verwendest und damit alle Quests mischt. Anschließend kannst du die Liste ganz normal mittels for-Schleife durchlaufen. Damit sparst du dir das unnötige Löschen oder das Markieren der bereits erledigten Quests.
Re: Mehrere Quest
Verfasst: Dienstag 29. Januar 2013, 10:44
von Pythoraner123
Wenn ich das Programm dann aber neu starte fangen die Quest wieder von vorne an, aber ich möchte ja dass man jede Quest nur einmal spielt.
Deswegen kann man dann die Liste abspeichern und sie beim nächsten Programmstart wieder verwenden ohne dass man eine Quest wiederholt.
Gruß Pythoraner
Re: Mehrere Quest
Verfasst: Dienstag 29. Januar 2013, 10:58
von BlackJack
@Pythoraner123: Bleibt trotzdem unschön ein beliebiges Element aus einer Liste zu entfernen. Ein `shuffle()` beim ersten mal und dann entfernen des letzten Elements mit `pop()` ist effizienter. Letztlich würde ich es aber umgekehrt lösen: Beim Spieler nicht vermerken welche Quests noch offen sind, sondern welche schon bestanden wurden. Dann kann sich die Anzahl der Quests auch ändern zwischen den Spielen. Der Spieler spielt nix doppelt, bekommt aber die Chance auch neu hinzu gekommene Quests zu spielen. Umgekehrt hat er keine ungespielten Quests in seiner Liste stehen die mittlerweilse vielleicht gar nicht mehr existieren.