Python - Spielstatistikrechner

Nov 15 2020

Das ist also der Code für einen Taschenrechner, den ich für ein Spiel erstellt habe. Im Wesentlichen berechnet der Rechner die Kosten für den Kauf der nächsten Statistik.

Also habe ich den Code nur für die Menschheit und die Stärke geschrieben. So wie ich es sehe, muss ich für jedes Rennen dreimal den gleichen Code für jede Statistik machen.

Ich hatte gehofft, dass es einen kürzeren Weg geben würde

stattdessen human.strengthmöchte ich, dass es race.strengthwo ist race = user_race.

Vielen Dank

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))
```

Antworten

1 RootTwo Nov 16 2020 at 14:56

Wenn Sie nur versuchen, einen interaktiven Taschenrechner zu erstellen, werden die Klassen usw. nicht benötigt.

Erstellen Sie zunächst eine einfache Tabelle, in der Sie die Statistiken basierend auf der Rasse nachschlagen können. Halten Sie es einem Menschen (wie Ihnen) leicht, es zu bearbeiten, Änderungen vorzunehmen, neue Rassen oder Statistiken hinzuzufügen usw.

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",
]

Es ist nur eine Liste von Zeichenfolgen. Verwandeln Sie es jetzt in ein Format, das die Verwendung in einem Programm vereinfacht. Wir werden daraus ein Diktat von Diktaten machen, damit wir Werte nachschlagen können, indem wir Folgendes verwenden : stat["elf"]["base_agility"]. Hier ist der Code:

stats = {}

for row in traits:
    row = row.strip().split()
    stats[row[0]] = dict(zip(keys, map(int, row[1:])))

Jetzt kann Ihr Code, der die Kosten für die Änderung der Stärke eines Menschen berechnet, in eine generische Funktion umgewandelt werden, die für jede Rasse oder jeden Status funktioniert:

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

Sie werden den wiederholten Code für die Berechnung von total_present_costund bemerken total_desired_cost. Diese Zeilen könnten in eine andere Funktion umgestaltet werden (eine Übung für den Leser).

Jetzt sammelt das Hauptprogramm nur die Eingaben des Benutzers, ruft die obige Funktion auf und druckt die Ergebnisse aus:

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}")