Programowanie gier: C # czy C ++? [Zamknięte]

15

Zdecydowałem, że naprawdę chcę programować gry. Pytanie więc, jako 18-latek, który chce nauczyć się programowania samouka, jaki jest najbardziej odpowiedni język programowania między C # a C ++? (Powinienem powiedzieć, że nie obchodzi mnie Unix, ponieważ uważam, że Windows nadal będzie najczęściej używanym systemem operacyjnym)

Znam podstawy C ++, ale nie znam C #. Wiem, że C ++ ma więcej przewodników samouczków, bibliotek DLL i tym podobnych rzeczy, podczas gdy C # nie, ale o wiele łatwiej jest się uczyć i używać dla jednej osoby do opracowania programu, ale przeczytałem nawet, jeśli program jest zaciemniony łatwo jest uzyskać jego źródło.

Cóż, trochę chciałbym najpierw skupić się na podstawowym, muszę powiedzieć, że wolę C ++ tylko dlatego, że wydaje mi się bardziej odpowiedni, ale muszę wziąć pod uwagę, że pracuję sam. Więc nawet jeśli mi się podoba, może nie być to najlepsze.

Naprawdę nie jestem pewien, który wybrać, przeczytałem wiele wątków na różnych stronach i wygląda na to, że C # staje się bardziej popularny niż C ++. Ale tak, powiedziawszy, określiłem również, że chcę robić gry. Muszę więc poznać kilka lepszych punktów niż tylko to, że „C # jest łatwiejszy z powodu obsługi pamięci .net, podczas gdy C ++ nie jest”, ponieważ nie mogłem go po prostu znaleźć.

Matěj Zábský
źródło
16
Pomocne może być również gamedev.stackexchange.com .
Adam Lear
1
C # jest tym, co poleciłbym create.msdn.com/en-US/education/catalog/?devarea=6
Daniel Little
2
Zobacz także: gamedev.net
Patrick Hughes,

Odpowiedzi:

21

Uczę się C ++, programując grę. To było bardzo przyjemne doświadczenie. Gorąco zachęcam do zrobienia tego samego!

Jednak teraz jestem programistą C #, wiem, że byłbym o wiele bardziej produktywny, gdyby C # był wówczas dostępny.

C # to idealny wybór do nauki tworzenia gier. Ma wszystko, czego potrzebujesz, aby zacząć od szkieletów po książki, a język jest niesamowity.

Widziałem dziesiątki książek napisanych specjalnie na temat programowania gier w języku C #, a Microsoft dokłada wielu starań, aby ulepszyć swoje frameworki, w tym DirectX i XNA .

UPDATE : może być zainteresowany przez to jak dobrze. To najnowszy post na blogu od Miguela de Icazy .

AKTUALIZACJA 2013-02-22 Microsoft planuje zaprzestać obsługi XNA .

2567
źródło
1
Więc może powinienem zacząć obchodzić się z SDL lub czymś takim z C ++, a następnie przejść do C # w przyszłości .. wygląda na to, że C ++ jest trochę zastępowany przez C # z wyjątkiem tworzenia silnika .. Dlaczego tak trudno jest dokonać wyboru !
Chronix,
2
Zrozum, że C # jest doskonały do ​​doświadczania rozwoju gier, a nie do przenoszenia na niektórych platformach do gier lub innych problemach. Najlepszym scenariuszem jest sytuacja, gdy znasz wystarczającą liczbę twórców gier, używając obu i wybierasz C ++ lub C # w zależności od platformy docelowej.
Klaim
Poza tym +1 oczywiście. Osobiście nadal wolę C ++, ale to tylko dlatego, że większość mojego projektu wymaga dostępu na niskim poziomie z kilku powodów specyficznych dla projektu.
Klaim
12

