Найти - Пользователи
Полная версия: простенькая мини-игра
Начало » Python для новичков » простенькая мини-игра
1
kerdan
всем шалом! заранее извиняюсь за говнокод, но это второй мой проект так сказать
вообщем мне нужно сделать битву бесконечной (пока у игрока не закончится здоровье). Если герой уничтожает обоих противников ему добавляется одно очко, и бой начинается снова. К концу игры пользователю должен выводиться счет
но проблема заключается в том, что при убийстве одного моба автоматически засчитывается победа игроку, не смотря на количество ХП второго моба
 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. Сделать битву бесконечной (пока у пользователя не закончится здоровье). Если герой уничтожает обоих противников
# ему добавляется одно очко, и бой начинается снова. К концу игры пользователю должен выводиться счет
AD0DE412
здесь проще с классами как мне кажется

 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")
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB