Информатика в школе и дома: ОГЭ, ЕГЭ и ДэРэ
1,2K подписчиков

Урок 8 модуля 3. ООП, классы. Программируем в Python текстовый квест, говоря о классах, методах и функциях. Сложный, но интересный урок

Урок 8 модуля 3. ООП, классы. Программируем в Python текстовый квест, говоря о классах, методах и функциях. Сложный, но интересный урок

Задание 1. «Квест: Рыцарь и Дракон»
1. Текст программы:
 
class Hero():
  #конструктор класса
  def __init__(self, name, health, armor, power, weapon):
      self.name = name
      self.health = health #число
      self.armor = armor #строка
      self.power = power #число
      self.weapon = weapon #строка
  #печать инфо о персонаже:
  def print_info(self):
      print('Поприветствуйте героя ->', self.name)
      print('Уровень здоровья:', self.health)
      print('Класс брони:', self.armor)
      print('Сила удара:', self.power)
      print('Оружие:', self.weapon, '\n')
  #нанесение удара:
  def strike(self, enemy):
      print(
          '-> УДАР! ' + self.name + ' атакует ' + enemy.name
          + ' с силой ' + str(self.power) + ', используя ' + self.weapon + '\n')
      enemy.armor -= self.power
      if enemy.armor < 0:
          enemy.health += enemy.armor
          enemy.armor = 0
      print(
          enemy.name + ' покачнулся(-ась).\nКласс брони упал до ' +
          str(enemy.armor) + ', а уровень здоровья до ' + str(enemy.health) + '\n')
 
knight = Hero('Ричард', 50, 25, 20, 'меч')
rascal = Hero('Хелен', 20, 5, 5, 'лук')
knight.print_info()
rascal.print_info()
knight.strike(rascal)
 

Задание 2. «Квест: Рыцарь и Дракон»
1. Модуль Hero:
 
from random import randint
from time import sleep
 
class Hero():
  #конструктор класса
  def __init__(self, name, health, armor, power, weapon):
      self.name = name
      self.health = health #число
      self.armor = armor #число
      self.power = power #число
      self.weapon = weapon #строка
  #печать инфо о персонаже:
  def print_info(self):
      print('->' + self.name)
      print('Уровень здоровья:', self.health)
      print('Класс брони:', self.armor)
      print('Сила удара:', self.power)
      print('Оружие:', self.weapon, '\n')
  #нанести удар по другому персонажу
  def strike(self, enemy):
      attack = randint(self.power-5, self.power+5)
      print('-> УДАР! ' + self.name + ' атакует ' + enemy.name + ' с силой ' + str(attack) + ', используя ' + self.weapon + '\n')
 
      enemy.armor -= attack
      if enemy.armor < 0:
          enemy.health += enemy.armor
          enemy.armor = 0
     
      print(enemy.name + ' покачнулся.\nКласс его брони упал до ' + str(enemy.armor) + ', а уровень здоровья до ' + str(enemy.health) + '\n')
 
  #вступить в поединок
  def fight(self, enemy):
      while self.health and enemy.health > 0:
          self.strike(enemy)
          if enemy.health <= 0:
              print(enemy.name, 'пал в этом нелегком бою!\n')
              break
          sleep(5)
 
          enemy.strike(self)
          if self.health <= 0:
              print(self.name, 'пал в этом нелегком бою!\n')
             break
          sleep(5)
 
 
2. Текст программы:
from time import sleep
from hero import Hero
 
knight = Hero('Ричард', 50, 25, 20, 'меч')
dragon = Hero('Дракон', 100, 25, 10, 'пламя')
 
print('Средиземье в опасности! На помощь спешит доблестный рыцарь...')
knight.print_info()
 
sleep(5)
print(knight.name + ' идёт по лесу. Вдруг видит на пути мелкого воришку...')
 
sleep(5)
rascal = Hero('Питер', 20, 5, 5, 'нож')
rascal.print_info()
 
sleep(5)
if input('Сразиться? (да/нет) >>') == 'да':
  print('\nДА НАЧНЁТСЯ БИТВА!\n')
  sleep(5)
  knight.fight(rascal)
  sleep(5)
 
  if knight.health > 0:
      knight.health = 50
      knight.power *= 2
      knight.armor *= 2
      print('\n' + knight.name + ' восстановил силы и стал опытнее. Теперь сила его удара: ' + str(knight.power) + ', а класс брони:' + str(knight.armor) + '\n')
 
sleep(5)
print('\nНаконец-то ' + knight.name + ' добирается до подземелья!')
dragon.print_info()
 
print('\nДА НАЧНЁТСЯ БИТВА!\n')
sleep(5)
knight.fight(dragon)
Код Будущего. Разжевывание и помощь
Подборка · 
Информатика в школе и дома: ОГЭ, ЕГЭ и ДэРэ
 · 23 из 40
Далее: Урок 9 курса "Алгоритмика". Продолжаем говорить о классах и ООП в целом, переходим к концепции Наследования. Говорим об измерении информации
Код Будущего. Разжевывание и помощь · 23 из 40