Программирование игр: C # или C ++? [закрыто]

15

Я решил, что действительно хочу заниматься программированием игр. Таким образом, вопрос: как 18-летнему человеку, который хочет изучать программирование с самообучением, какой язык программирования наиболее подходит между C # и C ++? (Должен сказать, что меня не волнует Unix, потому что я считаю, что Windows по-прежнему будет самой используемой ОС)

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

Ну, сначала я хочу сосредоточиться на основном, я должен сказать, что я предпочитаю C ++ только потому, что он мне больше подходит, но я должен учитывать, что я работаю один. Поэтому, даже если мне это нравится, это может быть не лучшим решением.

Я действительно не уверен, какой из них выбрать, я читал много тем на разных сайтах, и похоже, что C # становится все более популярным, чем C ++. Но да, я сказал, что хочу заниматься программированием игр. Поэтому мне нужно знать некоторые лучшие моменты, чем просто «C # проще из-за обработки памяти .net, а C ++ нет», потому что я не мог просто найти ее.

Matěj Zábský
источник
16
Вы также можете найти gamedev.stackexchange.com полезным.
Адам Лир
1
C # - это то, что я бы порекомендовал create.msdn.com/en-US/education/catalog/?devarea=6
Дэниел Литтл
2
Также смотрите здесь: gamedev.net
Патрик Хьюз

Ответы:

21

Я изучаю C ++, программируя игру. Это был очень приятный опыт. Я настоятельно рекомендую вам сделать то же самое!

Однако теперь я программист на C #, я знаю, что был бы намного более продуктивным, если бы C # был доступен в то время.

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

Я видел десятки книг, специально написанных по программированию игр на C #, и Microsoft прилагает немало усилий для улучшения его фреймворков, включая DirectX и XNA .

UPDATE : Вы можете быть заинтересованы от этого , а также. Это недавнее сообщение в блоге от Мигеля де Иказа .

ОБНОВЛЕНИЕ 2013-02-22 Microsoft планирует прекратить поддержку XNA .

user2567
источник
1
Поэтому, возможно, мне следует начать работать с SDL или что-то в этом роде с C ++, а затем перейти к C # в будущем ... просто похоже, что C ++ вроде бы заменяется на C #, за исключением создания движка. Почему так сложно сделать выбор? !
Chronix
2
Поймите, что C # отлично подходит для разработки игр, а не для переносимости на какой-либо игровой платформе или других проблем. В лучшем случае вы знаете достаточно игрового разработчика, использующего оба, и выбираете C ++ или C # в зависимости от целевой платформы.
Klaim
Кроме этого +1 очевидно. Лично я все еще предпочитаю C ++, но это только потому, что большинство моих проектов требуют некоторого низкоуровневого доступа по некоторым проектным причинам.
Klaim
12

