Python - Kalkulator stat game
Jadi ini adalah kode kalkulator yang saya buat untuk permainan. Pada dasarnya apa yang dilakukan kalkulator adalah menghitung biaya pembelian statistik berikutnya.
Jadi saya menulis kode hanya untuk ras Manusia dan stat kekuatan. Dari cara saya melihatnya, saya harus melakukan kode yang sama untuk setiap balapan 3 kali untuk setiap stat.
Saya berharap akan ada jalan yang lebih pendek seperti ini
alih-alih human.strengthsaya ingin berada di race.strengthmana race = user_race.
Terima kasih
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))
```
Jawaban
Jika Anda hanya mencoba membuat kalkulator interaktif, kelas, dll. Tidak diperlukan.
Pertama, buat tabel sederhana yang memungkinkan Anda mencari statistik berdasarkan ras. Mudahkan manusia (seperti Anda) untuk mengeditnya, membuat perubahan, menambahkan ras atau statistik baru, dll.
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",
]
Itu hanya daftar string. Sekarang ubah menjadi format yang membuatnya mudah digunakan dalam program. Kami akan mengubahnya menjadi dict dari dicts sehingga kita dapat melihat nilai-nilai menggunakan sesuatu seperti: stat["elf"]["base_agility"]. Berikut kodenya:
stats = {}
for row in traits:
row = row.strip().split()
stats[row[0]] = dict(zip(keys, map(int, row[1:])))
Sekarang kode Anda yang menghitung biaya perubahan kekuatan untuk manusia, dapat diubah menjadi fungsi umum yang berfungsi untuk ras atau status apa pun:
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
Anda akan melihat kode berulang untuk menghitung total_present_costdan total_desired_cost. Garis-garis itu bisa direfraktorisasi menjadi fungsi lain (latihan untuk pembaca).
Sekarang, program utama hanya mengumpulkan masukan pengguna, memanggil fungsi di atas, dan mencetak hasilnya:
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}")