avatar

The story of my life

опубликовал в Как я стал разработчиком игр
The story of my life Всем привет! Признаться, изначально не хотел участвовать в конкурсе, но чем чёрт не шутит? Фоток не имею, имени не скажу, на призы не претендую, но может кому-то понравится моя прохладная история.

Началась история, собственно, в 2007 году. Тогда (спасибо одному чуваку) мне в руки попала книжка о GL Scene (такая реализация OpenGL для дэлфи). Собственно, скачав дэлфи, я начал вписывать в редактор код, который я совершенно не понимал. Программы отказывались работать, выдавая тонны ошибок, и тогда пришло первое озарение: нет смысла делать игру, если ты не понимаешь, что ты делаешь. Создание игр было отложено в долгий ящик, и я начал учить паскаль.

В 2008 году я начал проклинать паскаль и купил книжку по Borland C++ Builder (она у меня до сих пор есть, ха) и начал писать на С++. Уже тогда появлялись идеи по созданию игр, некоторые я даже доделал (сапёра с полем 10*10, например). Но, пообщавшись с продвинутыми людьми, я понял, что билдер – не труЪ, и в 2009 году я покупаю себе книжку “Visual C++ 6 Учебный курс”. В те времена эта книжка взорвала мне мозг. WinAPI (Windows API) и MFC (Microsoft Frustration Foundation Classes) сами по себе не самые удачные штуки (шутки?) от Microsoft, но моими неопытными глазами это месиво из классов, циклов и непонятных макросов казалось всего лишь ГРЁБАНЫМИ БУКВАМИ!

Вот эти ребята

Здесь нужно сделать небольшой скачок во времени и переместиться сразу в 2010 год. Тогда я записался на компьютерные курсы по С++, так как желание выучить его было огромным, а самому это сделать очень трудно. Про сами курсы стоит отметить только одно – мне попался реально шикарный препод. Он натолкнул меня на ещё два озарения. Первое – надо дебажить свой код. Я писал проги, но он постоянно заставлял их падать. Я матерился про себя, а потом сидел и часами переписывал всё. Второе озарение не заставило себя ждать – я совершенно не знал математики. Тогда это был 9-ый класс и решить задачу на пересечение окружностей я не мог, потому что не знал векторов. С того времени я стал серьёзно относиться к обучению в школе и вне школы.

После успешного окончания курсов я пустился во все тяжкие. Сидел дома, забыв про весь окружающий меня мир (последствия этого печальны, но давайте не будем о грустном), и просто программировал. Для себя. Примерно в то же время препод меня ткнул носом в C#. Сперва я не принял C# всерьёз. «Мышкой перетягивать компоненты на формочку? Не труЪ», — заявил я, но потихоньку всё-таки начал подучивать и его. Скорость разработки довольно «весящий» фактор, хотя С++ оставался приоритетнее.

Следующий чекпоинт это 2011 год или начало 10 класса для меня. Тогда я засел за изучение голого OpenGL и даже пытался написать простенький движочек на его основе. Его я, кстати, написал, но поскольку я не умел хардверный рендер (FBO и VBO) то уже на 10000 вершинах (с текстурами) движок выдавал 22 fps. Это меня огорчило. Сильно огорчило. Как итог – я опять заперся дома и стал учить С++ ещё глубже.

double (*(*f)(double(*)(double)))(double)

Если раньше это казалось магией, то теперь для меня это вполне объяснимая вещь. Виртуальные деструкторы, указатели на функции, указатели на указатели – всё это стало обыденностью. В конце 10-го класса я впервые пробую писать на ассемблере…

Вот так кстати выглядело создание списка вызова для куба в том движке :)

Ассемблер стал для меня ещё одним чекпоинтом. Не в том смысле, что это очередное достижение, просто после этого С++ стал казаться не труЪ. Впрочем, я быстро понял, что писать на ассемблере не то что игры, даже программы — жесть. Это заставило меня вернуться к С++ и вновь начать считать его труЪ. Тратить месяцы на разработку программ на ассемблере могут только крайние извращенцы (ну и писатели драйверов). За лето я успешно написал вторую версию движка на OpenGL (иходники ещё есть, но мне крайне стыдно за них) для кое-какой работки. На этом с OpenGL можно было покончить, но…

Но в начале 11-го класса я взялся писать физический движок. Я спотыкался, переписывал его, удалял, начинал заново. Движок глючил, мячи, отскакивая, улетали в открытый космос. Или не улетали — они просто проваливались под землю. Таким образом ко мне пришли ещё два озарения. Первое: нужно использовать блок-схемы и просто схемы. Они упрощают жизнь. Второе озарение пришло совсем недавно, но я считаю его ключевым: не изобретай велосипеды. Хорошо знать как велосипед устроен и хорошо, если ты сможешь сам велосипед построить, но ты явно не сделаешь велосипед лучше фирмы, которая делает их уже 100 лет. В итоге, к концу 11 класса, движок был доведён до «кондиции», я успешно его удалил и забыл про OpenGL. И в свой день рождения я сидел и писал движок под DirectX (вот ведь я задрот, да?). Движок этот, кстати, для игрушки, над концепцией которой я сейчас работаю, так что скоро может будут наработки :)

