Как стать автором
Поиск
Написать публикацию
Обновить

Как научиться программированию разрабатывая игры

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.9K

Если вы учились программировать в конце 80x-начале 90х, то наверняка делали это на ZX Spectrum, БК-0010 или MSX. Во всех этих компьютерах был встроенный язык програмирования. Кто-то начинал сразу с машинных кодов Радио-86РК. В любом случае первыми программами скорее всего были игры.

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

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

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

Ким Онхо. Книжные магазины: большое путешествие от Сеула до Санкт-Петербурга

Игры на калькуляторах

Это кажется странным, но программирование на карманных калькуляторах, с их обратной польской записью и памятью в несколько десятков инструкций, стало возможным немногим позднее, чем программрование на Бейсике. Тем не менее, посмотрим сначала на калькуляторы. Первым карманным программируемым калькулятором был HP-65, потом появился HP-25 и множество других.

В Советском Союзе были свои аналоги, например Б3-34 или МК-61. Но что на этих калькуляторах можно делать с объёмом памяти программ в 50-100 примитивных инструкций? На ранних моделях даже ввод одной цифры занимал отдельную ячейку памяти. Вот пример типичной программы:

Игра "Двойник Баше"
Игра "Двойник Баше"

Там бывают ветвления и даже подпрограммы, но игры всё равно получались довольно простые. Одна из самых известных - "Посадка на Луну", в которой нужно было управлять подачей топлива в двигатель. Цель в том, чтобы мягко посадить ракету на Луну. Если скорость в конце будет слишком большой, ракета разобьётся. Если спускаться очень медленно, топливо закончится, и скорость автоматически станет слишком большой. Сложная игра. Такая же программа была и в книгах про Бейсик:

Вывод программы "Посадка на Луну"
Вывод программы "Посадка на Луну"

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

Зато с помощью калькуляторных игр можно научиться некоторым другим вещам. Например, изучить основы динамического программирования с помощью "Игры Баше" и подобных ей (по подходу к анализу) игр с ферзём или пешками. Более сложные шахматные программы в калькулятор не влезут.

Водитель, тебя ждут дома  Человек играет с калькулятором в игру "Двойник Баше"
Водитель, тебя ждут дома Человек играет с калькулятором в игру "Двойник Баше"

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

Игры на Бейсике

Один из самых известных (на Западе) сборников игр для самостоятельного набора - 101 компьютерная игра на Бейсике. Правда до появления персональных компьютеров было ещё далеко, поэтому дети с помощью этих игр учиться пока что не могли.

Иллюстрация из книги "101 BASIC Computer Games".
Иллюстрация из книги "101 BASIC Computer Games".

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

Уже не Давид Ал, а книга российских авторов "Как написать игру для ZX Spectrum".
Уже не Давид Ал, а книга российских авторов "Как написать игру для ZX Spectrum".

Что интересно, бейсики на микрокомпьютерах отличались друг от друга, поэтому в книгах приводятся либо инструкции по доработке опубликованных листингов, либо прямо таки патчи.

Как пропатчить KDE2 под FreeBSD программу от ZX-81 под BBC Micro.
Как пропатчить KDE2 под FreeBSD программу от ZX-81 под BBC Micro.

Сами игры из книг были довольно разнообразными, хотя в первых изданиях там не приводилось никаких разборов их алгоритмов. Если и был реализован какой-нибудь "искусственный интеллект", то восстановить его работу можно было только по листингу.

В более поздних книгах, ориентированных на пользователей микрокомпьютеров, какие-то пояснения всё же были. Отечественные читатели наверняка знают книги серий "Как написать игру", которые уже были похожи на настоящие учебники. Правда алгоритмов в них мало, в основном описаны лишь технические подробности и структурное программирование в целом.

Другие книги по программированию

Ещё одна интересная книга - "Программирование игр и головоломок" Жака Арсака. В ней уже был упор не на набор текста программы, а на самостоятельную её разработку. Причём там довольно много игр, где не просто что-то летает или прыгает, а нужно и подумать над стратегиями для компьютера. В первой части книги приводятся описания игр, а читателю предлагается поразмышлять над их программированием. Во втором разделе уже даются некоторые подсказки, позволяющие подступиться к поиску стратегий игр.

Хотя подсказки не всегда были полезными.
Хотя подсказки не всегда были полезными.

Ну а в последнем разделе приводилась полная разгадка, а иногда даже и фрагменты псевдокода. Но получить удовольствие от написания программы читателю предлагалось самостоятельно.

Хотя разобраться в мыслях автора было не всегда легко.
Хотя разобраться в мыслях автора было не всегда легко.

Много классных задач на разные темы описано в книге "Этюды для программистов". Там есть главы про сжатие текста, про компиляторы, про клеточные автоматы и конечно же про игры. Большинство задач оттуда будут интересны читателям и сегодня. Кода в книге нет, но зато есть разбор. В отсутствии кода это даже достоинство, потому что благодаря этому книга не так быстро теряет актуальность.

Правда некоторые практические советы уже устарели.
Правда некоторые практические советы уже устарели.

Как учиться сейчас?

Как вы уже поняли, многие из этих книг мне попадались в детстве. Но вот вопрос, есть ли то же самое у современных детей? Вроде бы существует не слишком много подобных книг. Может быть детям больше интересны чат-боты или веб-сайты. А может и нет, поэтому я (опираясь на упомянутую здесь классику) написал свою книгу, посвящённую изучению алгоритмов, используемых в разработке игр.

Обложка книги.
Обложка книги.

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

Всё это довольно сложно понять, читая листинг. А иногда и невозможно. Так что в своей книге я разбираю игры от начала до конца. Как выбрать структуру данных, организовать код, ввести и вывести данные. И всё это на двух языках - C++ и Python.

Маленький кусочек листинга.
Маленький кусочек листинга.

Каждый может выбрать, какой язык изучать. И если один из языков уже понятен, то разобраться со вторым будет проще.

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

Всего в книге 21 игра, включая два варианта крестиков-ноликов, быки и коровы, морской бой, реверси, солитер, калах. Даже есть игра "Шесть пешек" машину для игры в которую Мартин Гарднер предлагал собрать из спичечных коробков.

Дерево поиска хода для игры "Шесть пешек", составленное из спичесных коробков.
Дерево поиска хода для игры "Шесть пешек", составленное из спичесных коробков.

Сегодня вместо использования кучи спичечных коробков мы пишем программу, где применяются массивы, списки и деревья. И хотя тёплые ламповые коробки это очень интересно, программирование игр точно не хуже. Особенно если при этом получается разобраться с полезными алгоритмами, играющими лучше человека.

Теги:
Хабы:
+13
Комментарии2

Публикации

Ближайшие события