[Python] I have to build the Fallout special system [closed]

Discussão em 'Python' iniciado por Stack, Dezembro 7, 2024.

  1. Stack

    Stack Membro Participativo

    This is the character sheet of the special system that I have made for my final CS230 project

    import random
    from BagOfDice import DiceBag

    # Lists of strings containing the names of each SPECIAL, skill, and attribute
    specials_list = ["strength", "perception", "endurance", "charisma", "intelligence", "agility", "luck"]
    skills_list = ["barter", "energyweapons", "explosives", "guns", "lockpick", "medicine", "meleeweapons", "repair", "science", "sneak", "speech", "survival", "unarmed"]
    attributes_list = ["hitpoints", "actionpoints", "skillpoints", "carryweight", "damagethreshold", "radiationresistance", "movespeed", "compassrange", "criticalchance"]

    # Dictionary that contains each skill as keys and the SPECIAL that determines their initial value
    skill_special_relationship = {
    "barter": "charisma",
    "energyweapons": "perception",
    "explosives": "endurance",
    "guns": "agility",
    "lockpick": "perception",
    "medicine": "intelligence",
    "meleeweapons": "strength",
    "repair": "intelligence",
    "science": "intelligence",
    "sneak": "agility",
    "speech": "charisma",
    "survival": "endurance",
    "unarmed": "strength"
    }

    class CharacterSheet:
    def __init__(self, dice):
    self.dice = dice
    self.name = "Jean Doe"
    self.specials = {}
    self.skills = {}
    self.attributes = {}
    self.setSpecials()

    def setSpecials(self):
    for special in specials_list:
    self.specials[special] = 0
    remaining_points = 40
    for special in self.specials:
    roll = random.randint(1, 10)
    if remaining_points - roll >= 0:
    self.specials[special] = roll
    remaining_points -= roll
    else:
    self.specials[special] = remaining_points
    remaining_points = 0
    self.setSkills()
    self.setAttributes()

    def setSkills(self):
    for skill in skills_list:
    self.skills[skill] = 0
    for skill, special in skill_special_relationship.items():
    self.skills[skill] = 5 + (self.specials[special] * 2) + (self.specials["luck"] // 2)

    def setAttributes(self):
    for attribute in attributes_list:
    self.attributes[attribute] = 0
    self.attributes["hitpoints"] = 50
    for _ in range(self.specials["endurance"]):
    self.attributes["hitpoints"] += self.dice.roll(1, 50)
    for _ in range(self.specials["luck"]):
    self.attributes["hitpoints"] += self.dice.roll(1, 10)
    self.attributes["actionpoints"] = 35
    for _ in range(self.specials["agility"]):
    self.attributes["actionpoints"] += self.dice.roll(1, 10)
    self.attributes["skillpoints"] = 10 + self.specials["intelligence"]
    self.attributes["carryweight"] = 150
    for _ in range(self.specials["strength"]):
    self.attributes["carryweight"] += self.dice.roll(1, 20)
    self.attributes["damagethreshold"] = self.specials["endurance"] // 2
    self.attributes["radiationresistance"] = 0
    for _ in range(self.specials["endurance"]):
    self.attributes["radiationresistance"] += self.dice.roll(1, 4)
    self.attributes["movespeed"] = 75 + (self.specials["agility"] * 5)
    self.attributes["compassrange"] = 50 + (self.specials["perception"] * 10)
    self.attributes["criticalchance"] = self.specials["luck"]

    def setName(self, newName):
    self.name = newName

    def setAV(self, key, value):
    if key in self.specials:
    self.specials[key] = value
    self.setSkills()
    self.setAttributes()
    elif key in self.skills:
    self.skills[key] = value
    elif key in self.attributes:
    self.attributes[key] = value

    def forceAV(self, key, value):
    if key in self.specials:
    self.specials[key] = value
    elif key in self.skills:
    self.skills[key] = value
    elif key in self.attributes:
    self.attributes[key] = value

    def modAV(self, key, value):
    if key in self.specials:
    self.specials[key] += value
    self.setSkills()
    self.setAttributes()
    elif key in self.skills:
    self.skills[key] += value
    elif key in self.attributes:
    self.attributes[key] += value

    def getAV(self, key):
    if key in self.specials:
    return self.specials[key]
    elif key in self.skills:
    return self.skills[key]
    elif key in self.attributes:
    return self.attributes[key]
    else:
    return None

    def __str__(self):
    output = f"Name: {self.name}\n\n"
    output += "SPECIALs:\n"
    for special, value in self.specials.items():
    output += f"{special.capitalize()}: {value}\n"
    output += "\nSkills:\n"
    for skill, value in self.skills.items():
    output += f"{skill.capitalize()}: {value}\n"
    output += "\nAttributes:\n"
    for attribute, value in self.attributes.items():
    output += f"{attribute.capitalize()}: {value}\n"
    return output


    This is the dice bag it using

    import random

    class Die:
    def __init__(self, sides):
    self.sides = sides
    self.value = 1
    def roll(self):
    self.value = random.randrange(1,self.sides+1)
    return self.value

    class DiceBag:
    def __init__(self, dice):
    self.dice = dice
    def singleRoll(self, selectedDie):
    for die in self.dice:
    if die.sides == selectedDie:
    return die.roll()
    return -1
    def multiRoll(self, selectedDie, numberOfRolls):
    for die in self.dice:
    if die.sides == selectedDie:
    total = 0
    for i in range(0,numberOfRolls):
    total += die.roll()
    return total
    return -1


    This is the main file that will print the results

    from BagOfDice import Die, DiceBag
    from CharacterSheetEditor import CharacterSheet


    dice_bag = DiceBag()
    dice_bag.add_die(Die(4))
    dice_bag.add_die(Die(6))
    dice_bag.add_die(Die(10))
    dice_bag.add_die(Die(20))
    dice_bag.add_die(Die(50))


    character_sheet = CharacterSheet(dice_bag)

    #Call setName, setAV, forceAV, modAV, and getAV to show that they work
    character_sheet.setName("John Doe")
    character_sheet.setAV("strength", 8)
    character_sheet.forceAV("barter", 50)
    character_sheet.modAV("intelligence", 2)

    # Get and print attribute values
    print(character_sheet.getAV("strength")) # Expected: 8
    print(character_sheet.getAV("barter")) # Expected: 50
    print(character_sheet.getAV("intelligence")) # Expected: (Original value + 2)

    # Print the character sheet
    print(character_sheet)



    I keep getting a trace back error. What is going wrong with it?

    I've tried to get the outputs to come where it shows up like you've made a character and what they are good at in each stat but it just comes back with a trace back error.

    Traceback (most recent call last):
    File "c:\Users\****\Downloads\CharacterSheetEditor\main.py", line 21, in <module>
    dice_bag = DiceBag()
    ^^^^^^^^^
    TypeError: DiceBag.__init__() missing 1 required positional argument: 'dice'

    Continue reading...

Compartilhe esta Página