Ещё немного обо мне
Отмечу ещё, что за эти 6 лет я успел попрогать на ActionScript (пытались с друзьями сделать игру для ВКонтактика, угасло из-за недостатка энтузиазма), Java (API Android'а, но его я просто не смог пережить, потому что он ещё кривее WinAPI, а одних кривых апей мне за глаза хватило), кто-то пытался меня посадить на Васик, но после Си он казался ущербным. Как-то даже писал на PHP, но не хочу вновь возвращаться туда.

К счастью, ни одно моё «достижение» не сохранилось и я никогда не выставлял эти «достижения» на показ. Почему? Потому что я был неопытным и показывать там было нечего. Назвать меня полноценным гейм-девелопером трудно, но вот новичком — с лёгкостью. Надеюсь, кому-нибудь понравится, а кто-то может узнает для себя что-то новое. Всем удачи!
+3
0
366
  • 8 комментариев

    avatar
    Мои глаза! Они отдыхают…  Ещё не прочитал историю, но приятно, что всё оформлено как надо.
    avatar
    Хе :) Спасибо, я старался :)
    avatar
    Нравится
    avatar
    Одна из лучших историй.

    Только один совет. Не считай API разных фреймворков в таких языках как Java, C++, Objective-C и др. «кривым». Его писали умнейшие люди. Просто ты, из-за маленького опыта, еще не до конца понимаешь API. Со временем будешь смотреть на эту статью, как на свой первый проект ;) (программисты поймут :) )
    avatar
    Эх, товарищ, кривость WinAPI не секрет для любого, кто под него писал. Не стану спорить про «писали умнейшие люди» — я просто не знаю, кто их писал.

    Пример:
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

    В данном случае hPrevInstance это экземпляр окна, породившего новое окно, но… Использовалась эта переменная только в 16-битных виндах, а потом её оставили для обратной совместимости. К Windows 7 мы имеем: 16-битные приложение элементарно не запускаются на семёрке, hPrevInstance никому не нужна, но в вызове WinMain она до сих пор есть. GTK+ и Qt тоже не идеальные фреймворки, но я бы предпочёл их, нежели WinAPI :)
    avatar
    На счет WinAPI не спорю. Там очень много оставлено лишнего для обратной совместимости. Я имел ввиду вообще API в разных языкам программирования.

    Я, например, сейчас в основном программирую на Objective-C. Мне тоже не очень нравятся некоторые моменты в разных фреймворках. Но при этом я бы не стал ничего называть «кривым». Мы в любом случае не знаем всего, что происходит при разработке языка. Уверен, разработчики ЯП очень активно обсуждают публичное API и стараются его сделать как можно проще и функциональнее.
    avatar
    ЯП и API это разные вещи. Кривость С++ это отдельный холивар :) Я могу легко судить о кривости чего-то если знаю (видел, нашёл) более хорошее решение. В данном случае bass — хороший фреймворк, GTK+ и Qt тоже. Но некоторые (Android API) просто поражают неочевидностью :)
    avatar
    ПАЦАНЫ, Я КОРОЧЕ ШЕЛ СЕГОДНЯ ПО ОФИСУ И УВИДЕЛ ПРОГЕРА В МАЙКЕ «С# IS THE FUTURE», НУ Я ПОДСКОЧИЛ К ЕГО КОМПУ И РЕЗКО НАПИСАЛ «std::cout << std::endl;» И ПОЯСНИЛ ЭТО ОДНОСТРОЧНЫМ КОММЕНТОМ, ПОТОМУ ЧТО Я УГОРЕЛ ПО ПЛЮСАМ, ПАЦАНЫ ДУХ ООП ЖИВЕТ ТОЛЬКО В МНОЖЕСТВЕННОМ НАСЛЕДОВАНИИ, ГДЕ В ПЕРЕГРУЗКЕ ОПЕРАТОРОВ НА ОДИН ПАРАМЕТР МЕНЬШЕ, ГДЕ ЕБАШАТСЯ ПО СТАТИЧЕСКИМ МАССИВАМ, ГДЕ ПАЦАНЫ ЖИВУТ УКАЗАТЕЛЯМИ, ЧИСЛЕННЫМИ ЗНАЧЕНИЯМИ В УСЛОВИЯХ И ЕБУТ СБОРЩИКИ МУСОРА В РОТ! ТОЛЬКО С++, ТОЛЬКО ХАРДКОР!!! СТРАУСТРУП ХАРДКОР С++!!! пацаны ебашьте дельфикодеров, шарперов, пехапешников, жаверов, угорайте на компиляции в машинный код, любите Страуструпа, плюсокодеров и IDE! ГОВОРИТЕ ОТКРЫТО И СМЕЛО ПРЯМО В ЛИЦО! С++!
    Чтобы оставить комментарий необходимо .