Python - калькулятор игровой статистики
Это код калькулятора, который я сделал для игры. По сути, калькулятор рассчитывает стоимость покупки следующего показателя.
Поэтому я написал код только для Человеческой расы и характеристики силы. На мой взгляд, мне придется использовать один и тот же код для каждой гонки 3 раза для каждой характеристики.
Я надеялся, что это будет более короткий способ, например
а не human.strengthхотелось бы, чтобы это было race.strengthгде race = user_race.
Спасибо
class race:
"""The different races in the calculator"""
def __init__(self, race, strength, agility, health, strength_cost, agility_cost, health_cost):
self.race = race
self.strength = strength
self.agility = agility
self.health = health
self.strength_cost = strength_cost
self.agility_cost = agility_cost
self.health_cost = health_cost
human = race('Human', 15, 17, 18, 5, 3, 4)
elf = race('Elf', 11, 21, 14, 4, 3, 5)
giant = race('Giant', 25, 11, 27, 4, 8, 3)
print("Human, Giant, Elf")
user_race = str(input("Enter your race:")).lower()
print("Strength, Agility, Health")
user_stat = str(input("Enter your desired stat:")).lower()
user_present_stat_value = int(input("Enter your present stat value:"))
user_desired_stat_value = int(input("Enter your desired stat value:"))
if user_race == 'human' and user_stat == 'strength':
human_strength_present_statdif = (user_present_stat_value - human.strength) # difference of present stat with respect of base stat
human_strength_desired_statdif = (user_desired_stat_value - human.strength) #difference of desired stat with respect of base stat
human_strength_present_stat_cost = (human.strength_cost + (human_strength_present_statdif - 1) * human.strength_cost) #The cost of present stat stat
human_strength_total_present_cost = ((human_strength_present_statdif / 2) * (human.strength_cost + human_strength_present_stat_cost)) # The total cost from base stat to present stat
human_strength_desired_stat_cost = (human.strength_cost + (human_strength_desired_statdif - 1) * human.strength_cost) #The cost of desired stat
human_strength_total_desired_cost = ((human_strength_desired_statdif / 2) * (human.strength_cost + human_strength_desired_stat_cost)) # The total cost base stat to desired stat
human_strength_net_cost = (human_strength_total_desired_cost - human_strength_total_present_cost) # The Net cost from the difference of Total desired stat and Total present stat
print("Net cost: " + str(human_strength_net_cost))
```
Ответы
Если вы просто пытаетесь сделать интерактивный калькулятор, классы и т. Д. Не нужны.
Во-первых, составьте простую таблицу, которая позволит вам просматривать статистику в зависимости от расы. Сделайте так, чтобы человеку (например, вам) было легко его редактировать, вносить изменения, добавлять новые расы или статистику и т. Д.
keys = "base_strength base_agility base_health strength_cost agility_cost health_cost".split()
traits = [
# base base base strength agility health
#race strength agility health cost cost cost
"human 15 17 18 5 3 4",
"elf 11 21 14 4 3 5",
"giant 25 11 27 4 8 3",
]
Это просто список строк. Теперь преобразуйте его в формат, который упрощает использование в программе. Мы превратим его в Словарь из dicts таким образом мы можем посмотреть значение , используя что - то вроде: stat["elf"]["base_agility"]. Вот код:
stats = {}
for row in traits:
row = row.strip().split()
stats[row[0]] = dict(zip(keys, map(int, row[1:])))
Теперь ваш код, который вычисляет стоимость изменения силы для человека, можно превратить в общую функцию, которая работает для любой расы или статистики:
def calc_change_cost(race, stat_name, present_value, desired_value):
base_value = stats[race][f"base_{stat_name}"]
stat_cost = stats[race][f"{stat_name}_cost"]
present_statdif = present_value - base_value
present_stat_cost = stat_cost + (present_statdif - 1) * stat_cost
total_present_cost = (present_statdif / 2) * (stat_cost + present_stat_cost)
desired_statdif = desired_value - base_value
desired_stat_cost = stat_cost + (desired_statdif - 1) * stat_cost
total_desired_cost = (desired_statdif / 2) * (stat_cost + desired_stat_cost)
net_cost = total_desired_cost - total_present_cost
return net_cost
Вы заметите повторяющийся код для вычисления total_present_costи total_desired_cost. Эти строки можно преобразовать в другую функцию (упражнение для читателя).
Теперь основная программа просто собирает вводимые пользователем данные, вызывает указанную выше функцию и печатает результаты:
user_race = str(input("Enter your race (Human, Giant, Elf):")).lower()
user_stat = str(input("Enter your desired stat (Strength, Agility, Health):")).lower()
present_value = int(input("Enter your present stat value:"))
desired_value = int(input("Enter your desired stat value:"))
net_cost = calc_change_cost(user_race, user_stat, present_value, desired_value)
print(f"Net cost to change {user_race} {user_stat} from {present_value} to {desired_value}: {net_cost}")