Предисловие
Если Вы не прочитали предыдущую часть - то прошу ознакомиться с ней по этой ссылке. Там я кратко рассказал, как начал создавать первые игры на конструкторах и показал что у меня получилось (из того, что сохранилось, конечно ;) )
Как ни парадоксально, но кодом я написал игр больше, чем создал в конструкторах (закончил, правда, не все, но это другая история xD ).
Вся суть в том, что когда я начал осваивать для себя такую обширную тему, как "Программирование" - мой азарт увеличился. Я осознал, что я могу написать все что угодно и ничто меня не ограничивает (кроме характеристик ПК, конечно :) ) и "я пошел в разнос".
Чего и на чем я только не программировал? Языков уйма: Delphi/Pascal (ABC Pascal, FreePascal, Turbo Pascal), C/C++ (GNU GCC и G++/C++ Builder/Turbo C++ 3.0/Microsoft Visual C++/Qt GUI), C# (NET. Framework/Mono), Python (2.x/3.x), Java, JavaScript, QBasic/VBasic (Под Windows и DOS).
Как изучал новый язык - так сразу начинал писать на нем игры. Скриншотов, материалов (*.bmp файлов, файлов проектов, исходного кода), gif анимаций, видеозаписей и прочего у меня накопилось столько, что начало напоминать "старый сундук без ручки" (Да, "и выкинуть жалко, и нести уже не удобно"). Все это по распихано по OneDrive, Google Drive, Яндекс диску, перепискам в соц. сетях, на жестком диске и даже сервере.
В общем, показать я могу не мало. Ведь до наступления третий фазы моего опыта создания игр - прошло не мало времени.
Я на столько был увлечен, что в какой-то момент так получилось, что создание игр для меня стало намного интереснее, чем залипание в них. Я практически перестал играть. Сейчас меня с трудом могут увлечь игры и лишь не на долгое время. Некоторые я "дропаю" спустя 5 минут "геймплея", потому что мне скучно и игра в этом вообще не виновата. А когда я не программирую - ощущаю дискомфорт, будто трачу время в пустую. Это становится большой проблемой во время, когда мне нужен отдых.
Напрягает и тот факт, что если я сажусь за чужую игру - в голове "плюс-минус" начинаю разбираться как реализована та или иная механика. И в какой-то момент загораюсь желанием создания чего-то, а игра "удачненько дропается" и больше я к ней не подхожу (Обычно, такие признаки называют игровой импотенцией, и наступают они после 30 лет, но программирование сломало все уже к 17-18 годам. В общем - у меня профессиональная деформация восприятия игр ;) ).
С данной ситуацией я совершенно отстал от игровой индустрии. Меня не заинтересовывали "прям" новые игры и я не следил за "мейнстримом". Да что уж там, я GTA IV - месяца 2 назад попробовал поиграть (Мне 27 "годиков" так-то, игра вышла очень давно, 2008 год аж! xD), но мы отвлеклись. Поговорим о том, что я создавал и на чем.
Для того, чтобы статья не показалась Вам слишком "душной", некоторые части ее я помечу так:
Почему так? Ну... я человек увлеченный и могу много говорить о языках программирования, а не игр. Кому интересно и это - можете почитать все, ну а кто пришел за статьей об играх - Вы ничего не потеряете, если пропустите этот кусок текста.
Borland Delphi, C++ Builder, Lazarus и Паскали, -"мать их"
Язык Pascal давно мертв, как и почившая компания Borland с ее Delphi.
В сообществе программистов считается "зашкваром" использование Pascal, Delphi и даже C++ Builder, но я порой "грешу" этим, скрывать не буду. xD
Уж очень я полюбил среду разработки Borland как первую в моей жизни.
Она приносит мне удовольствие и расслабляет после тяжелого дня. :)
Да и я не работаю программистом (от того я и "Nora Dev"), а программирую чисто для себя или когда кто-то попросит меня что-то "сбацать".
Первые игры были написаны как раз таки на Borland Delphi 7 и Borland C++ Builder 6. Давайте на них и глянем.
Игра Uix
Вот например, пусть и не самый первый проект (Не законченный. Да что уж там - я явно свернул куда-то не туда и Вы поймете почему xD ), но экземпляр интересный - Uix (версий было несколько, это же первая).
Создал я Uix на Borlnad C++ Builder 6.0.
На самом деле - это первый мой опыт перехода с Delphi на C++. Я до последнего недоумевал, почему код практически тот же, что на Delphi - я могу использовать в C++. В чем же тогда разница?
Я бы не опытен и библиотека визуальных компонентов сбила меня с толку, но тем не менее - минимально с C++ я познакомился тут.
Замысел был в том, чтобы сделать мультиплеерную игру в стиле JRPG используя TCP/IP сокеты.
Если "Марию" (см. тут) я рисовал как первого JRPG персонажа, то персонажи из этой игры - были второй "пробой пера", давайте я Вам их покажу (не судите строго, итак испытываю "испанский стыд" xD).
Что интересно, первыми были нарисованы предпоследний и 5-й персонажи, так как они создавались для другой программы и потом были перенесены сюда, но об этом в 3-й части статей. ;)
Рисование некоторых персонажей (в ускоренном режиме) для Uix игр (как я уже говорил - их было несколько) я даже записал и выложил в YouTube, правда сейчас эти видео скрыты, но я все равно дам Вам ссылки на них, если очень интересно ;)
В видео персонажи, что на рисунках - тоже были нарисованы мной. В последнем видео я и вовсе беру игру про "Марию" (из первой части этих статей) и начинаю адаптировать ее под этот "тайлсет". Это очень смешно выглядит сейчас. xD
Думаю, рисунки, что были на видео - тоже стоит показать (кроме второго, у меня он не сохранился).
Оба рисунка были нарисованы в Paint по пиксельно.
Да, я долбанутый человек, который часами вырисовывал каждый гребаный пиксель этих персонажей! И что Вы мне сделаете? xD
После ручного рисования я даже создал программу, которая генерировала персонажей (такой вот конструктор JRPG персонажей).
После того, как я запустил свой Uix 1 - решил проверить на компьютере друга. И тут я заметил очень неприятную особенность: код C++ Builder 6.0 требовал vcl60.bpl и rtl60.bpl библиотеки в системе, которые поставлялись со средой разработки (Тогда я не знал, что библиотеки можно зашить в приложение - выключив динамическую линковку в проекте) и естественно у других людей его не было в наличии.
Огорчившись данным явлением - я решил перенести код на Delphi.
Как Вы уже, наверное, поняли - в Uix 1.0 не было игры. Я там создал: плеер; сервер TCP/IP; терминал; браузер, редактор html страниц, но не игру. Получилась мини оболочка наподобие Windows.
Потому я и сказал, что свернул - куда-то не туда. Ооооочень куда-то не туда ;)
Затем я начал переписывать игру целиком, так и вышел Unix 2.0, который Вы можете посмотреть на следующих "скриншотах".
Uix 2.0 я пытался допилить до состояния игры, даже попробовал сделать конструктор уровней.
Но, как видно - получилось так себе. xD
Не смотря на передачу данных, сообщений по TCP/IP и анимацию персонажей - игрой Uix 2 так и не стала.
Кто бы, блин, сомневался? xD
После этого, я начал делать Uix 3.0. Он игрой тоже не стал, но я пытался заставить себя его допилить тем, что выкладывал процесс разработки на YouTube. Видео сейчас не доступны, но там такая "нудятина", что показывать это не вижу смысла. :)
Знали бы Вы - чего мне стоило восстановить Uix 3.0, чтобы показать Вам... В общем, совет дня - не называйте русскими буквами никакие файлы, которые участвуют в работе приложения, чтобы через 10 лет не встревать в аналогичную ситуацию, когда код есть, но он не пашет просто так! ;)
Как Вы уже, наверное, заметили в Unix 3.0 была возможность даже менять тему оформления.
Так и загнулся проект Uix с концами.
Но на этом написание кода не ограничилось.
Игра AniDroids
Вдохновленный все тем же Dwarf Fortress - я решил сделать игру наподобие - Kiberium (из первой части статей), но тут я уже стал играться с генератором случайных чисел.
Игра генерировала случайный остров, состоящий из областей с несколькими спрайтами (мини сцены).
Генерировался мир очень долго, программа при этом зависала и не отвечала. На генераторе вся игра и кончилась.
Если присмотритесь - то увидите, что я даже написал сообщение во время генерации мира: "Генерация мира не простой процесс, потому программа может зависнуть. Это не значит, что она "заглючила", просто она не успевает показать все и одновременно записывать Ваш мир в файл. Потому не пугайтесь. Когда все закончится - игра откликнется и покажет результаты!", правда - там написано это все очень безграмотно (тут я немного подправил текст. Считайте это "авторской версией") ;D
Однажды я решил возродить Uix, но сразу принялся за RPG составляющую, в которую входили элементы песочницы. Для разработки использовал Lazarus.
Новая попытка с Uix
В игре работал джойстик, но вот с логикой отрисовки игры - были явные проблемы. Персонаж мог стоять за стеной, но при этом быть поверх нее. Обнаружив, что игра на windows - медленнее, чем на Линукс и попытавшись это исправить - забросил проект.
Игра "Соланис расцветет"
Был и такой период - когда я увлекался играми для консоли (или терминала), потому на FreePascal я писал именно такие игры. В основном это были рогалики, но та, что я покажу сейчас - песочница с тем же генерируемым миром.
Забавно осознавать тот факт, что на тот момент - делая выполнение 4-х операций в одном цикле я считал их как 4 вычисления (или даже 4 потока). Программа быстрее не генерировала, но я думал иначе. Юность. :)
Задумка была интересной, учитывая, что консоль работала только пошагово (захватывая клавишу и только после нажатия ее - что-то происходило), ДНК я делать начал (рисунок 2), но самих существ "не завез". Игра скончалась быстрой смертью - я переустановил ОС и забыл сохранить исходник.
Да, я "долбаящер" в этом плане. Кто сносит ОС - не сохранив файлы? Может быть что-то хорошее бы и сделал. Но увы.
Это не последняя консольная игра, написанная на Pascal, и сейчас я расскажу о игре на Pascal ABC.
Игра "Ичи - жизнь коротка" (она же Dragon Night)
Как-то раз я посмотрел одно аниме "Пластиковые воспоминания". Тогда это аниме оставило на мне большое впечатление (сейчас я его смотреть не могу, слишком уж много там "стекла") и я начал делать игру на его основе. Игра - сплошной "испанский стыд". Даже тогда я осознавал это и не продолжил ее доделывать, но как "фанфик" - "почему бы и да"? xD
Игра повествует о роботе, который только начинает свою "жизнь". Замысел был странный и неоднозначный. В моей задумке было ограниченное время и заряд батареи персонажа, поэтому он мог бы что-то успеть сделать, а что-то нет. Ну и зарядку - никто не отменял. По той же задумке в определенные часы игрового времени - должны были происходить те или иные события. Мир должен был как бы "жить" в своем ритме. Некоторые события были бы судьбоносными, да и вариация взаимодействия позволяла бы нелинейно проходить игру. Но "словив испанский стыд" от своих же "реплик" (которые Вы, думаю, уже заметили на анимации xD ), что-то я проект забросил. К сожалению - *.pas файла у меня уже нет и думаю, возможно, даже к лучшему. xD
Почему к лучшему? Ну... тогда я только начинал писать код, мне было лет 16-17 и я не умел использовать циклы! Ну... как не умел... Я не знал о их существовании (Да, это тупо xD ) и по советам с форумов я использовал инструкцию goto, которая мало того, что создавала бесконечный цикл вместо while, так еще я умудрялся делать игру нелинейной за счет него! Представляете - какую паутину из кода я там написал? "Там черт ногу сломит". Легче переписать игру и забыть. :)
Игра SEKAI NO OWARI Level
К этой игре не было смысла прилагать анимацию или скриншоты (ритм-игра идет с музыкой), потому я записал видео геймплея.
Предыстория этой игры немного необычная. Был у меня как-то друг (общались по сети только), ну и он загорелся идеей тоже программировать. Я решил его научить программировать на Delphi 7. В качестве "демки" (чтобы он мог изучить код) - я создал эту игру (и да, она законченная). Игра маленькая, в ней всего один уровень. Слева движутся блоки и если блок касается нужной ячейки - надо нажать соответствующую клавишу (они обозначены в правом верхнем углу). За попадания получаешь очки, а блок пропадает (исключение - голубой блок, его можно нажать 2 раза).
Сейчас смотря на эту игру - видно, что графика глючная (прозрачность углов блоков исчезает), а блоки пропадают без эффектов, а порой и раньше нужного блока (даже если попадаешь).
Причина этому проста - я использовал TImage компоненты, и двигал их по экрану. Тогда я не знал, что в Bitmap есть Canvas и в нем можно рисовать эффективнее, быстрее и гармоничнее. ;)
Друг этот, на лето уехал в деревню (он был на 2 года младше меня) и больше не появлялся на связи. Не знаю что с ним приключилось. Может быть он просто на меня забил (если да - зла не держу), но игру он так и не увидел.
Тесты 3D на GL Scene
Есть некая библиотека, созданная для Delphi и Lazarus под названием GL Scene. Я просто на тот момент попытался перейти на 3D, но OpenGL для меня казался "лютым", а в DirectX я даже не смотрел (не помню почему) и я наткнулся на библиотеку GL Scene. Ну... не совсем на нее. История в какой-то мере повторяется, так как это была статья по созданию Minecraft, но уже в 3D и на Delphi 7. Я подумал - "во круть", я обязан попробовать. xD
Сейчас этот сайт я уже не найду (возможно он "ушел в историю"), но я помню что на скриншоте был "Стив" с переднего вида, паук, крипер и стояли они на небольшом кубическом участке из травы, земли и "бедрока".
Я скачал пример его, почитал статью. Открыл пример... и... мой комп решил послать эту игру на 3 буквы. Тогда у меня был нетбук, очень слабый и даже маленькая область этого примера нагружала процессор так, что даже повернуть камеру - было проблемой.
Но я все равно прошелся по области, попробовал что-то сломать и понял, что ломать блоки нельзя. Было немного разочарующе, но советы из кода помогли мне по делать другие 3D игрушки. xD
Игра Comsos
После того, как я наигрался с тестами - принялся писать осмысленную игру.
За основу взял игру "Corneroids". Игра такая же песочница, как Minecraft, разница только в том, что можно строить космические корабли и "бороздить просторы вселенной".
В моей игре была проблема с использованием мыши. Нет, ну уничтожать блоки мышью было не сложно. Проблемой было ставить блоки под ней. Ну и я... сделал костыль. По анимации видно, что есть вверху слева панель с кнопками в виде стрелок. Они и управляют перемещением каретки для постановки блоков. На Enter - блоки ставятся. Так же каждая стрелка подписана - на какую клавишу - куда каретку можно двигать и эти кнопки вращаются с персонажем.
Стоит ли говорить, что игра зашла в тупик (вместе со мной)? :)
Игра (или даже локация) NoChessLogic City на Delphi с OpenGL
Эта игра является "нашлепком" на другую игру (ChessNoLogic), о которой я поведаю дальше. Суть была в том, что эта сцена должна была открываться при входе в город или в режиме битвы. Ландшафт считывался с файла bmp (рисунка), и в зависимости от яркости белого цвета - строил горы по диагонали. Так и получилось, что горы не ровные и угловатые.
А сколько времени я убил на то, чтобы не проваливаться в текстуры - ууу
Это был интересный опыт, но игра загнулась после "Нового года" (вместе с клавиатурой на планшете, что прискорбно).
Игра ChessNoLogic
Как я уже говорил - игра должна была иметь режим сражения и вхождения в город. NoChessLogic - это попытка создать что-то похоже на "Героев Меча и Магии 3", но играть бы приходилось за шахматные фигуры. Идей было много - но реализовать я их не смог. Кстати - тут я впервые программировал "туман войны" и это был хороший опыт. Игру я пытался еще перевести на Python и C++, но и эта версия (та, что на анимации и изображениях) - уже не первая. Первая была на Delphi 7.
Игра AstraAttack
Когда я узнал о Embarcadero и их Delphi XE, который может писать приложения под андроид - я очень заинтересовался этим и попробовал создать игру, которая работал бы и на Windows и на Android (Библиотека Firemonkey стремится к этому). Игра называлась AstraAttack. В ней должно было быть 2 расы "Астры" и Люди. Чем-то должна была напоминать Warcraft III, но с уклоном RPG составляющей. Героем нужно было бы управлять напрямую, а давать команды поселению - опосредованно.
Первая графическая игра на Pascal ABC.
Однажды я решил под засесть за Pascal ABC и начал писать игру про того же Ичи. Замысел был в том, чтобы он умер и очнулся механическим роботом. Сама игра заглохла на моменте - когда производительность Pascal ABC начала сильно проседать. Но игру я еще долго пытался создать на других языках. Переписывал даже на C++ с SDL1.2.
C/C++/C# "эволюшн"
На C++ с SDL1.2 я много чего программировал. Мне нравилось, что игры можно было компилировать как под Linux, так и Windows (даже портировались на Android). Но вот что очень не нравилось - это "дампы памяти", которые сложно было отследить. xD
Как я уже говорил - Life Quest я переписывал и на C++. Вот Вам та же игра, но на C++.
Так же баловался с редактором картинок, прям написал программу, которая генерировала попиксельный массив из кода C++ (она была и на Android портирована).
Следующая игра дальше заставки не ушла. Примечательна она тем, что однажды я запустил ее из под TTY (консольного режима Linux), что привело к очень забавному рисунку (рис. 2).
Neo Life была вдохновлена игрой Might & Magic 4. Мне хотелось создать 2D мир, в котором можно гулять как в 3D. Что-то даже получалось. Была смена времени суток и вид можно было менять на RogueLike (на картинках можно увидеть крестовину - это порт на Andoid).
До того, как заняться OpenGL на Delphi - я игрался с ним на C++ с FreeGLUT. Было интересно. Такой вот куб сделал, который потом использовал как логотип одной программы.
Еще один интересный экземпляр. Писал я его на C#. Задумка была в том, чтобы мы создавали мир по атомам, потому я собирался внести в игру всю таблицу Менделеева с описанием всех веществ. Слишком амбициозная идея была.
Python и PyGame
Python3 с PyGame тоже развлекли меня достаточно. Так я ресурсы Uix попытался использовать для отдельной игры про волшебницу.
Так же на Pygame попытался перенести ChessNoLogic.
Заключение
За все время, что я программировал - много каких игр пытался написать. Исходников некоторых не осталось и показать мне их не удастся, но сам процесс - неплохо набивал мне руку и развивал мой мозг. Может игры небыли закончены, зато сколько опыта я от них получил - решая те или иные задачи. Навыки с того периода до сих пор ускоряют любой процесс разработки, будь это код для себя или для кого-то.