Вспоминая прошлое. О том, что делали 5 лет назад

    В Украине есть такая интересная штука, как Малая Академия Наук. В общем, это что-то вроде конкурса проектов для учащихся по школам. Довольно интересные проекты попадаются, и об одном я вам сейчас поведаю.



    Проектик этот — мой, случайно напомнивший о себе, пока наводился порядок в книжном шкафу. Тема его, тогда, 5 лет назад, казалась ужасно крутой и звучала так: «Методы генерации игровых карт». Чуть выше пример того, что у меня получалось. Как видите, это стилизованные под рогалик примеры уровней какой-то там несуществующей игры. Но обо всём по порядку.


    Писалось всё это произведение в стареньком Dev-C++ версии 4.9. В общем, в то время я больше и не умел ничем пользоваться. Visual Studio я не признавал, так как он был громоздким, и создавал кучу каких-то файликов, а C++ Builder был необычен кучей открытых окон. В качестве магии, выводящей графику использовался QuickCG. Очень простая библиотечка — прослойка SDL — которую очень, наверное, умный человек писал для попиксельного вывода. Для создания old-school эффектов: огонь на пол экрана, эффект туннеля, raycasting, и т.д. К слову я и сейчас не знаю связки лучше за Dev-C++ и QuickCQ для того, чтобы учиться работать с графикой.

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

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



    Алгоритм был прост: сначала генерировали шум. Получалось скучная серая картинка. Если скучно и серо — значит нужно раскрасить. Добавляется цвет. Для этого яркость шума объявляется высотой, и в зависимости от высоты окрашивается пиксель. Какое-то время я думал добавить и уровень песка — но получалось не очень. Итого в результате имели место 4 биома: вода, трава, горы и снег.



    Потом добавлялись объекты, а именно деревья, города и реки. С деревьями всё просто: берем случайную точку на траве и сажаем туда дерево. На карте они обозначены тёмно-зелёными точками. Потом города. Они делались так же как и деревья, но могли располагаться возле воды, и иногда на траве и в горах. Обозначались они коричневыми кружочками.



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

    На этом возможности генератора глобальных карт заканчивались. Идём дальше. Карты местности я делил на 3 вида: леса, водоемы и города.



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



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



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

    И напоследок остались специальные карты, к которым я относил специальные зоны, такие как подземелья, пещеры и лабиринты.



    Начнем с самого простого. Пещеры с самого начала заполнены непроходимой породой. В центре ставим пустоту и двигаемся в каком-то направлении. Например направо. Потом двигаемся вверх. Потом ещё куда-то. И так раз под 100. А потом становимся в центр и начинаем всё сначала. Через итераций 20-30 получим пещеру.



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



    И напоследок лабиринт. Есть много случаев генерации лабиринтов: рекурсия, краскала, прима, нейросети. В моем случае использовался рекурсивный метод, стыренный с глубин интернета. Выбираем точку, выбираем направление — идем, выбираем направление — идем, не можем идти — возвращаемся назад. Несложно, но чтобы понять как оно работает у меня ушло много времени.

    В общем проектик больше ничего не умел. Он не сохранял карты, он не мог отрендерить их в bmp., он мог только генерировать карты и сразу же их показывать. Маловато конечно, но для меня, того времени это было нечто. Вот такое было какое-то время увлечение. А потом появился raycasting типа Doom-а с брожением по лабиринту, потом генератор стал показывать в 3d и другие измерения. Но об этом как-то в другой раз.

    На этом всё. Спасибо за внимание. Живите и процветайте.

    P.S. Привет лицею!
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 39

      +7
      Передо мной сейчас тоже стоит задача динамической генерации похожих карт. И взявшись за это дело, подгоняю пробелы в своей математической и алгоритмической подготовке.
      Так вот, то, что Вы делали пять лет назад заслуживает уважения!
      И тем более, глядя на теги — в таком возрасте.
        +2
        Спасибо на добром слове. :)
          0
          Я однажды первое место в Малой Академии Наук занял. Классные тогда времена были
            0
            А я не помню что занял. На жаль кое-что забывается…
              0
              в какой сфере?
                0
                Секция: Информатика
                Подсекция: Игровые программы
                Год: 2010
            • UFO just landed and posted this here
              +3
              Очень интересно! Вам стоит поблагодарить преподавателя или за тему, или за то что он её поддержал. В моём случае всё обходилось базами данных, с которыми я и умел работать, но не понимал зачем они нужны)
                –24
                НА Украине ;)
                  +10
                  Очень спорно. Давний спор. По-украински я бы сказал «на Україні», но по-русски я предпочитаю «в Украине».
                    –2
                    Никакого спора нет. И по-украински, и по-русски правильно употреблять предлог «в».
                      +4
                      Нет никакого правильно и не правильно, есть только сложившаяся традиция, литературные и иные источники, которые оба варианта приводят как возможные.
                      Устоявшаяся же форма (в русском языке, да и то, «устоялась» она в последние пару веков, у того же Пушкина употребляется как «в» так и «на») — «на Украину».

                      Для ознакомления: gn.org.ua/in_ua

                        +8
                        неудержусь
                        image
                          +2
                          В яблочко!
                            –4
                            Ой, да ладно! В этом году вполне даже последний лох мог себе позволить отдыхать у нашей Затоке. Цены куда-то упали, и мы их не смогли найти.
                          0
                          Интересно, почему, когда посылают — НА трибу и в ЖО?
                        +2
                        Хорош тролить!
                        bit.ly/V_Ukraine
                        0
                        Тема его, тогда, 5 лет назад, казалась ужасно крутой

                        О, как это знакомо! Тоже лет 6-7 назад участвовал, даже занимал третье место. Названия тем тоже очень модные были…

                        А сейчас стыдно было бы даже кому-то показать)

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

                        К сожалению, есть один существенный минус — слишком много учителей в школе делали работы за своих учеников…
                          0
                          Я тоже 6-7 лет назад участвовал, даже ездил потом на «Эко-Софт», который в Киеве проходил и один год даже случайно на ISEF попал (где ничего не занял). Сейчас тоже было бы стыдно за те два проекта, но я школьником был, что с меня взять :)

                          А по поводу опыта вы абсолютно правы, после тех выступлений на всеукраинских конкурсах страх выступления перед большой аудиторией пропал практически мгновенно. Мне и сейчас не составит труда выйти перед толпой людей и что-то им рассказать.
                            0
                            После выступлений на подобных конкурсах, я понял, что отведённых 5-10 минут на презентацию мне ужасно мало. У меня всегда около 15-20 получалось…
                              0
                              Эко-Софт тоже хороший конкурс. Правда, помню до того момента, пока в НЭНЦе (место проведения) не сделали ремонт в общежитии, можно было зимой заснуть и утром не проснутся от холода…

                              Помню, там еще подарили дистрибутив 1С для разработчика за «лучшее инструментальное приложение» :) так ни разу его и не запустил…
                            0
                            Нормуль, сейчас со школьником по химии пишем. После защиты планирую рассказать что и как
                              +1
                              Visual Studio я не признавал, так как он был громоздким, и создавал кучу каких-то файликов

                              О боже, точь-в-точь такие же ассоциации вызывал тогда простой и понятный Dev-C++ и огромная и непонятная Visual Studio.
                              Почему-то очень трогательные воспоминания. Спасибо!
                                +2
                                Помню-помню, в 11 классе (2002 год) ездила на всеукраинский конкурс МАН. Мой проект рисовал график y=f(x), с разбором формул и всякими плюшками. И был у него один, но капитальный недостаток — он был написан на Turbo Pascal под DOS (Delphi я только начинала осваивать), а все до единого проекты в моей секции были как раз на Visual Studio, с оконными интерфейсами и кнопочками, так что выглядела я на их фоне довольно архаично. Ну, свой третий диплом я все равно оттуда увезла :-)
                                  +3
                                  Не знаю почему, но я в последнее время стал предпочитать консольные приложения оконным. Их легче писать, они по делу, ничего лишнего. Возможно в жюри был кто-то с такими же взглядами.
                                    0
                                    Хм, я в 11 классе представлял калькулятор, который целиком вырос вокруг разбора формул. Интернет тогда был модемный и редкий, потому алгоритм писался без знания понятий польской нотации. Я взял и подумал как эту задачу можно решить. Стал вспоминать школу, понял что сначала надо решать скобки. Сейчас не помню уже рекурсивный это алгоритм или нет был. Попутно он умел рисовать графики, я в институте продолжал пользоваться им с этой целью. Так вот, написан он был на VB.
                                    0
                                    Еще года не прошло, как я по своей работе «отстрелялся» на МАНе))
                                    На Всеукраинский этап не поехал, так как у меня был пик поступления в США (откуда, впрочем, и пишу:) ).
                                    Но я сумел-таки победить на другом Всеукраинском конкурсе от все того же МАНа «Будущее Украины».

                                    Вот что мне не понятно, это то как мой проект был оценен в 71 из 100 на городском этапе (70 — уже не третье место), а на республике он победил?)))
                                    Проект — автоматизированная система тестирования знаний (учеников) на веб-платформе. By the way, наверное, из-за этого проекта меня и взяли на стипендию сюда.
                                      0
                                      Круто, однако. Я сомневаюсь, что меня куда-то взяли бы с таким творчеством. Хотя в США же есть университеты по геймдеву…
                                        0
                                        Думаю, сейчас бы взяли. Квоты увеличились на иностранцев. А СНГшники в почете)
                                        0
                                        Городской уровень, если это не Киев, или хотя бы областной город, — это почти всегда очень странное оценивание. То ли проверяющие такие, то ли пытаются продвинуть нужных людей. Был с олимпиадами казус аналогичный (это было лет 13 назад, но не думаю, что что-то поменялось. Хотя не прав, поменялось, у нас сейчас проверка городский сразу областью проводится).
                                          0
                                          Я в Киеве защищался, там не так все гладко. Был случай, что дату одного из туров отборов на республику перенесли, а половине участников не сказали. При этом им поставили ноли, и сказали, что те могут написать тур в индивидуальном порядке, с другими задачами. И это был Киев несколько лет назад.
                                        0
                                        А я в 13 писал хреновенькие заставки на С++ и GLе в том же Dev-C++… К сожалению там нечем гордится :(

                                        Алгоритм генерации карт может и был написан очень давно, но во многих средах применений, не только в играх, он остается актуальным. Да и ничто не мешает генерировать 3d карты подобным образом. Хотя бы ландшафт.
                                          0
                                          Через год я сделал 3d ландшафт на GLе, как курсовой проект. Было 4 возможных цветовых решения. По-моему Земля (зелёно-синий), Лавовый мир (бурый), Инопланетный мир (фиолетовый), и ещё вроде, какой-то был, а может и не было. Можно было менять высоту, гладкость, наличие предметов на карте, включать/выключать небо.
                                          0
                                          Цветовое решение однако лучше, чем во многих рогаликах (лучше, чем вырвиглазный DF, например)
                                            0
                                            Всё равно, очень много недостатков. Например на карте с рекой — трава («у») слишком яркая получилась. Наверное следовало её немного покосить, хотя бы, для контраста. Или для леса («Т») сделать разные цвета крон. Изначально всё было вообще серым.
                                              0
                                              А чем DF вырвиглазен? Играю с неделю, через пару дней уже привык к ascii и никаких проблем не вызывает.
                                              0
                                              Оу, МАНовец :)
                                                +5
                                                Статья по оформлению уж очень напомнила Я обожаю программирование графики.
                                                Ту самую статью, которую незаслужено потёрли, а автору влепили ридонли режим.
                                                  0
                                                  Буду ждать продолжения рассказа!
                                                  Интересно, в современных 3д-игрушках, используются технологии, использованные автором? Навскидку, была двумерная походовая стратегия Heroes Of Might And Magic 3, где был генератор карт, с заранее выставленными параметрами. Вполне недурственно получалось.
                                                  И если представить, такой генератор миров в определенных ситуациях мог бы создать огромную реиграбельность. Например, в играх типа Diablo, всяких Fallout, Elder Scrolls, А может и в шутерах типа Сталкера. В принципе, есть законы построения городов, военных баз, пересеченной местности, есть постоянные законы разрушения всего этого со временем. Эх, мечты, мечты.

                                                  Only users with full accounts can post comments. Log in, please.