Example #1
0
class Character:
    classes = [
        'Barbarian', 'Bard', 'Cleric', 'Druid', 'Fighter', 'Monk', 'Paladin',
        'Ranger', 'Rogue', 'Sorcerer', 'Warlock', 'Wizard'
    ]

    def __init__(self, name):
        self.name = name
        self.class_name = self.chooseClass()
        self.race = Race()
        self.rolls = []
        self.scores = {
            'Strength': 0,
            'Dexterity': 0,
            'Constitution': 0,
            'Intelligence': 0,
            'Wisdom': 0,
            'Charisma': 0,
        }

        self.rollStats()
        self.assignScores()

        self.modifiers = {
            'Strength': 0,
            'Dexterity': 0,
            'Constitution': 0,
            'Intelligence': 0,
            'Wisdom': 0,
            'Charisma': 0,
        }
        self.getMods()
        self.printStats()

    def chooseClass(self):

        classes = self.classes

        while True:
            classChoice = input('Please select a class: ')
            if classChoice.capitalize() in classes:
                return classChoice
            else:
                print('Please select a valid class.')

    def assignScores(self):

        scores = self.scores
        rolls = self.rolls

        for k, v in list(scores.items()):
            print(f"Assign a score for {k}: ")
            print(rolls)
            while True:

                choice = int(input())
                if choice in rolls:
                    rolls.remove(choice)
                    break
                else:
                    print('Please select a valid score.')
                    print(rolls)

            scores[k] = choice

    def rollStats(self):
        value = []
        for i in range(6):
            for i in range(4):
                roll = [randint(1, 6)]
                value.append(roll.pop())
            value.remove(min(value))
            self.rolls.append(sum(value))
            value.clear()
            self.rolls.sort()

    # Adds race modifiers to Ability Scores if applicable
    def getAbilityScore(self, ability):
        return self.scores[ability] + self.race.getRaceAdjustments(ability)

    ### prints Race, Class, ability scores, and modifiers
    def printStats(self):

        #for k, v in self.scores.items():
        #print(f'{k} is {v}')
        print(f'Your race is {self.race}')
        print(f"You're class is {self.class_name.capitalize()}")
        print(self.modifiers)
        for k, v in self.scores.items():
            print(f'{k} is {v + Race.getRaceAdjustments(k)}')

    ### determines modifiers
    def getMods(self):
        for k, v in self.scores.items():
            mod = -4
            score = 3
            while score < 20:
                if v <= score:
                    self.modifiers[k] = mod
                    score = 21
                else:
                    mod += 1
                    score += 2