프로그래밍
이것은 모든 게임 프로그래밍 FAQ에서 찾을 수 있는 질문입니다. 이 질문은 게임 개발 포럼에서 일주일에 여러 번 제기됩니다. 좋은 질문이지만 누구도 간단하게 대답할 수 없습니다. 특정 응용 프로그램에는 항상 다른 컴퓨터 언어보다 나은 컴퓨터 언어가 있습니다. 다음은 게임 작성에 사용되는 주요 프로그래밍 언어와 그 장단점을 살펴보겠습니다. 이 기사가 귀하의 결정에 도움이 되기를 바랍니다.
1. C 언어
FORTRAN과 COBOL이 1세대 고급 컴파일 언어라면 C 언어는 그들의 손자입니다. C 언어는 1970년대 Dennis Ritchie에 의해 만들어졌습니다. COBOL 및 FORTRAN의 구조화된 후속 버전인 ALGOL과 함께 더욱 강력하고 지속적인 상속을 유지합니다. C 언어는 이전 버전보다 더 세련되고 단순한 버전으로 설계되었으며, 운영체제와 같은 시스템 수준의 프로그램을 작성하는 데 적합했습니다. 이전에는 운영 체제가 어셈블리 언어로 작성되어 이식성이 없었습니다. C는 시스템 수준의 코드 이식성을 가능하게 한 최초의 프로그래밍 언어였습니다.
C 언어는 구조화된 프로그래밍을 지원합니다. 즉, C 프로그램은 단일 통합이 아닌 하향식으로 실행되는 별도의 함수 호출(호출) 모음으로 작성됩니다. 블록의 코드는 GOTO 문을 사용합니다. 흐름을 제어합니다. 따라서 C 프로그램은 FORTRAN 및 COBOL 코드가 통합된 "스파게티 코드"보다 훨씬 간단합니다. 실제로 C에는 여전히 GOTO 문이 있지만 기능이 제한되어 있으며 구조화된 솔루션이 매우 복잡한 경우에만 사용하는 것이 좋습니다.
시스템 프로그래밍에 뿌리를 두고 있기 때문에 C와 어셈블리 언어를 결합하는 것은 매우 쉽습니다. 함수 호출 인터페이스는 매우 간단하며 어셈블리 언어 명령어를 C 코드에 내장할 수 있으므로 독립적인 어셈블리 모듈을 연결할 필요가 없습니다.
장점: 작고 빠른 프로그램을 작성하는 데 도움이 됩니다. 어셈블리 언어와 쉽게 결합됩니다. 고도로 표준화되어 있어 다른 플랫폼의 버전도 매우 유사합니다.
단점: 객체지향 기술을 지원하기가 쉽지 않다. 구문은 때때로 이해하기 매우 어렵고 남용될 수 있습니다.
이식성: C 언어 및 ANSI 함수 호출의 핵심은 이식 가능하지만 프로세스 제어, 메모리 관리 및 간단한 파일 처리로 제한됩니다. 다른 모든 것은 플랫폼과 관련이 있습니다. 예를 들어 Windows, Mac용 이식 가능한 프로그램을 개발할 때 사용자 인터페이스 부분에서는 시스템 관련 함수 호출을 사용해야 합니다. 이는 일반적으로 사용자 인터페이스 코드를 두 번 작성해야 함을 의미하지만 다행히도 작업 부하를 완화할 수 있는 라이브러리가 있습니다.
C로 작성된 게임: 많고 많습니다.
정보: C 언어의 고전 책은 "The C 프로그래밍 언어"입니다. 이 책은 여러 번 개정되어 원래 크기의 3배로 확장되었지만 여전히 C를 소개하는 데 탁월한 책입니다. . 훌륭한 튜토리얼은 The Waite Group의 C Primer Plus입니다.
2. C++
C++ 언어는 객체 지향 기능을 갖춘 C 언어의 후속 언어입니다. 객체 지향 프로그래밍(OOP)은 구조적 프로그래밍의 다음 단계입니다. OO 프로그램은 객체로 구성되며, 여기서 객체는 데이터와 기능의 개별 모음입니다. (적어도 이론상으로는) 일부 프로그램 "건축 자재"를 함께 던지는 것만큼 간단하게 프로그래밍할 수 있는 개체 라이브러리가 많이 있습니다. 예를 들어 개체 컬렉션으로 구현되는 GUI 및 데이터베이스 라이브러리가 많이 있습니다.
C++는 특히 게임 개발 포럼에서 항상 논쟁의 대상입니다. 가상 함수와 같은 여러 C++ 기능은 함수 호출 의사 결정에 추가 계층을 추가하며 비평가들은 C++ 프로그램이 동일한 기능을 갖춘 C 프로그램보다 커지고 느려질 것이라고 재빠르게 지적합니다. C++ 옹호자들은 C에서 가상 함수에 해당하는 코드를 작성하면 비용도 증가할 것이라고 믿습니다. 이는 계속되는 논쟁이 될 것이며, 조만간 결론이 나기 어려울 것입니다.
제 생각에는 C++의 추가 비용은 더 나은 언어를 사용하는 데 드는 작은 비용일 뿐입니다. COBOL이나 FORTRAN과 같은 고급 프로그래밍 언어가 어셈블리를 대체하기 시작한 1960년대에도 동일한 논쟁이 일어났습니다. 비평가들은 고급 언어로 작성된 프로그램이 본질적으로 손으로 작성한 어셈블리 언어보다 느리며 당연히 그래야 한다고 지적합니다. 고급 언어 지지자들은 COBOL 및 FORTRAN 프로그램이 작성 및 유지 관리가 더 쉽기 때문에 이러한 작은 성능 저하가 그만한 가치가 있다고 믿습니다.
장점: 대규모 프로그램을 구성할 때 C 언어보다 훨씬 좋습니다. 객체 지향 메커니즘을 매우 잘 지원합니다. 연결된 목록, 확장 가능한 배열 등 공통 데이터 구조로 구성된 라이브러리는 낮은 수준의 세부 사항을 처리하는 부담을 덜어줍니다.
단점: 규모가 매우 크고 복잡합니다. C 언어와 마찬가지로 구문 남용 문제가 있습니다. C보다 느립니다. 대부분의 컴파일러는 전체 언어를 올바르게 구현하지 않습니다.
이식성: C 언어보다 훨씬 낫지만 여전히 그다지 낙관적이지는 않습니다. C 언어와 동일한 단점을 가지고 있기 때문에 대부분의 이식 가능한 사용자 인터페이스 라이브러리는 C++ 개체를 사용하여 구현됩니다.
C++로 작성된 게임: 많고 많습니다.
대부분의 상용 게임은 C 또는 C++로 작성됩니다.
정보: "C++ 프로그래밍 언어"의 최신 버전은 매우 좋습니다. 튜토리얼로서 두 개의 캠프가 있습니다. 하나는 C를 알고 있다고 가정하고 다른 하나는 그렇지 않다고 가정합니다. 지금까지 최고의 C++ 튜토리얼은 "C++를 두려워하는 사람"입니다. 이미 C에 익숙하다면 "C++ 스스로 가르쳐 보세요"를 시도해 보세요.
3. C++를 배워야 하나, 아니면 C부터 시작해야 하나
이 말은 마음에 안 들지만, “어떤 언어를 사용해야 합니까?” 다음으로 가장 많이 받는 질문입니다. 문제. 불행히도 표준적인 대답은 없습니다. C를 스스로 배우고 이를 사용하여 프로그램을 작성하면 많은 시간을 절약할 수 있지만 이 방법을 사용하는 데는 두 가지 단점이 있습니다.
객체 지향 지식이 여러분의 학습에 포함될 수 있기 때문에 놓칠 수 있습니다. 게임에서 데이터 모델링을 보다 효율적으로 만드는 것입니다.
1인칭 슈팅 게임을 포함한 대규모 상용 게임 중 상당수는 C++를 사용하지 않습니다. 그러나 이러한 프로그램의 작성자는 이전 C 형식을 사용하더라도 일반적으로 객체 지향 프로그래밍 기술을 고수합니다. 단지 C를 배우고 싶다면 최소한 OO(객체 지향) 프로그래밍 기술을 스스로 배워야 합니다. OO는 시뮬레이션(게임)을 위한 완벽한 방법입니다. OO를 배우지 않으면 "열심히" 작업해야 합니다.
4. 어셈블리 언어
분명히 어셈블리는 최초의 컴퓨터 언어입니다. 어셈블리 언어는 실제로 컴퓨터 프로세서가 실제로 실행하는 명령을 명령 형식으로 표현한 것입니다. 즉, 레지스터 및 스택과 같은 프로세서의 하위 계층을 사용하여 작업하게 됩니다. 자체 문서화와 관련된 영어와 유사한 언어를 찾고 있다면 이는 원하는 것이 아닙니다.
말 그대로, 다른 언어로 할 수 있는 모든 것은 어셈블리도 할 수 있지만 그렇게 간단하지는 않습니다. 물론 어디든 운전할 수 있거나 걸어갈 수 있다고 말하는 것과 같습니다. 단지 어려움일 뿐입니다. . 좋은 말이지만 새로운 기술로 인해 사용이 더 쉬워졌습니다.
일반적으로 게임에서는 어셈블리 언어를 단독으로 사용하지 않습니다. 게임은 주로 성능을 향상시키는 비트와 조각에 어셈블리를 사용합니다. 예를 들어 전체 Doom Slayer는 어셈블리를 사용하는 여러 드로잉 프로그램과 함께 C로 작성되었습니다. 이러한 절차는 초당 수천 번 호출되므로 최대한 간결하게 작성하면 게임 성능을 향상시키는 데 도움이 됩니다. C에서 어셈블리로 작성된 함수를 호출하는 것은 매우 간단하므로 두 언어를 동시에 사용하는 것은 문제가 되지 않습니다.
특별 참고 사항: 언어 이름은 "어셈블리"입니다. 어셈블리 언어를 실제 기계어 코드로 변환하는 도구를 "어셈블러"라고 합니다. 언어를 "어셈블러"라고 부르는 것은 흔히 잘못된 이름이므로 해당 언어에 대한 올바른 이름으로 시작하세요.
장점: 가장 작고 가장 빠른 언어입니다. 어셈블러 마스터는 다른 어떤 언어보다 훨씬 빠른 속도로 프로그램을 작성할 수 있습니다. 프로세서의 최신 기능을 직접 사용할 수 있으므로 가장 먼저 활용하게 될 것입니다.
단점: 배우기 어렵고 구문이 모호하며 효율성에 대한 고집으로 인해 추가 코드가 많이 필요합니다. 마음이 약한 사람에게는 적합하지 않습니다.
이식성: 0에 가깝습니다. 언어가 단일 프로세서용으로 설계되었기 때문에 이식성이 전혀 없었습니다. 특정 프로세서의 확장 기능을 사용하는 경우 코드를 동일한 유형의 다른 프로세서로 이식할 수도 없습니다(예를 들어 AMD의 3DNow 명령어는 다른 Pentium 시리즈 프로세서로 이식할 수 없습니다).
어셈블리로 작성된 게임: 전적으로 어셈블리로 개발된 상용 게임은 본 적이 없습니다. 그러나 일부 게임에서는 시간이 중요한 대부분의 부품에 조립을 사용합니다.
문서: 어셈블리 언어 문서를 찾고 있다면 주로 칩 문서를 찾고 있습니다. Intel, AMD, Motorola 등과 같은 인터넷에는 해당 프로세서에 대한 정보가 있습니다. 책으로는 "Assembly Language: Step-By-Step"이 학습할 가치가 충분히 있습니다.
5. 파스칼 언어
파스칼 언어는 1970년대 초 니콜라스 워스(Nicolas Wirth)가 FORTRAN과 COBOL이 학생들에게 구조화된 프로그래밍을 훈련하도록 강요하지 않은 것에 실망하여 설계했습니다. 스파게티 코드'가 표준이 되었고, 당시의 언어도 이에 반대하지 않았습니다. Pascal은 구조화된 프로그래밍을 시행하도록 설계되었습니다. Pascal은 원래 교육 목적으로만 설계되었지만 결국에는 많은 팬이 상업용 프로그래밍에 진출하는 데 도움을 주었습니다. Borland가 IBM PC에서 Turbo Pascal을 출시했을 때 Pascal은 영광의 순간을 누렸습니다. 통합 편집기, 초고속 컴파일러 및 저렴한 가격으로 인해 파스칼 프로그래밍은 거부할 수 없게 되었고, 파스칼 프로그래밍은 MS-DOS용 소규모 프로그램을 작성하는 데 선택되는 언어가 되었습니다.
그러나 시간이 지남에 따라 C 컴파일러는 더 빨라졌고 뛰어난 내장 편집기와 디버거를 갖게 되었습니다. Pascal은 1990년에 Windows가 대중화되면서 종말을 맞이했습니다. Borland는 Pascal을 포기하고 Windows용 프로그램 작성을 위해 C++에 관심을 돌렸습니다. 터보 파스칼은 금방 잊혀졌습니다.
마침내 1996년에 Borland는 "Visual Basic 킬러"인 Delphi를 출시했습니다. 멋진 사용자 인터페이스를 갖춘 빠른 파스칼 컴파일러입니다. 끊임없는 노력으로 인해 많은 열성 팬을 빠르게 확보했습니다.
기본적으로 Pascal은 C보다 간단합니다. 구문은 비슷하지만 C에 있는 간결한 연산자가 많이 부족합니다. 이것은 좋은 일이기도 하고 나쁜 일이기도 합니다. 이해하기 어려운 "스마트" 코드를 작성하는 것은 어렵지만 비트 조작과 같은 일부 하위 수준 작업도 어렵게 만듭니다.
장점: 배우기 쉽고 플랫폼 의존적인 작업(Dephi)이 매우 좋습니다.
단점: 파스칼(Modula, Oberon)의 객체지향 후속 제품인 "세계적 추세"는 아직 성공하지 못했습니다. 컴파일러 개발자는 언어 표준을 인식하지 않습니다. 특허.
이식성: 매우 좋지 않습니다. 언어 기능은 플랫폼마다 다르며 플랫폼별 기능을 처리할 수 있는 이식성 도구 키트는 없습니다.
파스칼로 작성된 게임: 여러 가지. DirectX의 Delphi 구성 요소는 게임 분야를 더 크게 만듭니다.
정보: Delphi와 관련된 정보를 찾으려면 Inprise Delphi 페이지를 방문하세요.
6. 비주얼 베이직
하, 베이직. 80년대 석기 시대에는 프로그래머 초보자를 위한 첫 번째 언어였습니다. BASIC의 원래 형태는 배우기 쉽지만, 끔찍할 정도로 체계적이지 못했습니다. GOTO로 가득 찬 "파우더 코드"를 아무런 주저함 없이 사용했습니다. BASIC 줄 번호와 GOSUB 명령을 떠올릴 때 눈물을 멈출 수 있는 사람은 거의 없습니다.
90년대 초반으로 돌아가서 Apple이 기대했던 거대하지는 않았지만 HyperCard는 여전히 Windows에서 비교할 수 없는 매력적인 작은 프로그래밍 환경이었습니다. ToolBook과 같은 Windows용 HyperCard 복제본은 느리고 투박하며 비용이 많이 듭니다. HyperCard와 경쟁하기 위해 Microsoft는 Thunder라는 소규모 프로그래밍 환경의 라이센스를 취득하고 당시 매우 혁신적인 사용자 인터페이스를 갖춘 Visual Basci 1.0으로 출시했습니다. 언어는 여전히 Basic(더 이상 모두 대문자가 아님)이라고 불리지만 더 구조화되었으며 줄 번호가 제거되었습니다. 실제로 이 언어는 TRS-80, Apple II 및 Atari에 내장된 이전 ROM BASIC보다 기본 스타일 동사가 있는 Pascal에 더 가깝습니다.
6가지 버전 이후 Visual Basic은 매우 아름다워졌습니다. 사용자 인터페이스는 많이 바뀌었지만 "사용자 인터페이스에 코드를 묶는다"는 주제는 그대로 남아 있습니다. 이는 적시 컴파일과 결합되면 신속한 프로토타이핑을 위한 탁월한 환경이 됩니다.
장점: 깔끔한 편집 환경. 배우기 쉽고 적시 컴파일을 통해 간단하고 빠른 프로토타이핑이 가능합니다. 수많은 플러그인을 사용할 수 있습니다. 타사 DirectX 플러그인이 있지만 DirectX 7은 Visual Basic 지원을 제공할 준비가 되어 있습니다.
단점: 프로그램이 매우 크고 실행하려면 여러 개의 거대한 런타임 동적 링크 라이브러리가 필요합니다. 양식 기반 및 대화 상자 기반 프로그램은 완료하기 쉽지만 좋은 그래픽 프로그램을 작성하는 것은 더 어렵습니다. VB의 데이터 구조가 C에 잘 매핑되지 않기 때문에 Windows API 프로그램을 호출하는 것은 매우 서투릅니다. OO 기능이 있지만 완전히 객체 지향적이지는 않습니다. 특허.
이식성: 매우 좋지 않습니다. Visual Basic은 Microsoft 제품이므로 당연히 이를 구현하는 플랫폼으로 제한됩니다. 즉, 선택할 수 있는 항목은 Windows, Windows 또는 Widnow입니다. 물론 VB 프로그램을 Java로 변환할 수 있는 도구도 있습니다.
Visual Basic으로 작성된 게임: 일부. VB로 작성된 무료 게임이 많이 있으며 일부는 상업용입니다.
정보: Microsoft의 VB 페이지에 몇 가지 정보가 있습니다.
7. Java
Java는 원래 Sun이 임베디드 프로그램용으로 설계한 이식 가능한 "작은 C++"입니다. 웹 페이지에서 작은 프로그램을 실행한다는 아이디어는 정말 많은 사람들의 관심을 끌었고, 그 결과 이 언어가 급속도로 상승했습니다. Java는 웹 페이지에 애니메이션을 삽입하는 데 적합할 뿐만 아니라 완전한 소프트웨어 프로그래밍을 위한 놀라운 작은 언어라는 것이 밝혀졌습니다. "가상 머신" 메커니즘, 가비지 수집 및 포인터 부족을 통해 충돌이 발생하지 않고 리소스가 누출되지 않는 안정적인 프로그램을 쉽게 구현할 수 있습니다.
C++의 공식적인 후속편은 아니지만 Java는 C++에서 많은 구문을 차용했습니다. C++의 많은 복잡한 기능을 폐기하여 컴팩트하고 배우기 쉬운 언어를 제공합니다. C++와 달리 Java는 객체 지향 프로그래밍을 강요하며 Java에서 객체 지향이 아닌 프로그램을 작성하는 것은 Pascal에서 "스파게티 코드"를 작성하는 것만큼 어렵습니다.
장점: 바이너리 코드는 다른 플랫폼으로 이식 가능합니다. 웹 페이지에서 프로그램을 실행할 수 있습니다. 포함된 클래스 라이브러리는 매우 표준적이고 매우 강력합니다.
자동 할당 및 가비지 수집은 프로그램의 리소스 누출을 방지합니다. 인터넷에는 수많은 코드 예제가 있습니다.
단점: 네이티브 기계어 코드 대신 이식 가능한 바이트코드를 실행하기 위해 "가상 기계"를 사용하면 프로그램이 실제 컴파일러보다 느립니다. Java의 속도를 크게 향상시키는 많은 기술(예: "Just-In-Time" 컴파일러)이 있지만 속도는 결코 기계 코드 솔루션만큼 빠르지 않습니다. AWT와 같은 초기 기능은 신중하게 고려되지 않았으며 공식적으로는 더 이상 사용되지 않지만 이전 버전과의 호환성을 유지하기 위해 유지해야 했습니다. 기술이 발전할수록 낮은 수준의 기계 기능을 처리하기가 더 어려워졌고, Sun은 언어에 새로운 "축복받은" 기능을 추가하기에는 너무 느렸습니다.
이식성: 최고이지만 여전히 있어야 할 위치에 있지 않습니다. 하위 수준 코드는 이식성이 매우 뛰어나지만 일부 플랫폼에서는 많은 UI와 새로운 기능이 불안정합니다.
Java로 작성된 게임: 웹에는 수많은 작은 애플릿이 있지만 일부만 상업용입니다. Java를 내부 스크립팅 언어로 사용하는 여러 상용 게임이 있습니다.
정보: Sun의 공식 Java 페이지에는 좋은 정보가 있습니다. IBM에는 매우 훌륭한 Java 페이지도 있습니다. JavaLobby는 Java 뉴스를 볼 수 있는 최고의 장소입니다.
8. 제작 도구
위에 언급된 프로그래밍 언어는 대부분의 상용 게임에 적용됩니다. 하지만 한 가지 예외가 있는데, 그 부재가 눈에 띄는 큰 게임이다.
'신비의 섬'. 맞습니다. 베스트셀러 상용 게임은 위의 언어를 사용하여 컴파일되지 않습니다. 하지만 어떤 사람들은 "Mysterious Island"의 99%가 3D 모델링 도구를 사용하여 제작되었으며 기본 프로그래밍 로직이 HyperCard에서 완성되었다고 말합니다.
대부분의 저작 도구는 더 높은 수준에서 작동한다는 점을 제외하면 Visual Basic과 약간 비슷합니다. 대부분의 도구는 일종의 드래그 앤 드롭 순서도를 사용하여 프로세스 제어를 시뮬레이션합니다. 통역 기능이 내장된 프로그래밍 언어는 많지만 위에서 언급한 독립 실행형 언어만큼 강력한 언어는 없습니다.
장점: 신속한 프로토타이핑 - 게임이 도구의 목적에 적합하다면 다른 언어보다 게임을 더 빠르게 실행할 수 있습니다. 대부분의 경우 코딩이 필요하지 않은 간단한 게임을 만들 수 있습니다. Shockware 및 IconAuthor 플레이어와 같은 플러그인을 사용하면 다양한 저작 도구로 생성된 프로그램을 웹에 게시할 수 있습니다.
단점: 특허권, 어떤 기능이 추가될지는 도구 제작자의 판단에 달려 있습니다. 이러한 창의적인 도구로는 할 수 없는 일이 많기 때문에 이러한 도구가 게임의 요구 사항을 충족하는지 여부를 고려해야 합니다. 일부 도구는 엄청나게 비대한 프로그램을 생성합니다.
이식성: 저작 도구는 독점적이므로 이식성은 해당 도구가 제공하는 기능과 관련이 있습니다. Director와 같은 일부 시스템은 여러 플랫폼에서 생성 및 실행될 수 있고, 일부 도구는 특정 플랫폼에서 생성되어 여러 플랫폼에서 실행되며, 일부 도구는 단일 플랫폼에서만 생성 및 실행될 수 있습니다.
저작 도구를 사용하여 작성된 게임: "Mysterious Island" 및 동일한 유형의 기타 어드벤처 게임. 모든 Shockwave 게임은 온라인 상태입니다.
정보: Director, HyperCard, SuperCard, IconAuthor, Authorware.
9. 결론
"어떤 언어를 사용해야 합니까?"라는 질문에 대해 좀 더 표준적인 결론을 얻고 싶을 수도 있습니다. 불행하게도 모든 경우에 적용할 수 있는 단일 솔루션은 없습니다. C는 빠르고 작은 프로그램에 적합하지만 객체 지향 프로그래밍을 지원하지 않습니다. C++는 객체 지향을 완벽하게 지원하지만 매우 복잡합니다. Visual Basic과 Delphi는 배우기 쉽지만 이식성이 뛰어나고 독점적이지 않습니다. Java에는 뛰어난 기능이 많이 있지만 속도가 느립니다. 저작 도구는 가능한 한 빨리 프로그램을 생성할 수 있지만 특정 유형의 프로그램에서만 작동합니다. 가장 좋은 접근 방식은 작성하려는 게임 종류를 결정하고 게임을 가장 잘 지원하는 언어를 선택하는 것입니다. "30일 평가판" 관행이 업계 표준이 된 것은 좋은 일입니다.