Глава 12 из 27

Бесплатно

3: Строим первые программы

⏱️ 60-75 минут
📊 intermediate

Глава 12: "Создаём свою первую игру"

Алиса пришла к Профессору Биту раньше обычного. Она едва сдерживала волнение.

— Профессор, я думала обо всём, что мы изучили — переменных, условиях, циклах, функциях, списках... И мне так хочется применить эти знания для создания чего-то настоящего!

Профессор улыбнулся:
— Ты совершенно права, Алиса! Знания приобретают настоящую ценность, когда мы применяем их на практике. Что бы ты хотела создать?

— Игру! — не задумываясь, ответила Алиса. — Настоящую компьютерную игру, в которую можно играть!

— Отличная идея! — Профессор потёр руки. — Давай создадим простую, но увлекательную игру "Угадай число".

Байт радостно подъехал ближе, на его экране появилась надпись: "Я ЛЮБЛЮ ИГРЫ!"

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

Алиса кивнула, а Профессор, глядя на пустую доску, задумчиво и тихо произнёс:

Каждый получает то, что излучает, —
Жизнь так справедлива и мудра!
Каждый пожинает то, что выбирает, —
Жизнь — для всех великая игра.

Каждый замечает то, во что играет,
От чего теряет свой покой.
Сложности и стены сам изобретает,
Чтобы стать особенным собой.

Поиграть азартно время приглашает,
Предлагая множество ролей.
Игроков с лихвою жизнь вознаграждает
Воплощеньем творческих идей!

Профессор взял маркер и начал писать на доске:

План игры "Угадай число":

1. Компьютер загадывает случайное число от 1 до 100.
2. Игрок пытается угадать это число.
3. Компьютер сообщает, больше или меньше загаданное число.
4. Игрок продолжает угадывать, пока не найдёт правильный ответ.
5. После угадывания компьютер сообщает, сколько попыток потребовалось.

Игра «Угадай число»: блок-схема программы

— Звучит просто, но будет очень интересно играть! — сказала Алиса. — С чего начнём?

— Начнём с импорта нужных библиотек и определения основных переменных, — ответил Профессор и вывел на экран первые строки кода:

python
import random # Библиотека для генерации случайных чисел

Загадываем случайное число от 1 до 100


загаданное_число = random.randint(1, 100)

Счётчик попыток


попытки = 0

Приветствие


print("Добро пожаловать в игру 'Угадай число'!")
print("Я загадал число от 1 до 100. Попробуешь угадать?")

— Что такое import random? — спросила Алиса.

— Это команда, которая подключает к нашей программе дополнительную библиотеку — набор уже готовых функций, — объяснил Профессор. — Библиотека random содержит функции для работы со случайными числами. Мы используем функцию randint(), чтобы получить случайное целое число в указанном диапазоне.

— Понятно! — кивнула Алиса. — А что дальше?

— Теперь нам нужно создать основной цикл игры, — продолжил Профессор. — Игрок будет вводить числа, а программа будет их проверять, пока правильное число не будет угадано:

python

Основной цикл игры


угадано = False

while not угадано:
# Получаем предположение игрока
предположение = int(input("Твоё предположение: "))
попытки += 1

# Проверяем предположение
if предположение < загаданное_число:
print("Загаданное число больше!")
elif предположение > загаданное_число:
print("Загаданное число меньше!")
else:
угадано = True
print(f"Поздравляю! Ты угадал число за {попытки} попыток!")

