게임 프로그래밍 : C # 또는 C ++? [닫은]


15

내가 정말로 원하는 것은 게임 프로그래밍을하는 것입니다. 따라서 문제는 18 세인자가 학습 프로그래밍을 배우고 자하는 데 C #과 C ++ 사이에서 가장 적합한 프로그래밍 언어는 무엇입니까? (윈도우가 여전히 가장 많이 사용되는 OS라고 믿기 때문에 유닉스에 관심이 없다고 말해야한다)

C ++의 기본 사항을 알고 있지만 C #에 대해서는 없습니다. C ++에는 더 많은 자습서 안내서, dll 및 이와 유사한 내용이 있지만 C #은 그렇지 않지만 한 사람이 프로그램을 개발하기 위해 배우고 사용하는 것이 훨씬 쉽지만 프로그램이 난독 화되어 있어도 읽었습니다. 그것의 소스를 얻는 것은 쉽습니다.

글쎄, 나는 기본적으로 많은 것에 중점을두고 싶다 .C ++이 나에게 더 적합하다고 느끼기 때문에 C ++을 선호한다고 말해야하지만, 나는 혼자 일하는 것을 고려해야한다. 따라서 내가 좋아하더라도 최선의 방법이 아닐 수도 있습니다.

어떤 웹 사이트를 사용 해야할지 잘 모르겠습니다. 다양한 웹 사이트에서 많은 스레드를 읽었으며 C #이 C ++보다 인기가있는 것처럼 보입니다. 그러나 그래, 나는 또한 게임 프로그래밍을하고 싶다고 지정했다. 그래서 나는 단지 그것을 찾을 수 없었기 때문에 "C ++은 그렇지 않지만 .net 메모리 처리로 인해 C #이 더 쉽다"는 것보다 더 좋은 점을 알아야합니다.


16
gamedev.stackexchange.com이 도움 이 될 수도 있습니다.
Adam Lear


2
또한 여기 참조 : gamedev.net을
패트릭 휴즈

답변:


21

게임을 프로그래밍하여 C ++을 배웁니다. 그것은 매우 즐거운 경험이었습니다. 나는 당신이 똑같이하는 것이 좋습니다!

그러나 지금 저는 C # 프로그래머입니다. 당시 C #을 사용할 수 있다면 훨씬 더 생산적이었을 것입니다.

C #은 게임 개발 학습에 완벽한 선택입니다. 그것은 당신이 프레임 워크에서 책에 이르기까지 시작하는 데 필요한 모든 것을 갖추고 있으며 언어는 훌륭합니다.

C # 게임 프로그래밍 에 대해 특별히 작성된 수십 권의 책을 보았 으며 Microsoft는 DirectXXNA를 포함한 프레임 워크를 개선하기 위해 많은 노력을 기울이고 있습니다.

업데이트 : 이것에 관심 있을 수 있습니다 . Miguel de Icaza 의 최근 블로그 게시물입니다 .

업데이트 2013-02-22 Microsoft는 XNA 지원중단 할 계획 입니다.


1
그래서 아마도 C ++로 SDL이나 그와 비슷한 것을 시작해야하고 나중에 C #으로 넘어갈 것입니다. 엔진 생성을 제외하고 C ++이 C #으로 대체 된 것처럼 보입니다. !
Chronix

2
C #은 일부 게임 플랫폼에서의 이식성이나 다른 문제가 아니라 게임 개발 경험에 탁월하다는 것을 이해하십시오. 가장 좋은 시나리오는 둘 다를 사용하여 충분한 게임 개발자를 알고 대상 플랫폼에 따라 C ++ 또는 C #을 선택하는 경우입니다.
Klaim

그 외에는 분명히 +1입니다. 나는 개인적으로 여전히 C ++을 선호하지만 이는 대부분의 프로젝트가 프로젝트 특정 이유로 일부 저수준 액세스를 필요로하기 때문입니다.
Klaim

12

