Умскул учебник стремится стать лучше! Если вы наткнулись на ошибку или неточность в нашем материале - просто сообщите нам, мы будем благодарны!
Информатика

Основы программирования на языке Python. Практика

1.4.2022
3672

Вы любите компьютерные игры? А задумывались ли когда-нибудь о создании собственной? В этой статье мы сможем попробовать себя в роли разработчика игр, используя ранее полученные знания.

Создание собственной RPG

В предыдущих выпусках мы с вами изучили темы:

  • переменные и типы данных;
  • математические операции;
  • условные конструкции;
  • циклы.

Подробнее об этом при необходимости можно прочитать в статьях  «Основы программирования. Часть 1» и «Основы программирования. Часть 2».

Этих знаний нам достаточно, чтобы написать код, который сможет создать нашего персонажа, его противника гоблина и просчитать исход битвы между ними.
Надеемся, вы любите этот жанр.

Начнем с создания нашего персонажа. Пусть это будет прекрасный рыцарь со здоровенной лошадью, мощным запасом здоровья и несколькими зельями здоровья на всякий случай.

Нам нужно создать следующие параметры:

  • Имя рыцаря. Мы сами его придумаем и введем с клавиатуры — понадобится команда input().
  • Количество здоровья рыцаря.
  • Урон от его меча.
  • Количество зелий здоровья.
    Для показателей здоровья, урона и количества зелий будем использовать целые числа.

hero_name = input("Введите имя рыцаря: ")
hero_health = 100
sword_damage = 13
potions = 2
print("Герой по имени", hero_name, "отправляется в приключение")

Чтоб рыцарю жизнь медом не казалась, создадим ему на пути препятствие в виде противника — гоблина. Он также обладает каким-то запасом здоровья и собственным уроном.


goblin_health = 55
goblin_damage = 9
print("По пути герою встретился гоблин. У него", goblin_health, "здоровья, и он наносит урон", goblin_damage)

Создадим саму битву между ними. И это хороший способ применить бесконечный цикл — такое условие, когда цикл while никогда не сможет закончить свою работу. Запустим его повторяться по кругу, а завершим изнутри, когда один из участников битвы погибнет.

Нам понадобятся:

  • Бесконечный цикл.
  • Команда удара по гоблину — уменьшение его здоровья на значение нашего урона.
  • Проверка здоровья гоблина — если оно опустилось ниже 0, завершаем цикл.
  • Команда удара гоблина по рыцарю.
  • Проверка здоровья рыцаря.

Мы будем атаковать первыми, потому что наш рыцарь сильнее, умнее и красивее гоблина.


print("Герой вступает в схватку с гоблином")
while True:
    goblin_health -= sword_damage
    if goblin_health <= 0:
        print("Гоблин пал")
        break
    hero_health -= goblin_damage
    if hero_health <= 0:
        print("Рыцарь пал")
        break

После битвы стоит проверить состояние здоровья рыцаря. Это будет хорошим примером вложенного условия — условия, находящегося внутри цикла и срабатывающего при каждом запуске тела цикла. Здесь может быть несколько вариантов.

  • Рыцарь пережил сражение:
    • если у рыцаря осталось мало здоровья (например, меньше половины), мы выпьем зелье, которое восстановит 50 очков здоровья;
    • если же здоровья достаточно, зелье пить не будем.
  • Рыцарь не пережил сражение, следовательно, пить зелье поздно.

if hero_health > 0:
    print("Герой пережил сражение, у него осталось здоровья", hero_health)
    if hero_health < 50:
        print("Герой использует зелье исцеления, дабы залечить свои раны")
        hero_health += 50
        print("Теперь здоровья стало: ", hero_health)
        potions -= 1
        print("Зелий исцеления осталось:", potions)
    else:
        print("Уровень здоровья достаточный, исцеляться не нужно")
else:
    print("Трагическая судьба настигла героя, слишком поздно пить зелье")

Полный код игры

Итак, полный код нашей программы:


hero_name = input("Введите имя рыцаря: ")
hero_health = 100
sword_damage = 13
potions = 2
print("Герой по имени", hero_name, "отправляется в приключение")

goblin_health = 55
goblin_damage = 9
print("По пути герою встретился гоблин. У него", goblin_health, "здоровья, и он наносит урон", goblin_damage)

print("Герой вступает в схватку с гоблином")
while True:
    goblin_health -= sword_damage
    if goblin_health <= 0:
        print("Гоблин пал")
        break
    hero_health -= goblin_damage
    if hero_health <= 0:
        print('Рыцарь пал')
        break

if hero_health > 0:
    print("Герой пережил сражение, у него осталось здоровья", hero_health)
    if hero_health < 50:
        print("Герой использует зелье исцеления, дабы залечить свои раны")
        hero_health += 50
        print('Теперь здоровья стало: ', hero_health)
        potions -= 1
        print("Зелий исцеления осталось:", potions)
    else:
        print("Уровень здоровья достаточный, исцеляться не нужно")
else:
    print('Трагическая судьба настигла героя, слишком поздно пить зелье')

Вывод программы будет следующим:


Введите имя рыцаря: Джордж Питонист
Герой по имени Джордж Питонист отправляется в приключение
По пути герою встретился гоблин. У него 55 здоровья, и он наносит урон 9
Герой вступает в схватку с гоблином
Гоблин пал
Герой пережил сражение, у него осталось здоровья 64
Уровень здоровья достаточный, исцеляться не нужно

Вот так мы с вами научились превращать простые идеи в код и даже написали игру. Но не стоит останавливаться только на этом. В статье «Практика анализа алгоритмов» мы разбираемся в том, какая изначальная идея была заложена в готовый код. Это очень полезный навык. Вы сможете разобрать любой код, написанный, например, одноклассником или коллегой-программистом из соседнего отдела.

Проверь себя

Поиграйтесь с кодом, который мы написали:

  1. Попробуйте поменять исходные значения на другие и найдите ситуации, при которых герою все-таки потребуется выпить зелье или он не переживет схватку.
  2. Сделайте так, чтобы изначальное значение здоровья рыцаря, урон его меча и количество его зелий также можно было вводить с клавиатуры.

Подсказка: не забудьте, что, если ввести число через команду input, оно будет восприниматься как строка. Для перевода строки в число можно воспользоваться командой int.

Ответы:

  1. Можно уменьшать здоровье или урон рыцаря и запусками программы проверять, достаточно ли он ослаблен.
  2. Можно заменить строки 2, 3 и 4 программы на следующие:

hero_health = int(input(“Введите количество здоровья: ”))
sword_damage = int(input(“Введите урон меча: ”))
potions = int(input(“Введите количество зелий: ”))

Понравилась статья? Оцени:
Читайте также:

Читать статьи — хорошо, а готовиться к экзаменам
в самой крупной онлайн-школе — еще эффективнее.

50 000
Количество
учеников
1510
Количество
стобальников
>15000
Сдали на 90+
баллов