По моему мнению, если у вас есть идея игры в вашей голове, не имеет значения, с чем вы ее пишете (сначала), C / C ++, Java, пером и бумагой ... Выберите язык, который вы ' почувствуйте себя комфортнее, создайте прототип и протестируйте свою игровую идею, как только вы наберете черновой набросок и узнаете, что вам нужно сделать, выбросьте прототип, спроектируйте игровой процесс и архитектуру, а затем начните кодировать реальную вещь. Не оптимизируйте до тех пор, пока у вас не будет работать большинство или все функциональные возможности (в общем, всегда есть мелкие ошибки, на которые нужно охотиться), и вы фактически не увидите, где находятся узкие места.
Я видел, как это происходит снова и снова, программисты игр являются одними из худших преждевременных оптимизаторов, которые пытаются выжать несколько циклов из чего-то тривиального, упуская при этом самые большие узкие места, а затем оптимизируют еще немного (в неправильном месте). ). Я также был признан виновным в этом много раз. Я бы сказал, не выбирайте C ++ (или Java в этом отношении) из-за скорости, вы можете получить очень хорошую производительность от обоих, если все сделано "правильно". При необходимости вы всегда можете переключиться на другой язык, если сам язык действительно является узким местом или действительно мешает вам что-то делать. Java не работает автоматически медленно, а C ++ не работает быстро, вы можете (очень) ошибиться с обоими. Раньше я болел за C и C ++ во всем, но после долгой работы с Java я действительно не пропускаю столько хлопот.
Существует множество (уже оптимизированных и довольно простых в использовании) игровых движков, доступных для обоих языков, так что нет необходимости запускать свои собственные ... если вы действительно этого не хотите. По моему опыту, большинство «программистов игр», увлеченных своим хобби, склонны больше интересоваться технической стороной, чем реальной игрой (включая меня);) Как только все технические препятствия пройдены, и вы получите эту замечательную модель / кучу спрайтов / Эффекты частиц работают с некоторыми шейдерными эффектами, энтузиазм, кажется, угасает ... Но не позвольте мне вас обескуражить, программирование игр очень увлекательно, даже если вы на самом деле никогда ничего не заканчиваете (я бы не назвал ничего своим проекты завершены).
Я давно не кодировал ни одной игры, но для C ++ 2D SDL - хороший кандидат, другой вариант может быть SFML , или если вы хотите прикосновение более низкого уровня с OpenGL вы можете попробовать использовать GLFW + SOIL + некоторую аудиобиблиотеку. Для полноценного 3D я бы сказал, попробуйте либо OGRE , либо Irrlicht + Irrklang (возможно, есть и другие).
В Java есть как минимум Slick2D , Golden T Game Engine и для более низкого уровня доступа LWJGL (хотя я думаю, что вы можете получить доступ к LWJGL через Slick2D также). Для 3D кто-то рекомендовал мне jMonkeyEngine , но я никогда не пробовал.