Some more advanced characteristics, different player classes, and a CLI interface.

This commit is contained in:
Mark Wolfman
2018-03-25 23:59:48 -05:00
parent 7862d14c9d
commit d680cdc296
9 changed files with 183 additions and 56 deletions
+90 -12
View File
@@ -16,15 +16,15 @@ class Character():
name = ""
class_name = ""
player_name = ""
background = ""
level = 1
alignment = 'true neutral'
alignment = "Neutral"
race = "Human"
xp = 0
armor_class = 10
speed = 30 # In feet
# Hit points
hp_max = 10
hit_dice_num = 1
hit_dice_faces = 8
hit_dice_faces = 2
# Base stats (ability scores
strength = Stat()
dexterity = Stat()
@@ -32,7 +32,13 @@ class Character():
intelligence = Stat()
wisdom = Stat()
charisma = Stat()
# Inventory
cp = 0
sp = 0
ep = 0
gp = 0
pp = 0
def __init__(self, **attrs):
"""Takes a bunch of attrs and passes them to ``set_attrs``"""
self.set_attrs(**attrs)
@@ -42,16 +48,88 @@ class Character():
dictionary."""
for attr, val in attrs.items():
setattr(self, attr, val)
@property
def hit_dice(self):
"""What type and how many dice to use for re-gaining hit points.
To change, set hit_dice_num and hit_dice_faces."""
return f"{self.hit_dice_num}d{self.hit_dice_faces}"
return f"{self.level}d{self.hit_dice_faces}"
@hit_dice.setter
def hit_dice(self, val):
dice = read_dice_str(val)
self.hit_dice_faces = dice.faces
self.hit_dice_num = dice.num
@property
def proficiency_bonus(self):
if self.level < 5:
prof = 2
elif 5 <= self.level < 9:
prof = 3
elif 9 <= self.level < 13:
prof = 4
elif 13 <= self.level < 17:
prof = 5
elif 17 <= self.level:
prof = 6
return prof
@property
def armor_class(self):
"""Armor class, without items."""
return 10 + self.dexterity.modifier
class Barbarian(Character):
class_name = 'Barbarian'
hit_dice_faces = 12
class Bard(Character):
class_name = 'Bard'
hit_dice_faces = 8
class Cleric(Character):
class_name = 'Cleric'
hit_dice_faces = 8
class Druid(Character):
class_name = 'Druid'
hit_dice_faces = 8
class Fighter(Character):
class_name = 'Fighter'
hit_dice_faces = 10
class Monk(Character):
class_name = 'Monk'
hit_dice_faces = 8
class Paladin(Character):
class_name = 'Paladin'
hit_dice_faces = 10
class Ranger(Character):
class_name = 'Ranger'
hit_dice_faces = 10
class Rogue(Character):
class_name = 'Rogue'
hit_dice_faces = 8
class Sorceror(Character):
class_name = 'Sorceror'
hit_dice_faces = 6
class Warlock(Character):
class_name = 'Warlock'
hit_dice_faces = 8
class Wizard(Character):
class_name = 'Wizard'
hit_dice_faces = 6