대부분의 게임 회사는 파이썬 스크립트 또는 백그라운드에서 실행되는 다른 언어와 함께 C ++을 사용합니다. 또한 OpenGL과 DirectX의 바인딩은 C ++을 목표로하기 때문에 (C #에서 Direct3d만큼 많은 작업을 수행 할 수 있음) 게임 프로그래밍을 위해서는 C ++이 기본 언어입니다.

나는 당신에게 공정한 경고를 줄 것입니다 (그리고 이것을 막지 마십시오). 그러나 3D 그래픽은 매우 복잡해질 수 있습니다. 새로운 Direct3D는 예전보다 훨씬 쉬워졌지만 여전히 혼란 스러울 수있는 좋은 수학이며 라이브러리 자체만으로도 혼란 스러울 수 있습니다.

아주 간단한 것부터 시작하겠습니다. 3D에 들어가면 SDL (Simple Directmedia Layer)은 사용하기가 훨씬 쉽습니다 (위로 다운 게임과 같은 경우) OpenGL이 배우기 쉽다고 생각합니다 (그러나 이것은 모든 의견입니다). MS는 DirectX SDK 문서에 멋진 자습서 / 샘플을 가지고 있으므로 살펴볼 가치가 있습니다. 조금 오래되었지만 Nehe 튜토리얼은 여전히 ​​훌륭합니다.

그러나 나중에 귀하의 질문에 대답하기 위해 모두 C ++로 수행됩니다.


1
SlimDX는 .NET 용 DirectX 래퍼를 제공합니다
Danny Varod

1
"게임 프로그래밍의 경우 C ++은 기본 언어입니다." 나는 그 진술에 동의하지 않습니다. 게임 시장은 AAA 콘솔 게임보다 훨씬 광범위합니다. 이는 사람들이 생각하는 것보다 시장의 훨씬 작은 부분입니다. C ++보다 ActionScript와 같은 언어로 작성된 게임이 훨씬 더 많았습니다.
MattDavey

8

먼저 우선 순위를 설정하고 싶을 것입니다. 먼저 게임을 만들고 나중에 프로그래밍의 고급 측면에 대해 배우고 싶습니까? 두 가지 방법 모두 장단점이 있지만 제 생각에는 모두 합법적입니다.

게임을 시작하려면 C #을 배우는 것이 좋습니다. C ++의 기본 사항을 이미 알고 있다면 C #을 집어 올리는 데 아무런 문제가 없습니다. C #을 도구로 만들면 장점이 있습니다. 언어를 배우기 쉽고 (C ++에 비해) "관리되는 언어"입니다. 즉, 자동으로 메모리 배관을 수행합니다 (많은 C ++ 초보자 및 초보자도 문제가 있음) ). 또한 더 지루한 배관 작업을 수행하는 Microsoft의 XNA Framework에 액세스 할 수 있습니다. 따라서 게임주기 및 디자인과 같은 작업에 집중할 필요없이 게임주기 및 디자인에 집중할 수 있습니다. 사실,이 모든 설치 배관은 오버 헤드가 있기 때문에 아마도 업계 수준의 3D 게임을 만들지는 않지만 게임 프로그래밍에 들어가는 것입니다. 몇 번의 시도로 다음 Halo를 만들지 않을 것입니다. :)

다음은 성공적인 XNA 게임 (선택의 무기)을 개발 한 사람의 게시물입니다. 그는 C #을 사용하는 대신 C # / XNA를 사용하여 개발 시간을 절약 한 방법에 대해 자세히 설명합니다. http://www.gamasutra.com/view/feature/3899/postmortem_mommys_best_games_.php

즉, 최소한 백그라운드에서 작동하는 방식을 아는 데 시간을 투자해야합니다. C ++ 프로그래머가하는 방법 C ++로 게임을 만드는 법을 배우면 원하는 게임 산업에 발을 들여 놓는 것이라면 다른 게임 개발 팀에 쉽게 참여할 수 있습니다. 그러나 C ++을 전혀 사용하지 않아도 내부 언어의 작동 방식을 알면 사용하는 언어에 관계없이 더 나은 프로그래머가 될 수 있습니다.


나는 완전히 동의합니다. C ++에서 직면 한 메모리 관리 문제가 가장 큰 문제입니다. 메모리 문제가 없었던 게임은 없었으며 수십 번의 게임을 한 20 년의 재향 군인이 말한 것과 동일한 것을 들었습니다. RAII 및 스마트 포인터조차도 오래된 데이터를 가리키는 포인터 관련 문제와 소유권 문제로 인해 문제를 해결하지 못합니다. 그것들을 찾고 수정하는 방법을 배우면 훨씬 더 나은 프로그래머가 될 수 있지만, 버퍼 오버런이 발생하고 관련이없는 부분에서 게임 충돌이 발생하면 몇 개월 동안 문제가 발생할 수 있습니다.
도미니크 맥도넬

이 질문에 C #에도 XNA ( en.wikipedia.org/wiki/Microsoft_XNA )가 유리하다는 점 을 추가하고 싶습니다 . XNA는 관리되지 않는 DirectX보다 훨씬 쉽게 선택할 수 있습니다.
Vitor Py

1
@DominicMcDonnell : C #과 같은 관리되는 런타임 어딘가에 숨겨진 항목에 대한 참조를 유지하여 메모리 문제가 발생할 수 있습니다.
Jan Hudec

@ JanHudec, 나는 그것을 몰랐다. 일을하는 것이 더 간단하고 쉽다고 말할 수 있다고 생각하지만, 고개는 추적하기가 훨씬 어렵고 어떤 식 으로든 언어로 만들 수있는 습관이 방해가됩니다.
도미니크 맥도넬

3

게임 개발을 위해 C ++을 강력하게 홍보합니다. 다양한 장단점이있는 몇 가지 추가 장애물이 있으며 가장 좋은 이유 중 하나는 이식성입니다.

C #을 사용하면 요즘 훨씬 더 많은 것을 개발할 수 있으며 놀랍도록 훌륭한 엔진이 프로그래밍되어 있습니다. 이 두 가지 모두 게임 프로그래밍에 적합한 언어입니다. Windows / Xbox 플랫폼 만 대상으로하는 경우 특히 C #에 의존 할 이유가 있습니다.

가장 많이 배워야 할 언어는 GCLPU 언어 인 OpenCL 또는 CUDA입니다. 개인적으로 OpenCL은 오래 지속되고 더 커질 가능성이 있기 때문에 OpenCL을 선호합니다. 기본적으로 C 스타일입니다. C ++ 또는 C #을위한 훌륭한 래퍼 인 OpenTK 가 있습니다 .

나는 하드웨어 가속으로 루비 게임 프로그래밍이 어떻게 될지 항상 궁금해했습니다 ...


3

원시 게임 프로그래밍은 당신을 꽤 추울 것입니다. C # 또는 C ++에서 저수준 그래픽 호출을 사용하는 것은 사소한 악몽이며 3D 모델은 물론 2D 스프라이트 렌더링 휠을 재구성하고 싶지 않습니다. 당신이 스스로하고 프로그래밍을 배우기를 원하기 때문에 최선의 방법은 조금 앞으로 나아갈 수있는 프레임 워크를 찾는 것입니다.

C 기반 언어에 익숙하기 때문에 Unity 3D 를 살펴 보는 것이 좋습니다. 상용 게임 개발자 상점에서 채택 할 때 심각한 흡수를 경험할뿐만 아니라 흥미로운 플랫폼 옵션 (PC, Android, iPhone 및 웹 런타임 포함)이 있으며 사용하기 매우 쉬운 무료 버전과 많은 자습서가 있습니다. 개념에서 구현으로 이동하는 방법을 보여줍니다. 지원되는 스크립팅 언어 중 하나 (IMO)는 C #입니다.


2

나는 2 년 전에 수업을 받았으며 (당시 18 세였습니다) C #으로 만들었습니다. 큰 C # 프로그램은 일반적으로 큰 C ++ 프로그램보다 느리게 작동하지만 C #은 결국 작업이 훨씬 적습니다. 메모리 관리는 자동으로 수행되며 첫 번째 게임의 범위에서는 충분히 빠릅니다. (우리 게임은 본격적인 2D 멀티 플레이어 스타 크래프트 같은 RTS입니다.)

관리하기 쉽기 때문에 C #을 사용했습니다. 그러나 전문 게임 개발자가 되려면 Microsoft 플랫폼에서만 작동한다는 것을 기억하십시오. (아직 C #은 C ++에 대한 디딤돌이 될 수 있으며, 두 언어를 다시 배워야한다면 먼저 C #을 배우려고 노력할 것입니다.)


C #은 Mono (크로스 플랫폼)에서도 실행되지만 프레임 워크의 일부 (예 : WPF)는 지원되지 않습니다.
Danny Varod

1
@Danny Varod, 나는 크로스 플랫폼 게임 개발을 위해 Mono를 권장하지 않습니다. 지금까지는 기능 측면에서 Microsoft보다 약간 늦었 기 때문에 변경 될 것으로 기대하지 않기 때문입니다. 또한 Microsoft 플랫폼 용 C #으로 개발 한 주요 이점은 XNA이며, Mono가 DirectX를 제공 할 때까지는 비 MS 플랫폼에서는 작동하지 않습니다.
zneak

1
DirectX는 Microsoft의 기술이므로 Mono는 호환되는 OpenGL 래퍼를 제공해야합니다. 내 요점은 C #을 부분적으로 이식 할 수 있다는 것입니다.
Danny Varod

2
Unity, monogame (모노 용 오픈 소스 XNA), OpenTK 사이에는 모노 용으로 좋은 게임 라이브러리가 많이 있습니다.
stonemetal

1

C ++에 투표 할 것입니다-주로 코드를 작성하는 방법에 따라 크로스 플랫폼이 될 수 있고 메모리 관리에 대해 더 많은 지식을 제공한다고 생각하기 때문에- 관심 이 필요 하기 때문입니다. 그러나 리눅스 / 유닉스에 신경 쓰지 않기 때문에 지금 당장 메모리 복잡성을 없애고 싶다면 지금 C #에 집중하고 C ++도 배우지 않겠습니까?


Stack Exchange Programmers에 대한 첫 번째 질문에 답변 해 주셔서 감사합니다.
개발자

C ++는 여전히 오늘날 가장 이식 가능한 언어입니다. 특히 모바일 플랫폼에는 Java가 있고 일부에는 C #이 있지만 둘다는 없습니다. 그러나 모두 C ++이 있어야합니다. 가상 머신은 네이티브 머신 코드로 컴파일되는 무언가로 구현되어야하며 무언가는 항상 C ++입니다.
Jan Hudec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.