Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Задача - 1
- # Ранее мы с вами уже писали игру, используя словари в качестве
- # структур данных для нашего игрока и врага, давайте сделаем новую, но уже с ООП
- class Person:
- # Опишите базовый класс Person, подумайте какие общие данные есть и у врага и у игрок
- def __init__(self, health, damage, armor, name):
- # У каждой сущности должы быть аттрибуты health, damage, armor
- self.health = health
- self.damage = damage
- self.armor = armor
- self.name = name
- # У каждой сущности должно быть 2 метода, один для подсчета урона, с учетом брони противника,
- # второй для атаки противника.
- def get_calculate_damage(self, armor):
- return self.damage // armor
- def attack(self, who_defend):
- atack = self.get_calculate_damage(who_defend.armor)
- who_defend.health -= atack
- print(f'{self.name} нанес {who_defend.name} урона {atack}, у того осталось {who_defend.health} жизней.')
- # Теперь наследуясь от Person создайте 2 класса Player, Enemy.
- class Player(Person):
- def __init__(self, health=100, damage=15, armor=10, name='Player'):
- super().__init__(health, damage, armor, name)
- class Enemy(Person):
- def __init__(self, health=80, damage=20, armor=4, name='Enemy'):
- super().__init__(health, damage, armor, name)
- # Вам надо описать игровой цикл так же через класс.
- # Создайте экземпляры классов, проведите бой. Кто будет атаковать первым оставляю на ваше усмотрение.
- class Game():
- def start_game(self):
- # получаем наши структуры, через вышеописанную функцию
- player = Player()
- enemy = Enemy()
- # Запоминаем кто последний атаковал
- last_attacker = player
- while player.health > 0 and enemy.health > 0:
- if last_attacker == player:
- enemy.attack(player) # враг был в скобках
- last_attacker = enemy
- else:
- player.attack(enemy) # игрок был в скобках
- last_attacker = player
- if player.health > 0:
- print('Игрок победил!')
- else:
- print('Враг победил!')
- x = Game()
- x.start_game()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement