Форум сайта python.su
всем шалом! заранее извиняюсь за говнокод, но это второй мой проект так сказать
вообщем мне нужно сделать битву бесконечной (пока у игрока не закончится здоровье). Если герой уничтожает обоих противников ему добавляется одно очко, и бой начинается снова. К концу игры пользователю должен выводиться счет
но проблема заключается в том, что при убийстве одного моба автоматически засчитывается победа игроку, не смотря на количество ХП второго моба
import random score = 0 hero_name = input('Введите имя своего героя: ') hero_dmg = random.randint(10, 30) hero_hp = 1000 start_hero_hp = hero_hp enemy_name = 'Скелет' enemy_dmg = random.randint(15, 30) enemy_hp = random.randint(50, 70) start_enemy_hp = enemy_hp sec_enemy_name = 'Огр' sec_enemy_dmg = random.randint(30, 35) sec_enemy_hp = random.randint(80, 100) start_sec_enemy_hp = sec_enemy_hp print(f'Admin: {hero_name}, добро пожаловать на арену!') print(f'Admin: Твой первый противник - {enemy_name}. {enemy_name} ХП: {enemy_hp}, {enemy_name} Урон: {enemy_dmg}') print(f'Admin: Второй противник - {sec_enemy_name}. {sec_enemy_name} ХП: {sec_enemy_hp}, {sec_enemy_name} Урон: {sec_enemy_dmg}') print('Admin: Да начнётся битва!') # 1 - Ударить противника, 2 - Полечиться while hero_hp > 0 and enemy_hp > 0 and sec_enemy_hp > 0: # Hero Turn user_choice = int(input(f'{hero_name}: Что делать?\n1 - Атаковать {enemy_name}\n2 - Атаковать {sec_enemy_name}\n3 - Атаковать обоих противников\n4 - Использовать исцеляющее зелье')) if user_choice == 1: hero_dmg_temp = random.randint(10, 30) enemy_hp -= hero_dmg_temp print(f'Мир: {hero_name} нанес {enemy_name} {hero_dmg_temp} урона. {enemy_name} HP: {enemy_hp} / {start_enemy_hp}') elif user_choice == 2: hero_dmg_temp = random.randint(10, 30) sec_enemy_hp -= hero_dmg_temp print(f'{hero_name} нанес {sec_enemy_name} {hero_dmg_temp} урона. {sec_enemy_name} HP: {sec_enemy_hp} / {start_sec_enemy_hp}') elif user_choice == 3: hero_dmg_temp = random.randint(10, 30) enemy_hp -= int(hero_dmg_temp) sec_enemy_hp -= int(hero_dmg_temp) print(f'Мир: {hero_name} нанес {enemy_name} и {sec_enemy_name} {hero_dmg_temp//2} урона. Первый противник ХП: {enemy_dmg} / {start_enemy_hp}, Второй противник ХП: {sec_enemy_hp} / {start_sec_enemy_hp}') elif user_choice == 4: hero_hp += random.randint(15, 25) print(f'Мир: {hero_name} восстановил 10 единиц здоровья! {hero_name} HP {hero_hp} / {start_hero_hp}') # Ход противника if enemy_hp > 0: hero_hp -= enemy_dmg print(f'Мир: {enemy_name} нанес {hero_name} {enemy_dmg} урона! {hero_name} HP: {hero_hp} / {start_hero_hp}') if sec_enemy_hp > 0: hero_hp -= sec_enemy_dmg print(f'Мир: {sec_enemy_name} нанес {hero_name} {sec_enemy_dmg} урона! {hero_name} HP: {hero_hp} / {start_hero_hp}') if hero_hp > 0 and enemy_hp <= 0 and sec_enemy_hp <= 0: print(f"Ты победил! Твой счёт {score}") print("Готовься, скоро прибудут новые противники!") score += 1 else: print('Ты проиграл.') # 2. Добавить второго противника # # (Важно добавить самому герою дополнительно 2 выбора, таким образом, чтобы пользователь мог: # # 1) Ударить первого противника # # 2) Ударить второго противника # # 3) Полечиться # 4) Ударить двоих сразу (урон в два раза меньше) # 3. Сделать битву бесконечной (пока у пользователя не закончится здоровье). Если герой уничтожает обоих противников # ему добавляется одно очко, и бой начинается снова. К концу игры пользователю должен выводиться счет
Офлайн
здесь проще с классами как мне кажется
class Member: # пример класса участника игры который можно всякоООПнуть def __init__(self, hp=None, dmg=None): self._hp = hp self._dmg = dmg self.life = True def _life(self): if self._hp <= 0: self.life = False def get_hp(self): return self._hp def set_hp(self, value): if self.life: self._hp = value self._life() def get_dmg(self): return self._dmg def set_dmg(self, value): self._dmg = value # просто демонстрация обращения с классом Member # по идее здесь должен быть класс ну или функция эээ Game с # экземплярами класса Member gamer1 = Member(hp=10, dmg=20) enemy1 = Member(hp=3, dmg=8) print(1, gamer1.get_hp(), gamer1.get_dmg(), gamer1.life, enemy1.life) gamer1.set_hp(6) gamer1.set_dmg(11) print(2, gamer1.get_hp(), gamer1.get_dmg(), gamer1.life, enemy1.life) gamer1.set_hp(gamer1.get_hp() - enemy1.get_dmg()) #упс print(3, gamer1.get_hp(), gamer1.life, enemy1.life) gamer1.set_hp(gamer1.get_hp() - 7) print(4, gamer1.get_hp(), gamer1.life)
# пример сравнения бесконечного. в цикле. как то так ... чёле # пока кто то кого то как то это го то го ... не то го gamer = True enemy1 = False enemy2 = False while True: if gamer > bool(enemy1 + enemy2): print("победа") break elif gamer == bool(enemy1 + enemy2): print("хз") else: print("потрачено") break print("end")
Отредактировано AD0DE412 (Май 15, 2021 08:22:41)
Офлайн