Większość producentów gier używa C ++, być może ze skryptami Python lub innymi językami działającymi w tle. Moreso, ponieważ wiązania dla OpenGL i DirectX są skierowane do C ++ (chociaż jestem pewien, że możesz zrobić tyle samo Direct3d w C #), ale jeśli chodzi o programowanie gier, C ++ jest językiem głównym.

Dam ci jednak ostrzeżenie (i nie zniechęcaj), ale grafika 3D może się bardzo skomplikować. Nowy Direct3D sprawił, że jest o wiele łatwiejszy niż kiedyś, ale wciąż jest to dobra matematyka (może być dość myląca), a same biblioteki mogą być mylące.

Zacznę od czegoś bardzo prostego. na rzeczy 2d SDL (Simple Directmedia Layer) jest dużo łatwiejszy w użyciu (jak coś w rodzaju odgórnej gry) po wejściu do 3D. Osobiście uważam, że OpenGL jest łatwiejszy do nauczenia się (ale to wszystko opinia). MS ma kilka fajnych samouczków / próbek w dokumentacji DirectX SDK, więc warto się przyjrzeć. Samouczki Nehe, choć nieco przestarzałe, są nadal fajne.

ale tak, aby odpowiedzieć na twoje pytanie, wszystkie są zwykle wykonywane w C ++.

użytkownik6791
źródło
1
SlimDX zapewnia opakowanie DirectX dla .NET
Danny Varod
1
„do programowania gier C ++ jest językiem głównym”. Nie zgodziłbym się z tym stwierdzeniem. Rynek gier jest znacznie szerszy niż tylko gry konsolowe AAA - to znacznie mniejszy segment rynku, niż ludzie zdają sobie z tego sprawę. Powiedziałbym, że o wiele więcej gier jest napisanych w językach takich jak ActionScript niż C ++
MattDavey,
8

Najpierw będziesz chciał ustawić priorytety. Czy chcesz najpierw stworzyć grę, a potem dowiedzieć się o bardziej zaawansowanych aspektach programowania później lub odwrotnie? Oba podejścia mają swoje zalety i wady, ale moim zdaniem oba są uzasadnione.

Jeśli chcesz zacząć tworzyć gry, polecam naukę języka C #. Jeśli znasz już podstawy języka C ++, nie powinieneś mieć żadnych problemów z wybraniem języka C #. Tworzenie C # narzędziem ma zalety. Jest łatwy do nauczenia się języka (w porównaniu do C ++) i jest „językiem zarządzanym”, co oznacza, że ​​automatycznie wykonuje hydraulikę pamięci dla Ciebie (coś, co wielu początkujących w C ++, a nawet niezbyt początkujących, ma problemy z ). Zapewnia również dostęp do platformy XNA firmy Microsoft, która wykonuje jeszcze więcej uciążliwych prac hydraulicznych. Dzięki temu możesz skoncentrować się na takich elementach, jak cykl gry i projektowanie, bez martwienia się (zbytnio) o uruchomienie. To prawda, że ​​cała ta instalacja hydrauliczna ma swoje koszty ogólne, co oznacza, że ​​prawdopodobnie nie będziesz tworzyć gier 3D klasy przemysłowej, ale dopiero zaczynasz programować gry, więc wątpię, żebyś robił następną Halo przy kilku pierwszych próbach. :)

Oto sekcja zwłok faceta, który opracował udaną grę XNA (Weapon of Choice). Wyjaśnia, w jaki sposób użycie C # / XNA pozwoliło mu zaoszczędzić czas na rozwój w porównaniu do konieczności używania C ++. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

Biorąc to pod uwagę, powinieneś poświęcić trochę czasu, aby przynajmniej wiedzieć, jak działają rzeczy w tle. Jak zrobiłby to programista C ++. Nauka tworzenia gry w C ++ może ułatwić dołączenie do innego zespołu tworzącego gry (ponieważ większość z nich pracuje w C ++), jeśli chcesz zdobyć pozycję w branży gier. Ale nawet jeśli nigdy nie użyjesz C ++, wiedza o tym, jak działają wewnętrzne, może uczynić cię lepszym programistą, bez względu na to, jakiego języka używasz.

System wyłączony
źródło
Zgadzam się całkowicie. Największym problemem są problemy z zarządzaniem pamięcią w c ++. Nie było gry, nad którą pracowałem, która nie miałaby problemów z pamięcią, i słyszałem to samo od 20-letnich weteranów, którzy stworzyli dziesiątki gier. Nawet RAII i inteligentne wskaźniki nie rozwiązują problemu, ponieważ masz problemy ze wskaźnikami wskazującymi na stare dane i problemami z własnością. Nauczenie się, jak je znaleźć i naprawić, sprawi, że będziesz znacznie lepszym programistą, ale może to oznaczać, że przez kilka miesięcy po raz pierwszy masz przepełniony bufor i gra ulega awarii.
Dominique McDonnell,
Chciałbym dodać do tego pytania, że ​​C # ma również XNA ( en.wikipedia.org/wiki/Microsoft_XNA ) na swoją korzyść. XNA jest znacznie łatwiejszy do pobrania niż niezarządzany DirectX.
Vitor Py
1
@DominicMcDonnell: Możesz mieć problemy z pamięcią, przechowując odniesienia do rzeczy ukrytych gdzieś w zarządzanych środowiskach uruchomieniowych, takich jak C #, a kiedy trafi, będziesz miał znacznie trudniejszy czas na ich odnalezienie, ponieważ nie będziesz przyzwyczajony do myślenia o czasach życia zasobów.
Jan Hudec
@JanHudec, nie wiedziałem o tym. Przypuszczam, że można powiedzieć, że załatwienie sprawy jest prostsze i łatwiejsze, ale trudniej jest wytropić i pod pewnymi względami nawyki, które pozwala ci budować język, przeszkadzają.
Dominique McDonnell,
3

Bardzo promuję C ++ do tworzenia gier. Istnieje kilka dodatkowych przeszkód, z różnymi zaletami i wadami, jednym z najlepszych powodów jest przenośność.

Dzięki C # możesz teraz rozwijać się o wiele więcej, a na pewno jest w nim zaprogramowanych kilka niesamowicie wspaniałych silników. Oba są dobrym językiem do programowania gier, jeśli kierujesz reklamy tylko na platformy Windows / Xbox, będziesz szczególnie miał powód, by skłaniać się w kierunku C #.

Językiem, który moim zdaniem powinien się nauczyć, byłby OpenCL lub CUDA, jakiś język GPGPU. Osobiście wolę OpenCL, ponieważ wydaje się, że może przetrwać i dalej się rozwijać, jest to po prostu styl C. Jest OpenTK, który jest dobrym opakowaniem dla C ++ lub C #.

Zawsze zastanawiałem się, jak wyglądałoby programowanie w Ruby z akceleracją sprzętową ...

Garet Claborn
źródło
3

Surowe programowanie gier sprawi, że będziesz całkiem zimno. Praca z niskopoziomowymi wywołaniami graficznymi w języku C # lub C ++ jest niewielkim koszmarem i naprawdę nie chcesz odbudowywać koła renderowania duszków 2D, a tym bardziej modeli 3D. Ponieważ jesteś sam i chcesz nauczyć się programowania, najlepszym rozwiązaniem jest znalezienie frameworka, który może cię nieco podnieść.

Ponieważ znasz trochę język oparty na języku C, sugeruję nadanie Unity 3D wyglądu. Nie tylko jest poważnie rozpowszechniony w sklepach z grami komercyjnymi i ma kilka interesujących opcji platformy (w tym na PC, Androida, iPhone'a i środowiska uruchomieniowe), ale ma również darmową wersję, która jest bardzo łatwa w użyciu i wiele samouczków aby pokazać, jak przejść od koncepcji do wdrożenia. Najlepszy ze wszystkich (IMO) jednym z obsługiwanych języków skryptowych jest C #.

Jacob Proffitt
źródło
2

Zrobiłem grę dla klasy dwa lata temu (wtedy miałem też 18 lat) i zrobiliśmy to w C #. Chociaż obserwuję, że duże programy w języku C # zwykle działają wolniej niż duże programy w języku C ++, C # wymaga również znacznie mniej pracy po twojej stronie. Zarządzanie pamięcią odbywa się automatycznie, a w przypadku pierwszej gry jest wystarczająco szybkie. (Nasza gra to pełnoprawny multiplayer 2D typu RTS podobny do Starcraft.)

Zrootowałem dla C #, ponieważ powinno być łatwiejsze w zarządzaniu. Jeśli jednak chcesz zostać profesjonalnym twórcą gier, pamiętaj, że działa tylko na platformach Microsoft. (Mimo to C # może być dobrym krokiem do C ++, a gdybym musiał ponownie nauczyć się dwóch języków, najpierw spróbowałbym nauczyć się C #.)

skradać się
źródło
C # działa również na Mono (wieloplatformowym), jednak niektóre elementy frameworka (np. WPF) nie są obsługiwane.
Danny Varod,
1
@Danny Varod, naprawdę nie lubię polecać Mono do tworzenia gier na wiele platform, ponieważ do tej pory zawsze spóźnili się z Microsoftem pod względem funkcji i nie spodziewam się, że to się zmieni. Ponadto dużym plusem programowania w języku C # dla platform Microsoft jest XNA i dopóki Mono nie zapewni także DirectX, nie będzie działać na platformach innych niż MS.
zneak
1
Mono będzie musiało zapewnić kompatybilne opakowanie OpenGL, ponieważ, jak powiedziałeś, DirectX należy do Microsoft. Chodziło mi tylko o to, że C # można częściowo przenieść.
Danny Varod,
2
Pomiędzy Unity, monogame (XNA opensource dla mono) i OpenTK istnieje wiele dobrych bibliotek gier dla mono.
stonemetal
1

Głosowałbym na C ++ - przede wszystkim dlatego, że może być wieloplatformowy (oczywiście w zależności od tego, jak piszesz kod), a także dlatego, że uważam, że daje on więcej wiedzy na temat zarządzania pamięcią - ponieważ musisz o to dbać. Ale ponieważ nie zależy ci na Linuksie / Unixie, jeśli chcesz na chwilę pominąć złożoność pamięci, dlaczego nie skupić się teraz na C #, a następnie nauczyć się również C ++?

Mauren
źródło
Dziękujemy za odpowiedź na pierwsze pytanie dotyczące programistów Stack Exchange.
DeveloperDon
C ++ jest do dziś najbardziej przenośnym językiem. Zwłaszcza platformy mobilne, niektóre mają Javę, niektóre C #, ale większość nie ma obu. Ale wszyscy muszą mieć C ++; maszyny wirtualne muszą być zaimplementowane w czymś, co kompiluje się z natywnym kodem maszynowym i że czymś obecnie jest zawsze C ++.
Jan Hudec