Ігрове програмування: C # або C ++? [зачинено]


15

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

Я знаю основи C ++, але про C # немає. Я знаю, що на C ++ є більше таких посібників, підручників і подібних матеріалів, в той час як C # немає, але навчитися та використовувати одну людину для розробки програми набагато простіше, але я читав, навіть якщо програма затуманена легко отримати його джерело.

Ну, я хотів би спочатку зосередитись на базовому, я мушу сказати, що я віддаю перевагу C ++ лише тому, що він мені здається більш підходящим, але я повинен вважати, що працюю один. Тож навіть якщо мені це подобається, можливо, це не найкраще робити.

Я дійсно не впевнений, до якого саме звернутися, я прочитав багато тем на різних веб-сайтах, і схоже, що C # стає більш популярним, ніж C ++. Але так, я сказав, що я також вказав, що хочу займатися програмуванням ігор Тому мені потрібно знати кілька кращих моментів, ніж просто "C # простіше через обробку пам'яті .net, а C ++ -", тому що я не зміг її знайти.


16
Також вам може стати в нагоді gamedev.stackexchange.com .
Адам Лір

1
C # - це те, що я рекомендую create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little

2
Також дивіться тут: gamedev.net
Патрік Хьюз

Відповіді:


21

Я вивчаю C ++, програмуючи гру. Це було дуже приємне враження. Я настійно заохочую вас зробити те саме!

Однак зараз я програміст на C #, я знаю, що був би набагато продуктивнішим, якби на той час був доступний C #.

C # - ідеальний вибір для навчання розвитку ігор. У ньому є все необхідне, починаючи від рамок до книг, і мова дивовижна.

Я бачив десятки книг, написаних спеціально про програмування ігор на C #, і Microsoft докладає чимало зусиль для вдосконалення своїх рамок, включаючи DirectX та XNA .

UPDATE : Ви можете бути зацікавлені від цього , а також. Це нещодавнє повідомлення в блозі Мігеля де Іказа .

ОНОВЛЕННЯ 2013-02-22 Microsoft планує припинити підтримку XNA .


1
Тож, можливо, я повинен почати обходити SDL або щось подібне з C ++, а потім перейти до C # у майбутньому .. це просто схоже, що C ++ ніби заміняється на C #, за винятком створення двигуна. Чому так важко зробити вибір !
Хронікс

2
Зрозумійте, що C # відмінно підходить для розвитку ігор, а не для портативності на якійсь ігровій платформі чи інших проблем. Найкращий сценарій - це коли ти знаєш достатню кількість ігрових розробників, використовуючи обидва, і обираєш C ++ або C # залежно від цільової платформи.
Клайм

Крім цього, +1 очевидно. Я особисто все ще віддаю перевагу C ++, але це лише тому, що більшість мого проекту потребують доступу на низькому рівні з якихось конкретних причин.
Клайм

12

Більшість ігрових компаній використовують C ++, можливо, із сценаріями python або іншими мовами, що працюють у фоновому режимі. Тим більше, що прив'язки для OpenGL та DirectX спрямовані на C ++ (ще я впевнений, що ви можете зробити так само багато Direct3d речей у C #), але ви для програмування ігор, C ++ - ОСНОВНА мова.

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

Я б почав із чогось дуже простого. для 2-х матеріалів SDL (Simple Directmedia Layer) набагато простіше у використанні (для чогось типу гри зверху вниз), коли ви потрапляєте в 3D I ОСОБО думаю, що OpenGL легше вивчити (але це все думка). У своїх документах DirectX SDK в MS є кілька приємних навчальних посібників / зразків, тому варто ознайомитись. Підручники Nehe, хоча трохи застарілі, все ще приємні.

але вам відповісти на ваше запитання, вони зазвичай робляться зазвичай на C ++.


1
SlimDX надає обгортку DirectX для .NET
Danny Varod

1
"для ігрового програмування C ++ - ОСНОВНА мова." Я не погоджуюся з цим твердженням. Ринок ігор набагато ширший, ніж просто консольні ігри AAA - це набагато менший сегмент ринку, ніж люди, як правило, розуміють. Я б сказав, що набагато більше ігор написано такими мовами, як ActionScript, ніж C ++
MattDavey

8

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

