Hatte gestern einen Text geschrieben, der behandelte, dass ich die Schwierigkeit bei einen Spiel wie Zelda (was ich nie gespielt habe - ich beziehe mein Wissen von Roguelike-Spielen, die ebenfalls Mitte der 80er populär waren) nicht in der Darstellung sondern im Spielprinzip sehe. Hatte mir weiterhin Regel ausgedacht und beschrieben, leider hat mein TextMate das eben alles in die ewigen Speichergründe gerissen, weil ich DOOF nicht gespeichert hatte.
Habe nur noch den Python-Code, der da lautet:
Code: Alles auswählen
class Creature(object):
def __init__(self, combat, magick, health):
self._combat, self._magick, self._health = combat, magick, health
self._defense, self._soak = 2, 0
self.weapon, self.armor, self.focus = None, None, None
@property
def combat(self):
return self._combat + (self.weapon.combat if self.weapon else 0)
@property
def magick(self):
return self._magick + (self.focus.magick if self.focus else 0)
@property
def defense(self):
return self._defense + self._combat / 3
@property
def soak(self):
return self._soak + (self.armor.soak if self.armor else 0)
def attack(self, opponent):
damage = roll(self.combat - opponent.defense)
opponent.health -= max(damage - opponent.soak, 0)
return opponent.health > 0
def cast(self, spell):
spell.effect(roll(self.magick - spell.magick))
class Item(object):
def __init__(self, name, combat=0, magick=0, soak=0):
self.name, self.combat, self.magick, self.soak = name, combat, magick, soak
Erklärung: Jede Kreatur (Helden, Monster, usw.) hat drei primäre Eigenschaften: Wie gut kann sie kämpfen, wie gut zaubern und wie verletzlich ist sie. Gegenstände können diese Werte beeinflussen. Waffen erhöhen so den Kampfwert, Zauberfoci den Zauberwert und Rüstungen reduzieren den Schaden.
Ich benutze 7-seitige Würfel, einfach weil ich's kann:
Code: Alles auswählen
def roll(n):
successes = 0
if n < 1:
while True:
r = random.randrange(7)
if r < 6: break
successes += 1
else:
while n > 0:
r = random.randrange(7)
if r > 4:
successes += 1
if r < 6:
n -= 1
return successes
Erklärung: Ich werfe n Würfel. Eine 6 oder 7 ist ein Erfolg, bei 7 würfle ich den Würfel erneut. Soll ich weniger als einen Würfel werden, nehme ich einen "Schicksalswürfel", wo nur eine 7 (die aber öfters) ein Erfolg ist.
Und hier ist mein Beispiel:
Code: Alles auswählen
hero = Creature(7, 3, 11)
hero.weapon = Item("Breitschwert", combat=5)
hero.armor = Item("Lederrüstung", soak=1)
skeletons = [Creature(8, 6, 6) for i in range(3)]
while hero.health > 0 and skeletons:
skeleton = random.choice(skeletons)
if hero.attack(skeleton):
skeleton.attack(hero)
else:
skeletons.remove(skeleton)
Und ein Totenbeschwörer kann neue Skelette erschaffen:
Code: Alles auswählen
necromancer = Creature(3, 11, 8)
necromancer.weapon = Item("Knochenstab", combat=3, magick=8, soak=1)
necromancer.armor = necromancer.focus = necromancer.weapon
def raise_skeletons_effect(power):
for i in range(power):
skeletons.append(Creature(8, 6, 3 + power))
raise_skeletons_spell = Item("Skelett beleben", magick=6, effect=raise_skeletons_effect)
necromancer.cast(raise_skeletons_spell)
Dazu kommen jetzt noch einige Funktionen, um Gegenstände aufzuheben, wegzuwerfen, zu benutzen und jede Menge Kreativität für besondere Gegenstände, Monster und Zaubersprüche. Packt man Monster und Gegenstände auf ein Spielbrett, hat man eigentlich ein Roguelike-Spiel, wie zum Beispiel Zelda.
Stefan