Python - Oyun istatistiği hesaplayıcı
Bu, bir oyun için yaptığım bir hesap makinesinin kodu. Esasen hesap makinesinin yaptığı şey, bir sonraki istatistiği satın almanın maliyetini hesaplamaktır.
Bu yüzden kodu sadece İnsan ırkı ve güç statüsü için yazdım. Gördüğüm kadarıyla, her bir stat için her yarış için 3 kez aynı kodu yapmak zorunda kalacağım.
Bunun gibi daha kısa bir yol olacağını umuyordum
onun yerine nerede human.strengtholmasını isterim .race.strengthrace = user_race
Teşekkürler
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))
```
Yanıtlar
Sadece etkileşimli bir hesap makinesi yapmaya çalışıyorsanız, sınıflar vb. Gerekli değildir.
Öncelikle, istatistiklere ırka göre bakmanıza izin veren basit bir tablo yapın. Bir insanın (sizin gibi) düzenlemesini, değişiklik yapmasını, yeni ırklar veya istatistikler eklemesini vb. Kolaylaştırın.
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",
]
Bu sadece dizelerin bir listesi. Şimdi onu bir programda kullanımı kolaylaştıran bir biçime dönüştürün. Biz böyle bir şey kullanarak değerleri aramak böylece Biz dicts bir dict çevirmek gerekir: stat["elf"]["base_agility"]. İşte kod:
stats = {}
for row in traits:
row = row.strip().split()
stats[row[0]] = dict(zip(keys, map(int, row[1:])))
Artık bir insan için güç değişiminin maliyetini hesaplayan kodunuz, herhangi bir ırk veya stat için çalışan genel bir işleve dönüştürülebilir:
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_costVe hesaplamak için tekrarlanan kodu fark edeceksiniz total_desired_cost. Bu satırlar başka bir işleve (okuyucu için bir alıştırma) dönüştürülebilir.
Şimdi, ana program yalnızca kullanıcının girdilerini toplar, yukarıdaki işlevi çağırır ve sonuçları yazdırır:
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}")