Якщо ви хочете почати робити ігри, то я рекомендую вивчити C #. Якщо ви вже знаєте основи C ++, тоді у вас не повинно виникнути жодних проблем зі збиранням C #. Створення C # своїм інструментом має переваги. Мова легко навчитися (порівняно з C ++) і є "керованою мовою", це означає, що вона автоматично робить сантехніка пам'яті для вас (щось багато початківців C ++ і навіть не початківців мають проблеми з ). Він також надає вам доступ до XNA Framework від Microsoft, що робить ще більше нудної сантехніки для вас. Це дозволяє зосередитись на таких речах, як ігровий цикл та дизайн, не турбуючись про те, щоб змусити його працювати. Правда, у всього цього сантехніка є накладні витрати, а це означає, що ви, ймовірно, не будете робити промислові 3D ігри, але ви просто займаєтесь ігровим програмуванням, тому я сумніваюся, що ви зробите наступний ореол у кількох своїх перших спробах. :)

Ось допис після хлопця, який розробив успішну гру 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.
Vitor Py

1
@DominicMcDonnell: У вас можуть виникнути проблеми з пам’яттю, зберігаючи посилання на речі, приховані десь в керованих умовах виконання, як-от C #, і коли він потрапляє, вам доведеться набагато складніше шукати його, оскільки ви не будете звикати думати про життя ресурсів.
Ян Худек

@JanHudec, я цього не знав. Я гадаю, ви можете сказати, що налагодити роботу простіше і простіше, але дістатись набагато складніше відстежувати, а певні звички, які мова дозволяє побудувати, перешкоджають.
Домінік МакДоннелл

3

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

Завдяки C # ви можете розвинутись ще трохи в ці дні, і там напевно запрограмовано кілька дивовижно чудових двигунів. Обидва ці мови є хорошими мовами для програмування ігор, якщо ви орієнтуєтесь лише на платформи Windows / Xbox, тоді у вас особливо буде причина схилятися до C #.

Мовою, яку я, на мою думку, слід вивчити, буде OpenCL або CUDA, якась мова GPGPU. Особисто я віддаю перевагу OpenCL, оскільки, здається, швидше застаріти і зростати, це в основному просто стиль C Є OpenTK, який є гарною обгорткою для C ++ або C #.

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


3

Сире програмування гри залишить вас досить холодними. Робота з графічними дзвінками низького рівня або на C #, або на C ++ є незначним кошмаром, і ви дійсно не хочете перебудовувати колесо візуалізації 2D спрайтів, не кажучи вже про 3D-моделі. Оскільки ви самостійно і хочете навчитися програмуванню, найкраще підібрати основу, яка може трохи висувати вас.

Оскільки ви добре знайомі з мовою на основі С, я запропонував би надати Unity 3D погляд. Він не лише відчуває серйозне враження від прийняття з комерційних магазинів ігор для розробників ігор, і має кілька цікавих варіантів платформи (включаючи ПК, андроїд, iPhone та веб-сайти), але також має безкоштовну версію, яка дуже проста у використанні та безліч навчальних посібників. щоб показати вам, як рухатися від концепції до реалізації. Найкраще (IMO) однією з підтримуваних мов сценаріїв є C #.


2

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

Я виконую корінь для C #, як це має бути легше в управлінні. Однак, якщо ви хочете стати професійним розробником ігор, просто пам’ятайте, що це працює лише на платформах Microsoft. (Все-таки C # може стати гарним кроком до C ++, і якби мені довелося вивчити дві мови, я спробую вивчити C # спочатку.)


C # також працює на Mono (кросова платформа), проте частини фреймворку (наприклад, WPF) не підтримуються.
Денні Варод

1
@Danny Varod, я не дуже люблю рекомендувати Mono для розробки ігор на платформі, тому що до цих пір вони завжди трохи запізнювались над Microsoft в плані функцій, і я не очікую, що це зміниться. Крім того, головним плюсом розвитку C # для платформ Microsoft є XNA, і поки Mono також не надасть DirectX, він не буде працювати на платформах, що не належать до MS.
zneak

1
Mono доведеться забезпечити сумісну обгортку OpenGL, оскільки, як ви заявили, DirectX - це Microsoft. Моя думка полягала лише в тому, що C # можна частково перенести.
Денні Варод

2
Між Unity, моногамою (open source XNA для моно) та OpenTK є багато хороших ігрових бібліотек для моно.
каменеметал

1

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


Дякуємо, що відповіли на ваше перше запитання щодо програмістів Stack Exchange.
DeveloperDon

C ++ досі є найбільш портативною мовою на сьогодні. Особливо мобільні платформи деякі мають Java, деякі мають C #, а більшість не мають обох. Але всі повинні мати C ++; віртуальні машини повинні бути реалізовані в тому, що компілюється в початковий машинний код, і що в даний час завжди є C ++.
Ян Худек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.