Большинство игровых компаний используют C ++, возможно, со сценариями Python или другими языками, работающими в фоновом режиме. Более того, поскольку привязки для OpenGL и DirectX нацелены на C ++ (хотя я совершенно уверен, что вы можете делать столько же с Direct3d в C #), но для программирования игр C ++ является основным языком.

Я собираюсь дать вам справедливое предупреждение (и не позволяйте этому сдерживать вас), но 3D-графика может быть очень сложной. Новый Direct3D сделал его немного проще, чем раньше, но все же это хорошая математика (которая может быть довольно запутанной), и только сами библиотеки могут сбивать с толку.

Сначала я бы начал с чего-то очень простого. для 2d SDL (Simple Directmedia Layer) намного легче использовать (для чего-то вроде нисходящей игры), как только вы попадаете в 3D, я ЛИЧНО считаю, что OpenGL легче изучать (но это все мнение). MS имеет несколько хороших учебников / примеров в документации по DirectX SDK, так что стоит взглянуть на них. Учебники Nehe, хотя и немного устаревшие, все еще хороши.

но, чтобы ответить на ваш вопрос, все они обычно делаются на C ++.

user6791
источник
1
SlimDX предоставляет оболочку DirectX для .NET
Дэнни Варод
1
«Для игрового программирования C ++ является основным языком». Я бы не согласился с этим утверждением. Рынок игр намного шире, чем просто консольные игры ААА, - это гораздо меньший сегмент рынка, чем думают люди. Я бы сказал, что гораздо больше игр написано на таких языках, как ActionScript, чем на C ++
MattDavey
8

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

Если вы хотите начать делать игры, то я бы порекомендовал изучать C #. Если вы уже знакомы с основами C ++, у вас не должно возникнуть никаких проблем при освоении C #. Создание C # вашего инструмента имеет свои преимущества. Его легко изучать на языке (по сравнению с C ++), и он является «управляемым языком», что означает, что он автоматически выполняет установку памяти для вас (то, что многие начинающие C ++ и даже не начинающие, имеют проблемы с ). Это также дает вам доступ к Microsoft XNA Framework, которая делает для вас еще более утомительной работу. Это заставляет вас сосредоточиться на таких вещах, как игровой цикл и дизайн, не беспокоясь (слишком много) о том, чтобы заставить его работать. Правда, все эти инсталляции имеют свои накладные расходы, что означает, что вы, вероятно, не будете делать 3D-игры промышленного уровня, а только начинаете программировать, так что я сомневаюсь, что вы сделаете следующий Halo с ваших первых попыток. :)

Вот вскрытие от парня, который разработал успешную игру XNA (Weapon of Choice). Он подробно описывает, как использование C # / XNA сэкономило ему время на разработку, а не на использование C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

При этом вам следует потратить некоторое время, чтобы хотя бы узнать, как все работает в фоновом режиме. Как программист C ++ сделал бы это. Умение создавать игры на C ++ может облегчить присоединение к другой команде разработчиков игр (так как большинство из них работает на C ++), если вы хотите добиться успеха в игровой индустрии. Но даже если вы в конечном итоге никогда не используете C ++, знание того, как работают внутренние компоненты, может сделать вас только лучшим программистом, независимо от того, какой язык вы используете.

Система не работает
источник
Я полностью согласен. Проблемы управления памятью, с которыми вы сталкиваетесь с c ++, являются самой большой проблемой. Не было ни одной игры, над которой я бы работал, не было бы проблем с памятью, и я слышал то же самое от 20-летних ветеранов, которые создали десятки игр. Даже RAII и интеллектуальные указатели не решают проблему, поскольку у вас возникают проблемы с указателями, указывающими на старые данные, и проблемами с владением. Изучение того, как найти и исправить их, сделает вас намного лучше программистом, но это может привести к тому, что вы окажетесь в тупике на несколько месяцев при первом переполнении буфера и сбое игры в не связанной части.
Доминик Макдоннелл
Я хотел бы добавить к этому вопросу, что C # также имеет XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) в своих интересах. XNA гораздо проще подобрать, чем неуправляемый DirectX.
Вит Пи
1
@DominicMcDonnell: Вы можете иметь проблемы с памятью, сохраняя ссылки на вещи, спрятанные где-нибудь в управляемых средах исполнения, таких как C #, и когда он попадет, вам будет гораздо сложнее отыскать его, потому что вы не будете привыкать думать о времени жизни ресурса.
Ян Худек
@JanHudec, я этого не знал. Я полагаю, вы могли бы сказать, что заставить вещи работать проще и проще, но я-то гораздо сложнее отследить, и в некотором смысле привычки, которые язык позволяет вам создать, мешают.
Доминик Макдоннелл
3

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

С C # вы можете развиваться гораздо дольше, и в нем наверняка есть несколько удивительно хороших движков. Оба эти языка являются хорошими для программирования игр: если вы ориентируетесь только на платформы Windows / Xbox, у вас будет особенно повод склоняться к C #.

Я полагаю, что вы должны изучить язык OpenCL или CUDA, некоторый язык GPGPU. Лично я предпочитаю OpenCL, поскольку он, вероятно, переживет и продолжит расти, это в основном просто стиль C. Есть OpenTK, который является хорошей оберткой для C ++ или C #.

Мне всегда было интересно, как будет развиваться программирование в Ruby с аппаратным ускорением ...

Гарет Клаборн
источник
3

Сырое программирование игры оставит вас довольно холодно. Работа с низкоуровневыми графическими вызовами в C # или C ++ - это маленький кошмар, и вы действительно не хотите восстанавливать колесо рендеринга 2D-спрайтов, не говоря уже о 3D-моделях. Поскольку вы сами по себе и хотите изучать программирование, лучше всего найти основу, которая может немного продвинуть вас вперед.

Поскольку вы немного знакомы с языком на основе C, я бы предложил взглянуть на Unity 3D . Мало того, что он испытывает серьезный интерес к внедрению в коммерческих магазинах разработчиков игр, и имеет некоторые интересные варианты платформ (включая ПК, Android, iPhone и веб-приложения), но также у него есть бесплатная очень простая в использовании версия и множество учебных пособий. чтобы показать вам, как перейти от концепции к реализации. Лучше всего (IMO) одним из поддерживаемых языков сценариев является C #.

Джейкоб Проффитт
источник
2

Я сделал игру для класса два года назад (мне тогда тоже было 18 лет), и мы сделали это на C #. Хотя я заметил, что большие программы на C # обычно работают медленнее, чем большие программы на C ++, C # также требует гораздо меньше работы с вашей стороны. Управление памятью осуществляется автоматически, и для первой игры этого достаточно. (Наша игра представляет собой полноценную многопользовательскую 2D-игру в стиле Starcraft.)

Я бы болел за C #, поскольку им должно быть легче управлять. Однако, если вы хотите стать профессиональным разработчиком игр, просто помните, что он работает только на платформах Microsoft. (Тем не менее, C # может быть хорошей ступенькой к C ++, и если бы мне пришлось заново изучать два языка, я бы сначала попытался выучить C #.)

zneak
источник
C # также работает на Mono (кроссплатформенный), однако части платформы (например, WPF) не поддерживаются.
Дэнни Варод
1
@ Дэнни Варод, я не очень рекомендую Mono для разработки кроссплатформенных игр, потому что до сих пор они всегда немного опаздывали с Microsoft с точки зрения возможностей, и я не ожидаю, что это изменится. Кроме того, основным плюсом разработки на C # для платформ Microsoft является XNA, и пока Mono также не предоставит DirectX, он не будет работать на платформах не-MS.
zneak
1
Mono должен будет предоставить совместимую оболочку OpenGL, поскольку, как вы заявили, DirectX принадлежит Microsoft. Моя точка зрения была только в том, что C # может быть частично портирован.
Дэнни Варод
2
Между Unity, monogame (XNA с открытым исходным кодом для mono) и OpenTK существует множество хороших игровых библиотек для mono.
каменный металл
1

Я бы проголосовал за C ++ - в первую очередь потому, что он может быть кроссплатформенным (конечно, в зависимости от того, как вы пишете свой код), а также потому, что я думаю, что он дает вам больше знаний об управлении памятью - потому что вам нужно заботиться об этом. Но так как вас не волнует linux / unix, если вы хотите на время забыть о сложности памяти, почему бы не сосредоточиться на C # прямо сейчас, а затем изучать C ++?

Mauren
источник
Спасибо за ответ на ваш первый вопрос о программистах Stack Exchange.
РазработчикДон
C ++ до сих пор остается самым переносимым языком. Особенно мобильные платформы, некоторые имеют Java, некоторые имеют C #, но большинство не имеют и того, и другого. Но все должны иметь C ++; виртуальные машины должны быть реализованы во что-то, что компилируется в машинный код, и что в данный момент это всегда C ++.
Ян Худек