Игры, которые учат программированию. Как создают игры? этапы создания

  • JavaScript ,
  • Программирование
  • Образование стоит дорого. Хорошее образование стоит очень дорого. Но тем не менее возможность получить бесплатное и качественное образование есть у каждого. Компании и корпорации во всём мире вкладывают деньги в создание бесплатных образовательных продуктов. Отчасти, чтобы обеспечить себя квалифицированными кадрами в будущем. Отчасти, для преодоления бедности, предоставления всем равного доступ к качественному образованию.

    У каждого есть возможность воспользоваться специально созданной для обучения школьников средой программирования Scratch, которую разрабатывают специалисты одного из самых престижных технических учебных заведений США и мира - Массачусетского технологического института. Или игрой Minecraft, за которую Microsoft год назад заплатила $2,5 млрд и с помощью которой, в том числе, планирует обучать детей программированию. Или обучающими играми, которые создают энтузиасты и добровольцы во всём мире.

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

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

    Учитесь программировать. Учитесь думать

    Code.org


    Ресурс создан для детей от 4-х до 10-и лет, но, как утверждают его создатели, подойдет пользователям всех возрастов. Обучение начинается с самых азов - с обучения использованию мышки. Используется scratch-подобный язык состоящий из блоков. Играя ребёнок разберётся с азами программирования, узнает как алгоритм превращается в JavaScript-код и создаст свою собственную компьютерную игру.

    Minecraft - совместный проект Microsoft и Code.org. Игра рассчитана на детей от 6 лет и предполагает решение различных задач при помощи построения алгоритмов. Это позволяет детям освоить основы программирования, понять как работают его базовые механизмы.

    Minecraft действительно образовательная игра: она развивает пространственное мышление, математические и логические способности. И ещё игра учит чтению и письму, повышает общую грамотность. Впрочем, не только Minecraft имеет такой эффект, а любая деятельность, которой дети увлечены и которая мотивирует их к приобретению новых полезных навыков.

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

    Blockly, как и Скретч, создаёт программу при помощи соединения блоков. Но если Скретч больше подходит для внеклассных занятий, Blockly можно использовать в школе. Эта игра позволяет создавать учебные задания, компоновать их в модули, проходя которые, ученик постепенно осваивает какую-то тему.
    Вот, например, как выглядит созданная в Blockly головоломка по странам и флагам:

    ПиктоМир, разработанный НИИСИ РАН по заказу Российской академии наук, - наш ответ зарубежным аналогам. В НИИСИ РАН уже разработали систему «КуМир», в которой с программированием знакомятся старшие школьники, но игрового элемента в ней нет.

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

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

    Первые четыре уровня игры доступны всем, пятый уровень - головоломки для одарённых детей, шестой уровень - головоломки для родителей, чтобы им тоже было интересно.

    Колобот - 3d стратегия, разработаная компанией Epsitec в 2001. Игра призвана обучить детей (от 10 лет и старше) навыкам программирования в игровой форме. Геймплей заключается в создании программ для роботов. Цель - подготовить планеты для заселения и добычи полезных ископаемых.

    Особенностью игры является возможность создавать программы, в соответствии с которыми в игре действуют роботы (задавая им алгоритмы самостоятельной работы и заменяя ими монотонные действия, которые может делать и сам игрок), поэтому считается, что игра способствует обучению программированию. Язык программирования, встроенный в игру, похож на C++ или Java, но имеется ограничение на размер программы - не более 20 000 символов, что не позволяет писать серьёзные программы вроде имитации искусственного интеллекта. К каждой миссии прилагается обширная справка с объяснением что необходимо сделать. Также зачастую там есть шпаргалка - готовая программа (или куски программы) с помощью которой можно решить поставленную задачу.

    Существует русская локализация игры.

    Microsoft Imagine предлагает средства для обучения и разработки, начиная с самой первой игры или приложения до облачных исследовательских проектов с использованием больших данных. Приложения распределены по уровням сложности. Самые простые из них доступны детям 9-10 лет, более сложные предназначены для старшеклассников и студентов. Использование только некоторых приложений доступно в браузере, для запуска остальных требуется установка бесплатного ПО и операционная система Windows. Ежегодно проводится конкурс Imagine Cup, в котором могут принять участие школьники, студенты и аспиранты из разных стран мира. Главным заданием участников является разработка идеи проекта или игры и создание её прототипа с помощью современных информационных технологий.

    JavaRush - изучение программирования на Java в виде онлайн-игры. Каждому уровню соответствует отдельная солнечная система на звездной карте. Лекциям внутри уровня - планеты солнечной системы. Каждая открытая лекция – это перелёт на очередную планету. Когда все лекции открыты, корабль перелетает к следующей звездной системе.
    Весь курс Java Core на JavaRush состоит из сорока уровней. Первые 10 уровней доступны всем, уровни 11 и выше доступны при наличии платной подписки.

    На каждом уровне JavaRush 10-15 мини-лекций, так что 10 бесплатных уровней - это около 140 лекций и где-то 230 задач. Достаточно, чтобы вы определились, подходит вам JavaRush или нет.

    Разработчики Code Combat предлагают учиться программированию, захватывая земли и побеждая врагов в лучших традициях RPG.

    Начинать играть можно «с нуля», не имея о программировании никакого представления. Пользователь может выбрать язык программирования, который хочет освоить: Python или JavaScript. Уровни игры выстроены как хороший курс программирования с нарастающей сложностью.

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

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

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

    UPD После 18 уровней в игре появляются две ветки - одна платная, вторая бесплатная. В игре 80 бесплатных уровней. По платной подписке доступны 60 дополнительных уровней.

    Эта подборка включает бесплатные игры, которые созданы не только для новичков, но и для профессиональных разработчиков, желающих в интересной и увлекательной форме освоить JavaScript, Java, Python, PHP, C# и многие другие современные языки.

    Мы отобрали 21 самый интересный сайт, обучающий программированию во время игры, более чем из 200 подобных проектов.

    CodinGame

    Ruby Warrior

    Если вы хотите изучить Ruby, то Ruby Warrior - то, что вам нужно. Есть два уровня сложности, соответствующих вашим навыкам. Для сохранения своего прогресса придётся залогиниться через Facebook.

    Check iO

    Code Hunt

    Vim Adventures

    Давно хотели собраться с силами и выучить Vim полностью?

    Robocode

    Любите битвы роботов? Тогда игра для вас. Вы научитесь программировать путём создания боевых роботов-танков на Java или.NET. Когда вы создадите робота, на экране в реальном времени начнётся битва.

    Cyber DoJo

    FightCode

    Code Monkey

    Elevator Saga

    Codewars

    Улучшайте свои навыки программирования совместно с другими людьми через решение реальных IT-проблем и задач на Codewars .

    Поддерживает JavaScript, C#, Java, Python и другие языки.

    Git Game

    Hacker

    Hex Invaders

    Flexbox Froggy

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

    (всё это и еще больше мы рассказываем в видео-версии, которую можно найти в конце статьи; в ней можно посмотреть геймплей игр и другие материалы по теме)

    Их стоит разделить на несколько категорий: первая - это обучающие игры, которые должны помочь детям или студентам понять основы программирования, составления алгоритмов, общие команды и принципы. Например популярный графический язык Scratch, которым можно пользоваться прямо из броузера. Или российская система ПиктоМир. Даже столь известный язык как BASIC при своём создании в начале 60-х задумывался как упрощённый вариант с синтаксисом, понятным непрограммистам.


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

    И наконец, алгоритмические игры, где программирование является малозаметной и органичной частью игрового процесса.


    Совсем не обязательно, чтобы написание алгоритма было представлено в виде текстовых команд: например, существует серия The Incredible Machine, головоломка, где из элементов нужно строить сложные механизмы для выполнения каких-то простых задач. Лопнуть все воздушные шарики на экране, проводить мышей к сыру, запустить ракету и тому подобное - уровней море. У неё есть и более современный аналог, Crazy Machines, и даже римейк от тех же авторов. Для решения вам даётся набор блоков: планки, мячи, розетки для электрических приборов, но не все строительные блоки являются статичными: в некоторых можно выставить таймер, или сделать так, что они начинают работать после включения или срабатывают на каждый второй раз, или выполняют сортировку. Огромный простор для алгоритмического творчества.


    Ну, а если смотреть на совсем популярные игры, то например в Dragon Age: Origins можно детально, пошагово регулировать поведение ваших сопартийцев в бою. С новыми уровнями у них даже открываются новые опции. Можно было выбирать кого атаковать сначала, когда применять скиллы или магию, при каких условиях переключаться на других врагов и тому подобные вещи. Чем не алгоритм?


    Но перейдём к истокам зарождения вопроса: когда же всё-таки программисты стали играть со своими коллегами? А это произошло в далёком 61-м году, на заре компьютерной эры, когда группа разработчиков из американской компании Bell Labs: Виктор Высоцкий (сын русских эмигрантов), Малькольм Дуглас МакЭлрой и Роберт Моррис соорудили первую игру, если так можно её назвать. Изображений или кода не сохранилась, но концепт был позже описан и опубликован. Эта игра, Darwin, представляла из себя «битву программ», т.е. используя три доступные функции - probe, kill и claim, надо было составить такую программу, которая бы перезаписала вражеский код, не давая им размножаться. И самое интересное, что битвы происходили прямо в памяти реального мейнфрейма IBM 7090 без какой-то виртуализации - неправильный ход, и синий экран, вернее, тревожные огоньки на консоли оператора! Это было сделано для повышения быстродействия, чтобы не писать интерпретатор. Игра просуществовала недолго - всего несколько недель, пока не была придумана «ультимативная» программа-убийца, которая не оставляла шансов для соперника.


    Но наследие Дарвина не было забыто, и однажды другой автор, Александр Дьюдни, тоже учёный, популяризатор науки, автор научно-фантастических романов и сборников поэзии, описал в деталях схожую концепцию с рядом доработок. Он, разумеется, основал идею на Darwin. Игра называлась Core War и подробная статья о ней появилась в журнале «В мире науки» в 1984-м году. В ней уже полем битвы служила не память реального компьютера, а виртуальная среда воображаемого компьютера MARS. Код противоборствующих программ напоминал язык ассемблера. Хотя автор не представил исходных кодов, разные энтузиасты создали свои версии, которые оказались столь популярны, что по этой игре стали проводиться конкурсы на лучшую программу, появился свод правил и стандарты ещё в конце 80-х (вот оно, зарождение киберспорта!), затем и множество более поздних реализаций, и в результате соревнования проводятся по сей день. И, наверняка, собирают больше зрителей, чем стримы Старкрафта.


    Следующая игра, Robot War 1981-го года была гораздо более user-friendly и приближена к традиционным компьютерным играм. Её автором был Сайлас Уорнер, известный по своей другой игре, Castle Wolfenstein, той самой, что вдохновила id Software на римейк и долгоиграющую серию. Кроме того, Castle Wolfenstein считают первой стелс-игрой, но не о ней сейчас речь.


    Прототип Robot War был создан (или подсмотрен) автором во время работы с системой PLATO еще в 70-е. PLATO была уникальным инкубатором идей, где впервые появились многие вещи, привычные нам сегодня: форумы, электронная почта, веб-приложения, ролевые игры, многопользовательские танковые шутеры и многое другое. В этой игре предлагалось самостоятельно разрабатывать AI роботизированного танка. Размер кода был ограничен 256-ю строками, что не так мало. Ну, а после тестирования можно вести своего железного друга на арену, для выяснения отношений с другими жестянками, что показывалось уже графически и все действия были видны в реальном времени. Игра выходила для компьютера Apple II и ознакомиться с ней можно через эмулятор. Вообще, сражения множества AI стали популярной темой таких игр.


    Еще одной игрой про роботов, был уж к ним такой интерес, стала Robot Odyssey, уже в 84-м. И это уже явное развитие, ведь помимо собственно проектирования и программирования появилась также и сюжетная часть. В игре есть персонаж - мальчик, которой провалился в подземный город роботов. И для возвращения домой ему нужно использовать роботов, которых он находит по пути, перепрограммируя их под новые задачи.


    И вот здесь начинается самое интересное: игра предлагает разрабатывать не просто софт, а по факту создавать новое железо, чипы из примитивных элементов, ковыряя логику роботов. В итоге сложность и проработанность этого процесса, а также его сходство с реальностью повергла в шок не только игроков, но и специалистов настоящего времени. Robot Odyssey теперь считается «самой сложной игрой всех времён».

    В плюс создателям стоит отметить, что в ней есть встроенный подробный tutorial - большая редкость в те годы. И авторы игры не питали иллюзий по поводу сложности, и прошедшим её вручался именной сертификат.


    Но игровой процесс не обязательно должен быть столь жёстко-беспощадным и примером тому может быть игра Tower of Babel, трёхмерный паззл 89-го года для Atari ST. Здесь мы управляем одним из трёх роботов, которые имеют уникальные способности, но программирование не нужно осуществлять постоянно, а лишь когда в этом всплывает необходимость, и нужно координировать их действия, когда выполнить задачу одному не под силу. Не правда ли, напоминает о The Lost Vikings?


    Алгоритмические игры были и в России. Например, увлекательная игра Штурман для компьютера MSX. Этот компьютер использовался в советских и российских школах со второй половины 80-х. Сама игра появилась в 89-м или 90-м году. Она носила образовательный характер и в ней надо было прокладывать маршрут для навигационного компьютера планетарного корабля, с тем чтобы поселения колонистов получали нужные им грузы. «Язык» написания алгоритма был довольно простым - чтобы не переутомлять учащихся.


    Другая отечественная игра называлась Snake Battle и была сделана компанией Gamos, известной прежде всего по Цветным Линиям и квесте о Братьях Пилотах. Но именно эта игра была рассчитана явно на иную аудиторию. Основной принцип взят из классических игр а-ля Змейка, т.е. по экрану ползает змея, ест точки и становится длиннее и так далее. Но здесь в качестве пищи должны использоваться другие змеи, управляемые, как вы догадываетесь, искусственным интеллектом. Несмотря на то, что игра получилась оригинальной и в чём-то новаторской, особого распространения, признания и денег своим создателем не принесла.


    И как ни странно, столь сложный и специфический жанр добрался и до приставок. Серия Carnage Heart впервые появилась на Playstation в 95-м году и с тех пор вышло несколько продолжений, в том числе на PSP. Удивительный факт, учитывая что игра действительно непростая. В ней речь идёт тоже о поединках металлических истуканов, программируемых нами. Для написания инструкций используются графические схемы, из довольно обширного списка, почти каждую из которых можно как-то настроить. Всё усложнялось тем, что встроенного руководства здесь нет, а видео с обучением находилось на втором диске.


    И напоследок TIS-100 – одна из самых последних игр на эту тему, и далеко не самая простая. В центре сюжета - таинственный компьютер, который пылился в гараже у вашего дяди. Увы, дядя скоропостижно скончался и TIS-100 достаётся вам. Сведений об этой модели найти трудно, некоторые блоки памяти закрыты для доступа, хотя дядя долго бился над тем, чтобы разгадать тайну его происхождения и назначения. Ну а сейчас этот динозавр даже не хочет загружаться - не может выполнить простейший тест диагностики.

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


    Но сравнить TIS-100 с какой-нибудь Cut the Rope было бы не совсем корректно. Ведь это по факту симулятор транспьютеро-подобной системы, которые были популярны в 80-е. Система программируется на упрощенном языке ассемблера. Каждый процессор, или узел, а их здесь 12, имеет ограничение на количество строк программы. Вместе с тем, количество узлов даёт большую свободу в способах решения заданий. Задачи довольно разнообразны, но обычно они имеют следующий вид: взять исходные данные, провести над ними какие-то действия (сортировку, арифметические операции или что-то другое) и вывести их в нужный порт.

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

    И на этом мы закончим экскурс в мир игр. Если вам понравилось, то посмотрите и наши видео на эту тему - там есть игры и факты, не затронутые в этой статье.

    Спасибо за внимание!

    //Virgil, Dimouse, true-grue.

    P.S. Видео с передачей разбито на две части:

    RPG за неделю? С нуля? Это вообще возможно?
    Я рискнул, и я сделал это.

    В интернете полно информационных ресурсов, доступных мелким, независимым (indi) разработчикам игр. На одном таком общественном форуме, в процессе спора, я имел неосторожность ляпнуть, что, если мне дадут неделю времени, компьютер со свежеустановленной Windows, и хорошее соединение с Интернет, я смогу создать достойную игру, не потратив на это ни цента. Нет, она конечно же не сможет конкурировать с Halo 2 или чем-то такого же уровня(если бы я мог создать такую игру за неделю, я бы давно бросил работу), но она будет достаточно интересной и играбельной.

    Tom Bampton, автор ежемесячных обзоров игр в номинации «Игра на день» (www.gameinaday.com), сказал: "Дерзай!" Затем он добавил дополнительное условие - я должен сделать это, не используя существующие игровые движки. Мне можно использовать только основные библиотеки / API.

    Сначала я отказался от этой идеи. У меня не было лишнего времени, чтобы на неделю отстранится от разработки текущего игрового проекта на работе. Но потом я подумал: да черт с ним, ведь что такое неделя? В типичной компании, например в Е.А., рабочая неделя составляет 40 часов. Так почему бы не сделать игру не за календарную неделю, а за 40 чистых часов? Это уже реальнее, - но я не хотел создавать очередной тетрис или арканоид. А как насчет ролевой игры - одного из самых сложных игровых жанров? Это возможно?

    Я знал, что это будет чрезвычайно трудно. Но я принял вызов.

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

    Так вот, как я создал игру в течение одной недели с нуля, и без бюджета. Если вам лень читать, и вы хотите побыстрее заглянуть в конец повествования, чтобы узнать, как выглядит конечный продукт, посмотреть все его баги, вы можете скачать версию игры для Windows здесь: http://www.rampantgames.com/hackenslash.html

    ПЛАНИРОВАНИЕ
    Цель
    Создать олдскульную RPG в стиле старых игр начала 80-х, с видом "сверху вниз", например как The Temple of Apshai, Ultima III, и Telengard. Игрок будет двигаться через комнаты в типичном подземелье, сражаясь с различными монстрами с помощью «меча и магии». Постепенно он будет совершенствовать свои возможности получая опыт, повышая уровень, приобретая магическое снаряжение.

    Однако, игра будет состоять не только из самого ведение боевых действий. Игрок также будет иметь возможность прокрасться мимо монстров, или вступить с ними в переговоры. Будут запертые двери и сундуки, и уникальные особенности подземелья, имеющие неожиданные эффекты. В игре не будет длинных описаний или диалогов, - в основном это будет типичный hack & slash. Вы будете двигаться по пути, пока не станете достаточно сильным, чтобы встретится лицом к лицу с финальным боссом, выполнить квест, и благополучно вернуться домой (в вашу стартовую комнату).

    Правила разработки

    Правило № 1: Время разработки ограничено одной неделей (включающей 40 часов)
    На разработку игры должно быть потрачено в сумме не более 40 часов. Они будут включать время, потраченное на непосредственную работу над игрой и на ее обдумывание. Перерывы в разработке больше, чем десять минут, не будут учитываться. Это будет "идеальная" рабочая неделя из 40 высокопроизводительных часов.

    За 40 часов будет сделана полнофункциональная альфа-версия. Дальнейшее допиливание, такое как окончательная отладка игры, создание инсталятора для распространения в общее время учитываться не будут, никакой новый функционал на этом этапе добавлен не будет. Документирование процесса разработки также не учитывается.

    Правило № 2: Использовать только бесплатные инструменты
    За исключением программного обеспечения, которое поставляется с установкой Windows, используется только свободный софт, по возможности с открытым исходным кодом. Смысл этого - показать, что не нужны дорогие (или пусть даже дешевые) инструменты для разработки игры. На оборудование, такое как сканер, микрофон и цифровая фотокамера, данное правило не действует - если у вас их нет, будем считать, что их можно у кого-то одолжить.

    Правило № 3: Нет движкам, только стандартные библиотеки / API
    Игра должна быть создана "с нуля" без использования существующих игровых движков. Никакого обмана, и создания игры или каких-то ее частей с помощью конструкторов игр или использования подобного программного обеспечения.

    Инструменты
    Код:

    Python 2,3 (http://www.python.org/)
    PythonWin
    PyGame (http://www.pygame.org/)
    Py2exe – чтобы собрать что получится в исполняемый файл для распространения. (http://starship.python.net/crew/theller/py2exe/)

    Gimp 2,0 (http://gimp-win.sourceforge.net/)
    MS Paint (тот что идет с Windows) - для вставки скриншотов, захваченных клавишей PrintScreen (GIMP почему-то отказался это делать)
    Бесплатные текстуры были взяты (http://www.textureartist.net/textures/index.htm) и (http://www.mayang.com/textures/)

    Audacity (http://audacity.sourceforge.net/) плюс мой микрофон или бесплатные.

    Расписание (План) работ
    Расписания составляют, чтобы их потом нарушать, но все же они нужны, чтобы контролировать прогресс и строки, и вносить коррективы по мере необходимости.

    Час 1-10: Базовая архитектура
    Проектирование движка и основных компонентов. Получить отображения мира на экране. Я должен реализовать возможность перемещать тестового игрока по всему миру, и смотреть на вещи, а затем превратить то, что получится, в игровой редактор.

    Час 11-20: Возможности игрока
    Реализация всех основных возможностей для игрока - перемещение, атака, открытие дверей, смерть, подбор вещей и использование инвентаря. Создать каркас представления всех объектов в окружающей среде, для тестирования возможностей игрока во взаимодействии с миром.

    Час 21-30: Оживление мира
    Добавить искусственный интеллект, игровые события, ловушки, спецэффекты. К концу этого периода я должен иметь достаточно полное техно-демо, включающее все основные особенности игры.

    Час 31-40: Добавление контента и правил
    Получить из техно-демки полноценную игру. Добавить все дополнительное содержимое. Добиться завершенности и баланса игровой механики. Отшлифовать все, на что хватит времени, добавить спецэффекты, анимацию и т.д.

    После 40 часов: Тестирование и релиз игры
    Протестировать, и устранить найденные ошибки (не добавляя новые возможности!) Собрать все в кучу, и выложить в интернете. Завершить документацию.

    Дневник разработчика Hackenslash: Игра за неделю

    Час 1 – Дикое проектирование и базовые классы
    Этот час был проведен за созданием некоторых базовых классов для игры - и использования их в дальнейшем проектировании. Мир будет представлен в виде последовательности комнат, соединенных порталом. Все в мире базируется на комнатах, подобно тому, как это было в старых адвенчурах или MUDах. Большинство объектов в игре представлены как " GameObject ", который имеет позицию и содержимое (в том числе может содержать и другие объекты - карта может содержать комнаты, в комнате может быть сундук, в сундуке - меч... и, я думаю, меч может содержать несколько комнат, но мы так делать не будем.)

    Я создаю объекты creature (существо) и player (Игрок)
    Я генерирую набор атрибутов для существ, и внедряю их в класс. Видимо я задрот, который играет слишком много в РПГ игры. Я пока еще не знаю точно, как будет выглядеть и работать игровая механика.
    Я делаю объект room (комната), наследуемый от GameObject. У комнаты есть ширина, высота, и стены - и на текущий момент больше ничего.

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

    Час 2 - PyGame 101
    Цель этого часа - инициализация PyGame, ну и начать хоть что-нибудь рисовать на экране. На самом деле, я провожу большую часть времени за чтением документации PyGame, пытаясь выяснить что там и как, поскольку у меня почти нет опыта использования PyGame или SDL.

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

    Час 3 - Если бы стены имели уши, я б их сильно отругал.
    Цель этой часа – обозначить контуры комнаты стенами, и отобразить это на все еще черном экране. Чтобы сделать это, мне нужна комната, и мне нужна графика. Приходится много сидеть над GIMPом, правя загруженные из интернета текстуры, так чтобы они превратились в подходящие тайлы. Я создаю класс менеджера текстур. И я заполняю структуру образца комнаты. Я также потратил немного больше времени, просматривая документацию PyGame, чтобы найти что-нибудь еще, что можно использовать, дабы сделать работу легче.

    Час прошел. А у меня все тот же черный экран. Стен как не было, так и нет.

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

    Не имея подробного плана проекта, действительно довольно легко запутаться, когда выполнив определенную работу Вы задаетесь вопросом "Что дальше?" Я решил, что если рисунок одной комнаты хорошо, то нарисовать две – вдвойне лучше.

    Для хранения созданных комнат я создал файл "minidungeon".
    Я начать добавлять логику порталов "portals" - отверстий в стенах, для перехода в другие комнаты (и предоставляющих всю информацию о смещении, необходимую для правильного отображения смежных комнат).

    Час 5 - Hackenslash получает больше комнат

    Я изменил название окна на "Hackenslash!". Просто потому, что это круто.
    Я создал карту объектов для хранения комнат, и класс MapMaster содержащий несколько карт.
    Я добавил вторую комнату и подключил к первой через портал.
    Соседние комнаты подключены к текущей через порталы, и теперь отображаются на экране.
    Я исправил некоторые ошибки отсечения, чтобы правильно отображались стены, частично выходящие за пределы окна.

    Час 6 - за который мы улучшаем скил рисования

    Добавил класс дверей, а также настроил карты для размещения двери (дверь должна быть общей для двух комнат). (Правка: Жаль, что я никогда это так и не использовал!)
    Я создал еще 3 тайла стен, объединил их в одно изображение.
    Графический вид стен изменяется в зависимости от типа.
    Я делаю простую графику для вида сверху вниз.

    Часы 7-8 – Вращения и восклицания!

    Я разобрался, как в PyGame поворачивать растровые изображения.
    Я добился плавного вращения тестового игрока. Много регулировок необходимо для корректировки угла вращения.
    Я узнал, как использовать шрифты в PyGame, и я создаю несколько классов для отображения и анимации текста.
    Добавил класс для автоматической обработки текста, поскольку данная функциональность будет часто использоваться в будущем.

    Часы 9-11 – Елементы - бррр!

    И вот опять, мне нужно решить вопрос "Что дальше?".

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

    Я решил, что элементы могут занимать больше, чем один тайл, и могут быть повернуты на любой градус. (Правка: В ретроспективе, очень тупое решение - я провел слишком много времени на его реализацию, но оно оказалось почти бесполезным.)

    В общем, я потратил около трех часов, работая над элементами, разрываясь между созданием графики и написанием кода.

    Часы 12 - 13 - Нам нужен Лут!

    Я создаю графику и код для вещей. Удивительно, как много времени может отнять рисование. Особенно раздражает, когда изображение имеет вид, будто курица лапой рисовала, сколько бы усилий к этому не прилагалось.

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

    Час 14 - Ковры

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

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

    Зато уровень теперь выглядит круто. Ну, по крайней мере круче, чем черный.

    Часы 15-16 - Click! Click!

    Я занялся управлением мышью и обработкой событий.
    Добавил управление персонажем мышью. Движение пока происходит рывками, нет плавной прокрутки уровня.
    Игрок может выйти за пределы комнаты, отсутствует проверка столкновений.
    Я исправил несколько ошибок.
    Помучил GIMP и создал красивые лестницы.
    .
    На разработку уже затрачено почти 17 часов, так что я начинаю немного нервничать. Я прошел 2/5 пути создания игры, - закончился второй "рабочий день" разработки. То, что у меня уже сделано впечатляет, но я понимаю, что сделать осталось много больше. У меня есть еще четыре часа, чтобы закончить основные возможности игрока, и вложится в график. Это будет трудно... но я все равно не жалею, что потратил лишнее время на рисование графики!

    Час 17 – Плавно перемещаемся, пока не стукнемся лбом о стену

    Большинство времени потрачено на доводку графики и исправление ошибок.
    Добавлено обнаружения столкновений и плавная прокрутка, при движении игрока.
    Игрок теперь может делать несколько шагов (оборотов) в ответ на действие мыши.

    Час 18 - Переступаем пороги

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

    Час 19 - Лестница в небо, Адское меню

    Мой брат вызвался сделать музыку для игры. Он сделал музыку для Void War, и получилось довольно хорошо. Это напомнило мне, что нужно сделать воспроизведение звука (и музыки). Вроде бы в PyGame это сделать довольно просто, поэтому оно не должно занять слишком много времени. (Правка:. Я так и не нашел для этого времени, к сожалению в Hackenslash вы не услышите ни единого звука.)

    Моя следующая цель состоит в обработке взаимодействия с существами и предметами. Мне очень нравится, как это сделано в The Sims и Neverwinter Nights, когда вы хотите взаимодействовать с игровым объектом, появляется контекстное меню. Я планирую реализовать что-то похожее.

    Учу лестницы перемещать игрока в новую комнату.
    Я немного проштудировал Интернет и документацию PyGame, ища, нет ли где открытых исходных кодов подобного меню на PyGame. И не нашел ничего.
    Я начал делать собственное меню.

    Часы 20 - 21 - Что там с меню?

    Я продолжаю работать над меню. Меню может быть легко подключено к объекту, точнее объект как бы порождает меню, что позволило легко реализовать обратную связь для обработки выбора игрока.
    Я начал работать над меню вещей. Оно уже появляется в нужном месте, и позволяет выбирать какой-нибудь пункт, но при нажатии пока ничего не делает, работает только кнопка закрытия меню.

    Час 22 – Заснуть в процессе

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

    Я замечаю, что уже поздно, и что вышел далеко за пределы отведенного на эту работу часа. Если бы я не обращал внимания на общее время разработки – просидел бы, наверное, до утра. Но поскольку я ограничен во времени, потраченный практически впустую час - действительно плохие новости. Интересно, как сдвигаются приоритеты, когда не хватает времени. В общем, я ложусь спать.

    Час 23 - Боевые параметры!

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

    Час 24 - Меню игрока

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

    Час 25 – До(раз)пиливаю полы и стены

    Сегодня утром у меня в мозгу появилась идея (неужто у меня такой большой мозг, что в него вмещается столько идей?) как устранить проблему перекрытия стен в смежных комнатах (см. описание восемнадцатого часа). Что, если я буду рисовать только половинки стен? Таким образом перекрытия не будет вообще, и не нужно добавлять сложную логику для определения и исправления перекрытий.

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

    Отлаживая код, я обнаружил еще несколько ошибок, связанных с переходом между комнатами.

    ПЕРЕРЫВ - Кризис!

    Я только что осознал, что прошло больше чем 3/5 отведенного на разработку времени, и что осталось меньше пятнадцати часов, чтобы закончить игру. Посмотрев расписание необходимых функций игры, и прикинув, что на реализацию каждой нужно в среднем час, я понял, что на реализацию всего мне нужно около двадцати пяти часов. На десять часов больше, чем есть. Проект официально под угрозой срыва.

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

    Двери: Вырезано! Я очень хочу сделать двери в игре. Жалко расставаться с этой функцией - тем более, что я уже некоторое время работал на ней. Но остается еще слишком много работ, например искусственный интеллект. И, наверное, понадобится 2-3 часа, чтобы заставить их работать, а их у меня нет.
    Инвентарь: упростить! Забудьте о дополнительном инвентаре, и возможности смены оружия по желанию. Все, что подобрано и не стало текущим оснащением, будет сразу пересчитано в деньги.
    Ловушки: упростить! Я хотел бы иметь множество ловушек с интересными и разнообразными последствиями их активации. Не судьба. Ловушки будет иметь простой визуальный эффект, наносить урон и временно увеличивать вероятность нарваться на случайного монстра
    Луки (стрелковое оружие): Вырезано! В игре будет только оружие ближнего боя, на расстоянии можно атаковать заклинаниями.
    Сохранение / загрузка игры: упростить! Сохранить можно только персонажа, а не состояние мира. (ПРАВКА: Я и этого не сделал!)
    Система частиц: Отложить! Создание системы частиц перемещено в самый низ списка приоритетов. Я сомневаюсь, что придется их делать. Хотелось бы сделать впечатляющие визуальные эффекты с помощью частиц для заклинаний... но, скорее всего, этого никогда не будет.
    Заклинания: упростить! У меня была серьезная концепция о заклинаниях: их можно было бы найти в виде свитков, и количество более десятка. Это грустно, но будет всего несколько заклинаний: Лечение, Урон, Ослабление, Усиление, и Восстановление. При повышении уровня, можно позволить игроку усилить заклинания за счет увеличения числа магических очков.
    Анимация монстров и игроков: Вырезано! Я никудышный художник, чтобы сделать это достаточно быстро.

    Принимая решение, что я не буду делать (или то, что отложу на после), не менее важно решить, что нужно сделать в первую очередь.

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

    Отлично, с приоритетами разобрались, продолжаем разработку.

    Час 26 - Бросим кости

    Я работаю над механикой «игральных костей», - механизма, с помощью которого в игру будет внесен элемент случайности. Поскольку у нас нет ограничения реальных костей, мы можем получать случайное число любого желаемого диапазона. Например от 1 до 33, или от 6 до 17. Так что я могу бросить кости, сравнить то, что выпало со своей атакой и защитой врага. Если выпавшее число выше защиты, атака удалась.

    Например, предположим, что у меня общее значение атаки 15. Я атакую монстра, у которого 10 защиты. Мои шансы 15 из 25 (25 =15 +10), или 3 из 5. Так игра будет генерировать случайное число между 1 и 25, и если оно выше десяти, я выиграю.

    Для вычисления нанесенного урона используется немного другой способ. Я добавил защищающемуся параметр «броня», а атакующему "урон". Я генерирую случайное число от 1 до их суммы, а затем вычитаю броню. Если результат меньше единицы, урон не наносится. В противном случае, он равен полученному результату. Таким образом, если монстр, с уроном равным 10 атакует игрока с 5 очками брони, игра будет генерировать число от 1 до 15, из которого вычтет 5, то, что получится, и есть нанесенный урон.

    Это объяснение и описание заняло больше времени, чем его реализация.

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

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

    Разработка игр

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

    Конечно, имеются и исключения из правила. К примеру, небезызвестный программист Маркус "Нотч" Перссон в одиночку создал "Майнкрафт" — игру, которая является одним из самых прибыльных проектов за последние 10 лет. Но для того, чтобы разработать что-то подобное, нужно быть настоящим асом своего дела и иметь за плечами огромный опыт.

    Создание игр. Программирование

    Начать создавать шедевры компьютерного мира теоретически может каждый. Но как можно понять, программирование игр - это очень сложно. Однако стать геймдевом может практически любой. Самое главное условие — много свободного времени и просто титаническая усидчивость. Допустим, у нас это имеется. Что же делать дальше?

    В первую очередь нужно освоить хотя бы несколько самых популярных языков программирования. Без этого создать качественную игру вряд ли получится. Почему же несколько языков? Неужели одного недостаточно? Дело в том, что каждый programming language имеет свою четкую область применения. Ниже мы рассмотрим самые востребованные языки и их применение при программировании игр.

    Языки

    Пожалуй, наиболее универсальным языком в плане программирования игр является C++. Большинство современных игр и движков для них пишутся именно на нем. В чем же особенность данного языка? Пожалуй, одно из главных достоинств C++ заключается в огромном количестве всеобъемлющих библиотек. Благодаря этому посредством данного языка можно написать все что угодно: от маленькой инди игрушки до крупного проекта ААА класса.

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

    Python — это, пожалуй, лучший выбор для начинающего геймдева. Во-первых, синтаксис языка довольно прост. Для того чтобы начать программировать на Пайтоне, достаточно прочитать туториал и обладать нативным уровнем английского. Во-вторых, возможности данного языка программирования достаточно широки. Конечно, Пайтону не угнаться за C++ в плане функциональности. Тем не менее посредством Python можно создать вполне достойный софт (в том числе и игру). К примеру, на Пайтоне написаны такие игры, как "Батлфилд" (2005), "Цивилизация 4", "Симс 4" и много других проектов, которые стали настоящими хитами.

    Java — еще один претендент, который определенно достоин внимания. Пожалуй, главное достоинство данного языка — полная кроссплатформенность. Это означает, что софт, написаный посредством "Ява", поддерживается всеми операционными системами ("Виндовс", "Линукс", "Андроид" и т.д.). Это позволяет быстро переделать игру под любую платформу. Помимо этого, Java дает программисту массу возможностей. За примерами далеко ходить не нужно. Вышеупомянутый "Майнкрафт" был написан именно на "Яве".

    Однако что делать, если нет времени на изучение языков, но свою игру написать все-таки хочется? Тут на помощь приходят так называемые игровые конструкторы. Что это такое? Ответ на вопрос вы сможете найти ниже.

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

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

    Программы для создания игр

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

    Пожалуй, сама известная программа для разработки игр — Game Maker. Она предназначена для создания двухмерных проектов. Делать игры можно без навыков программирования. Вместо строчек кода пользователю предоставляют набор готовых действий. Все, что нужно сделать — создать объекты и определить правила взаимодействия между ними. Также стоит подметить, что рисовать спрайты можно прямо в Game Maker без использования посторонних программ. Поэтому софт является вполне самодостаточным. Мало того, Гейм Мейкер не обидит и продвинутых юзеров, которые обладают навыками программирования. Ведь в программе есть возможность добавлять свой исходный код. Посредством Game Maker можно создавать игры с видом сверху (РПГ, тактический шутер и т.д.) и сбоку (платформер).

    Construct 2 — это еще один конструктор для разработки 2D-игр. Пожалуй, главная особенность данной программы — мультиплатформенность. Посредством "Конструкта" можно создавать игры для iOS, Android, Windows, Web и т.д. В плане функциональности Construct 2 ничем не уступает тому же "Гейм Мейкеру".

    Вывод

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