— Давай разберём этот код по частям, — предложил Профессор:

  • угадано = False — создаём переменную-флаг, которая показывает, угадано ли число. Пока оно не угадано, флаг опущен (False).

  • while not угадано: — цикл будет крутиться, пока число не угадано.

  • предположение = int(input(...)) — получаем ответ от игрока и преобразуем его из текста в целое число (int).

  • попытки += 1 — увеличиваем счётчик попыток на единичку.

  • Далее идёт знакомая нам проверка условий (if-elif-else): проверяем, меньше, больше или равно число загаданному.

  • f"Поздравляю! ... {попытки} попыток!" — это f-строка. Буква f в начале позволяет нам вставлять значения переменных прямо внутрь текста в фигурных скобках.
  • — А если игрок случайно введёт не число, а букву? — прищурилась Алиса.

    — Отличный вопрос, достойный настоящего тестировщика! — похвалил Профессор. — Наша программа выдаст ошибку и сломается. Давай добавим обработку исключений, которую мы изучили на прошлом уроке, чтобы сделать игру надёжной:

    python
    угадано = False

    while not угадано:
    try:
    предположение = int(input("Твоё предположение: "))
    попытки += 1

    if предположение < загаданное_число:
    print("Загаданное число больше!")
    elif предположение > загаданное_число:
    print("Загаданное число меньше!")
    else:
    угадано = True
    print(f"Поздравляю! Ты угадал число за {попытки} попыток!")

    except ValueError:
    print("Пожалуйста, введи целое число цифрами!")

    — Блок try-except спасёт положение, — пояснил Профессор. — Если игрок введёт слово вместо числа, программа не завершится с ошибкой, а выведет вежливую просьбу.

    — А можно добавить подсказки, если игрок долго не может угадать? — спросила Алиса.

    — Конечно! — Профессор быстро дополнил код, добавив проверку на каждую третью попытку:

    python
    if предположение < загаданное_число:
    print("Загаданное число больше!")
    # Подсказка каждую 3-ю попытку, если число далеко
    if попытки % 3 == 0 and загаданное_число >= предположение + 10:
    print(f"Подсказка: оно даже больше, чем {предположение + 10}!")

    elif предположение > загаданное_число:
    print("Загаданное число меньше!")
    # Подсказка каждую 3-ю попытку, если число далеко
    if попытки % 3 == 0 and загаданное_число <= предположение - 10:
    print(f"Подсказка: оно даже меньше, чем {предположение - 10}!")

    — Теперь давай соберём всё воедино и добавим ещё одну приятную деталь — возможность сыграть ещё раз, не перезапуская саму программу, — предложил Профессор:

    python
    import random

    Функция для одной полноценной игры


    def сыгратьвигру():
    загаданное_число = random.randint(1, 100)
    попытки = 0
    угадано = False

    print("\nЯ загадал число от 1 до 100. Попробуешь угадать?")

    while not угадано:
    try:
    предположение = int(input("Твоё предположение: "))
    попытки += 1

    if предположение < загаданное_число:
    print("Загаданное число больше!")
    if попытки % 3 == 0 and загаданное_число >= предположение + 10:
    print(f"Подсказка: оно даже больше, чем {предположение + 10}!")

    elif предположение > загаданное_число:
    print("Загаданное число меньше!")
    if попытки % 3 == 0 and загаданное_число <= предположение - 10:
    print(f"Подсказка: оно даже меньше, чем {предположение - 10}!")

    else:
    угадано = True
    print(f"Поздравляю! Ты угадал число за {попытки} попыток!")

    except ValueError:
    print("Пожалуйста, введи целое число!")

    return попытки

    Основная программа (Меню)


    print("Добро пожаловать в игру 'Угадай число'!")
    играть_снова = "да"
    лучший_результат = float('inf') # Бесконечность, чтобы первый же результат стал лучшим

    while играть_снова.lower() == "да":
    результат = сыгратьвигру()

    if результат < лучший_результат:
    лучший_результат = результат
    print(f"Новый рекорд! {результат} попыток!")

    играть_снова = input("Хочешь сыграть ещё раз? (да/нет): ")

    print(f"Спасибо за игру! Твой лучший результат: {лучший_результат} попыток.")

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

    — Это потрясающе! — воскликнула Алиса. — Можно попробовать?

    Профессор нажал кнопку запуска, и Алиса начала играть. После нескольких попыток она угадала число и восторженно захлопала в ладоши.

    WIN! Новый рекорд — Алиса празднует победу в игре

    — Я сделала это! Я создала настоящую игру!

    — Технически, мы создали её вместе, — улыбнулся Профессор, — но суть ты уловила верно. Это настоящая игра, и теперь ты можешь гордиться собой!

    — А можно как-то улучшить её? — спросила Алиса после нескольких раундов.

    — Конечно! Нет предела совершенству, — кивнул Профессор. — Вот несколько идей, которые ты можешь реализовать в будущем:

    1. Добавить уровни сложности (разные диапазоны чисел, например, от 1 до 1000).
    2. Ограничить количество попыток (добавить "жизни").
    3. Создать режим для двух игроков.
    4. Добавить графический интерфейс с кнопками и картинками, а не только текст!

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


    Задание

    Придумай и опиши, как бы ты улучшил игру "Угадай число". Выбери 2-3 идеи из списка Профессора или предложи свои. Опиши, как должна работать твоя улучшенная версия игры, и какие изменения нужно внести в код.