简体   繁体   中英

how can I subtract the amount Randint generates in the while loop from enemies HP without getting 2 different numbers?

If you run the code you should see that the print says "14" for example, but It retracts something else from enemies HP.

Calculating attack damage for each "spell":

from random import randint
import time


class Player(object):
    def __init__(self, health):
        self.health = health

    @staticmethod
    def use_heal():
        return randint(9, 21)

    @staticmethod
    def attack_slice():
        return randint(5, 29)

    @staticmethod
    def attack_bash():
        return randint(11, 18)

class Enemy(object):
    def __init__(self, health):
        self.health = health

    @staticmethod
    def enemy_attack():
        return randint(9, 19)

For setting HP:

player = Player(100)
enemy = Enemy(100)

The loop that is the "game":

while True:
    print(f"Your hp: {player.health}\nEnemy hp: {enemy.health}\n")
    print("(1) Bash _ (2) Slice _ (3) Heal")
    attack_choice = int(input(">>"))
    
    if attack_choice == 1:
        print(f"You hit for {Player.attack_bash()}")
        enemy.health -= Player.attack_bash()
    
    elif attack_choice == 2:
        print(f"You hit for {Player.attack_slice()}")
        enemy.health -= Player.attack_slice()
    
    elif attack_choice == 3:
        print(f"You heal for {Player.use_heal()}")
        player.health += Player.use_heal()

when it calls Player.attack_* it returns a random value to print, and then calls it a second time to actualy damage the enemy so it is likely a defarent value. what it should do is call it once, store it in a variable and use the variable

while True:
    print(f"Your hp: {player.health}\nEnemy hp: {enemy.health}\n")
    print("(1) Bash _ (2) Slice _ (3) Heal")
    attack_choice = int(input(">>"))
    
    if attack_choice == 1:
        damage = Player.attack_bash()
        print(f"You hit for {damage}")
        enemy.health -= damage
    
    elif attack_choice == 2:
        damage = Player.attack_slice()
        print(f"You hit for {damage}")
        enemy.health -= damage
    
    elif attack_choice == 3:
        damage = Player.use_heal()
        print(f"You heal for {damage}")
        player.health += damage

The problem is you are generating two random numbers for each case: The one that gets print and the one that gets subtracted/added.

...
print(f"You hit for {Player.attack_bash()}") # Generates a random number
enemy.health -= Player.attack_bash() # Generates another random number
...

You need to use a temporary variable so you can use the same value twice:

...
damage = Player.attack_bash()
print(f"You hit for {damage}")
enemy.health -= damage
...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM