Когда я начал тестировать код, используя функцию, обрабатывающую случайные события при встречах он продолжал предлагать мои варианты каждый раз, когда я пытался выбрать вариант «Бой».
Я все еще новичок в Python, поэтому прошу прощения, если код не работает не выгляжу хорошо и организованно.
Вот код боевой системы:
Код: Выделить всё
import time
import os
import random
import sys
from termcolor import cprint
health = 75
player_turn_done = False
usr_inpt = 0
usr_inv = []
def msg(printing, color=None, highlight=None, wait_time=2):
cprint(printing, color, highlight)
time.sleep(float(wait_time))
def clr():
_ = os.system("cls")
def rnd(start, end, steps=1, type_of_choice="ints", listing=None):
if listing:
return random.choice(listing)
if type_of_choice == "ints":
return random.randrange(start, end, steps)
elif type_of_choice == "floats":
return random.uniform(start, end)
def get_input(prompt, choices):
while True:
try:
choice = int(input(prompt))
if choice in choices:
return choice
else:
print(f"""Please enter one of the following choices:
{', '.join(map(str, choices))}""")
except ValueError:
print("Invalid input, please enter a number.")
items = {
"knife": {"damage": rnd(6, 10), "defense": 8},
"flashlight": {"damage": rnd(3, 7)},
"glowing ring": {"damage": rnd(15, 22), "magic": 15},
"glowing crystal": {"damage": rnd(7, 12), "magic": 18},
"small creature": {"name": "name", "attack": rnd(8, 11)}
}
enemies = {
"type": {
"nature": {"Bear": {"health": 78, "damage": rnd(6, 11, 1)}, "Slime":
{"color":rnd(0, 3, 1, listing=["red", "green", "blue"]),"health": 25,
"damage": rnd(5, 10, 1)}},
"machine": {"WM-01": {"health": 45, "damage": rnd(8, 12, 1)},
"Matel Dummy": {"health": 66, "damage": rnd(2, 5, 1)}},
"misc": {"Shapeshifter": {"health": 75, "damage": rnd(1, 13, 1)}},
#"boss": {"The Great Shapeshifter": {"health": 125}}
}
}
class Fight_sys:
def random(usr_inpt, usr_inv, score, player_turn_done, health):
#Handles random enemy encounters
enemy_type = random.choice(enemy_types)
enemy_names = list(enemies["type"][enemy_type].keys())
enemy_name = random.choice(enemy_names)
enemy_health = enemies["type"][enemy_type][enemy_name]["health"]
msg(f"An enemy approaches: {enemy_name}({enemy_type})", "red")
while enemy_health > 0 and health > 0:
print("1. Fight\n2. Use\n3. Heal 25 Hp (3 time usage limit)")
usr_inpt = get_input("> ", [1, 2, 3])
if usr_inpt == 1:
for item in items:
if item in usr_inv:
damage = max(items.items(), key=lambda x: x[1]['damage'])
msg(f"You dealt {damage} damage to {enemy_name}")
enemy_health -= damage
player_turn_done = True
elif usr_inpt == 2:
pass
elif usr_inpt == 3:
pass
elif player_turn_done:
msg(f"""{enemy_name} dealt {enemy_name[damage]} damage""")
health -= enemy_name[damage] - max(items.items(),
key=lambda x: x[1]["defense"])
player_turn_done = False
if enemy_health 0:
print("1. Fight\n2. Use\n3. Heal 25 Hp (3 time usage limit)")
usr_inpt = get_input("> ", [1, 2, 3])
if usr_inpt == 1:
for item in items:
if item in usr_inv:
damage = max(items.items(), key=lambda x: x[1]['damage'])
msg(f"You dealt {damage} damage to {enemy_name}")
enemy_health -= damage
player_turn_done = True
elif usr_inpt == 2:
pass
elif usr_inpt == 3:
pass
elif player_turn_done:
msg(f"""{enemy_name} dealt {enemy_damage}
damage using {enemy_attack}""")
health -= enemy_damage - max(items.items(),
key=lambda x: x[1]["defense"])
player_turn_done = False
if enemy_health
Подробнее здесь: [url]https://stackoverflow.com/questions/78747443/problem-with-a-python-turn-based-fighing-system[/url]