Как программировать игры?
===========================

 Я с детства хочу делать игры, но моя проблема в том, что я не понимаю как именно их делать. Имею опыт в программировании, хорошо знаю основы C++, немного Python, чуть-чуть C#, но я даже понятия не имею, как программировать игры.   
  

Недавно я посмотрел фильм Indie game: The movie и захотел сделать 2D игру. Я побродил по просторам интернета, но так ничего и не нашел (хороших уроков или объяснений). Самое лучшее, что я нашел - это просто куски из кода, с объяснениями типа: "А вот здесь осуществляется физика". Когда я находил исходники разных игр, то я просто не мог понять: почему так?  
  

Думал и над тем, чтобы работать на каком - нибудь движке(например Unity или Unreal Engine 4). Но посмотрев на крутых Indie разработчиков из фильма, которые сделали все сами, мне кажется, что я испытаю большее удовольствие, сделав все сам. Когда делаешь игру на "готовеньком", кажется, будто доделываешь то, что уже почти сделано. Было бы здорово: сделать игру самостоятельно, например, как Below, Limbo, Spelunky (новая версия) или те же игры из фильма.  
  

Прошу, посоветуйте что-нибудь. Как быть? Может, я в чем-то ошибаюсь? 

 Стоп-стоп-стоп! Давайте попорядку. А то сейчас начнется.  

Ваш вопрос не корректный. Вы задаете его так, как будто наигрались в Батлфилд 3 и хотите сделать такую же игру.  

1) Идете сюда [en.wikipedia.org/wiki/Game\_programmer](http://en.wikipedia.org/wiki/Game_programmer) Видите, что разных направлений разработки довольно много.  

2) Берете Mathematics for 3D Game Programming and Computer Graphics, Third Edition и 3D Math Primer for Graphics and Game Development, 2nd Edition. Если вам что-то не понятно, то ищите другеи способы вспоминания 1-2 курса универа: линейную алгебру, основы матана и прочие матрицы.  

3) Все игры уже лет 10 строятся на том, что основной единицей геимплея является RigidBody (абсолютное твердое тело). Идете сюда [www.cs.cmu.edu/~baraff/pbm/pbm.html](http://www.cs.cmu.edu/~baraff/pbm/pbm.html) Качаете, читаете. Дальше качаете исходники какого-нибудь Box2D. <https://code.google.com/p/box2d/downloads/list> и [www.bulletphysics.com/ftp/pub/test/physics/papers/...](http://www.bulletphysics.com/ftp/pub/test/physics/papers/IterativeDynamics.pdf)  

4) Ну и нетленка [blog.gamedeff.com/?p=64](http://blog.gamedeff.com/?p=64) 

 Да ладно, такое ощущение, что тролли не только задают, но и отвечают. Как так: вы знаете С++, но не знаете как делать игры? Как загружать изображения в память знаете? Как писать классы и создавать объекты знаете? Как наладить взаимодействие объектов тоже знаете? Тогда в чём вопрос вообще?   

Если вы не понимаете как именно работать с графикой, то подсказываю: никто не гонит использовать нативный Direct3D. Берите любой подходящий фреймворк и в путь. Для C++ могу посоветовать, Например, HGE. Я сам с него начинал. Он уже не поддерживается, насколько я знаю, но форум жив, а энтузиасты потихоньку его допиливают. Примеры есть, да и сам по себе он достаточно простой. С его помощью вы сможете загружать изображения (в том числе анимированные), а так же манипулировать ими. Для создания 2Д игры самое то. В общем посмотрите примеры и сами попробуйте.  

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

И игра - это не обязательно физика. Не надо сразу ломиться читать алгебру и начинать писать свой физический движок. Изучайте всё по мере надобности. 

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

 Секрет успеха: [правило 10000 часов](http://www.forbes.ru/forbes/issue/2009-04/7255-pravilo-10000-chasov) 

 Если нужно сильно оттянутся - ставь древний виндовс, и пиши напрямую в видеопамять, режимы EGA, VGA, SVGA, там познакомишся напрямую с VSYNC, графическими бэк-буфферами, напишешь свой метод putPixel(x,y,color), затем найдёшь где-то реализацию drawLine, которая будет использовать putPixel, потом другие методы и графические эффекты (вывод графиков придуманных функций), потом распарсишь и выведешь bmp, создашь библиотеку спрайтов, 33-м прерыванием создашь курсор мыши, навесишь спрайт, который может бытоь анимированным, будешь двигать его мышкой, потом найдёшь статью про изометрию, и создашь карту уровня, и промучаешся над тем чтобы плавно скроллить, и только потом у тебя появится Свой класс Enemy, у которого будет life=100;weapon=randomLowWeapon();.. путь джедайского маст-дая. так как ты и хотел, с нуля. 

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

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

Хотите делать игры учитесь программировать и ищите работу в данной области. Набирайтесь опыта и лет через несколько пробуйте сами. А инди геймдев не так прост как вам кажется. Золотых гор там нет. 

 А что именно вы не знаете, если знаете С++?  

С чего начать?  

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

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

 Еще книженция. Сам не читал, но выглядит интересно, вроде по делу все   

[gameprogrammingpatterns.com](http://gameprogrammingpatterns.com/) 

 Поберегите свое время и силы. Используйте движки а-ля Unity. 

 Даже я со своим небольшим опытом с могу сделать простую игру типа "Морского боя".  

Единственный ответ думайте, а решение найдётся. 

 почему мне кажется что тут сплошные тролли задают вопросы? 

 Простенькую игрушку: Multemedia Fusion 2 

 Для начинающих программистов рекомендую бесплатный курс "Программировать может каждый" [pmok.ru](http://pmok.ru)