이 질문은 모든 게임 프로그래밍 FAQ에 있는 질문입니다. 이 질문은 게임 개발 포럼에서 일주일에 몇 번씩 올라오는 질문입니다. 좋은 질문이지만 누구도 간단한 답을 줄 수 없습니다. 일부 응용 프로그램에는 항상 다른 언어보다 우수한 컴퓨터 언어가 있습니다. 다음은 게임 제작에 사용되는 주요 프로그래밍 언어 몇 가지와 그 장단점입니다. 이 글이 결정에 도움이 되길 바랍니다.
1, C
포트란과 코볼이 1세대 고수준 컴파일 언어라면 C는 그 손자라고 할 수 있습니다. c는 1970년대에 Dennis Ritchie가 만들었으며, 코볼과 포트란의 구조적 후계자인 ALGOL로부터 더 많은 것을 지속적으로 상속받아 훨씬 더 강력하게 설계되었습니다. 상속. c는 이전 버전보다 더 복잡하고 단순한 버전으로 설계되어 운영 체제와 같은 시스템 수준의 프로그램을 작성하는 데 적합했습니다. 그때까지 운영 체제는 이식성이 없는 어셈블리 언어로 작성되었습니다. c는 시스템 수준의 코드 이식성을 가능하게 한 최초의 프로그래밍 언어였습니다.
C는 구조화된 프로그래밍을 지원하므로 C 프로그램은 하나의 통합된 코드 블록처럼 GOTO 문으로 흐름을 제어하는 것이 아니라 위에서 아래로 실행되는 분리된 함수 호출(콜)의 모음으로 작성됩니다. 따라서 C 프로그램은 통합 포트란과 코볼의 "속이 빈 파우더 코드"보다 훨씬 간단합니다. 실제로 C에도 GOTO 문이 있지만 기능이 제한되어 있으며 매우 복잡한 구조의 솔루션에만 권장됩니다.
시스템 프로그래밍에 뿌리를 두고 있기 때문에 C와 어셈블리 언어를 결합하는 것은 매우 쉽습니다. 함수 호출 인터페이스는 매우 간단하며 별도의 어셈블리 모듈을 연결할 필요 없이 어셈블리 언어 명령어를 C 코드에 포함할 수 있습니다.
장점: 작고 빠른 프로그램을 작성할 때 좋습니다. 어셈블리 언어와 결합하기 쉽습니다. 고도로 표준화되어 있어 다른 플랫폼의 버전이 매우 유사합니다.
단점: 객체 지향 기술을 쉽게 지원하지 않습니다. 구문이 때때로 이해하기 어렵고 남용으로 이어질 수 있습니다.
이식성: C 언어의 핵심과 ANSI 함수 호출은 이식 가능하지만 프로세스 제어, 메모리 관리 및 간단한 파일 처리 범위까지만 이식 가능합니다. 그 외의 모든 것은 플랫폼과 관련이 있습니다. 예를 들어, Windows와 Mac용 이식 가능한 프로그램을 개발하려면 사용자 인터페이스에서 시스템 관련 함수 호출이 필요합니다. 이는 일반적으로 사용자 인터페이스 코드를 두 번 작성해야 한다는 것을 의미하지만 다행히도 작업 부하를 줄여주는 라이브러리가 있습니다.
c:매우로 작성된 게임.
재료:고전적인 C 언어는 C 프로그래밍 언어입니다. 여러 번 개정되어 원래 크기의 3배로 확장되었지만 여전히 훌륭한 C 입문서입니다. 훌륭한 튜토리얼은 Wight Group의 C Primer Plus입니다.
2. C++
C++ 언어는 C의 후속 언어이며 객체 지향적입니다. 객체 지향 프로그래밍(OOP)은 구조적 프로그래밍의 다음 단계로, OO 프로그램은 객체로 구성되며 객체는 데이터와 함수의 개별적인 집합입니다. 인벤토리에서 사용할 수 있는 객체가 많기 때문에 (적어도 이론적으로는) 프로그램 '건축 자재'를 쌓는 것만큼이나 쉽게 프로그래밍할 수 있습니다. 예를 들어, 객체 모음으로 구현된 많은 GUI와 데이터베이스 라이브러리가 있습니다.
C++는 특히 게임 개발 포럼에서 항상 논쟁의 대상이 되어 왔습니다. 가상 함수와 같은 여러 C++ 함수는 함수 호출에 의사 결정 계층을 추가하며, 비평가들은 C++ 프로그램이 동일한 함수를 사용하는 C 프로그램보다 더 크고 느려질 수 있다고 지적합니다.C++ 지지자들은 C에서 가상 함수에 해당하는 함수를 작성하면 비용이 추가된다고 주장합니다. 이 논쟁은 현재 진행 중이며 조만간 결론이 날 것 같지는 않습니다.
제 생각에는 C++의 추가 비용은 더 나은 언어를 사용하는 데 드는 작은 비용이라고 생각합니다. 1960년대에도 같은 논쟁이 벌어졌는데, 당시 COBOL과 FORTRAN 같은 고급 프로그래밍 언어가 어셈블리 언어를 대체하기 시작했을 때에도 같은 논쟁이 벌어졌습니다. 비평가들은 하이레벨 언어로 작성된 프로그램이 본질적으로 수기로 작성된 어셈블리 언어보다 느리다는 점을 지적했고, 실제로도 그랬죠. 고수준 언어 지지자들은 COBOL과 FORTRAN 프로그램이 작성 및 유지 관리가 더 쉽기 때문에 이러한 작은 성능 손실은 그만한 가치가 있다고 주장합니다.
장점: 대규모 프로그램을 구성하는 데 C보다 훨씬 좋습니다. 객체 지향 메커니즘을 잘 지원합니다. 확장 가능한 배열로 구성된 연쇄 목록 및 라이브러리와 같은 일반적인 데이터 구조는 기본 세부 사항을 처리하는 부담을 덜어줍니다.
단점: 매우 크고 복잡합니다. C와 동일한 구문 남용 문제 발생. C보다 느림. 대부분의 컴파일러가 전체 언어를 올바르게 구현하지 않음.
휴대성: C보다 훨씬 낫지만 여전히 그다지 유망하지는 않습니다. C와 동일한 단점을 가지고 있기 때문에 대부분의 이식성 있는 사용자 인터페이스 라이브러리는 C++ 객체로 구현됩니다.
C++로 작성된 게임: 정말 많습니다. 대부분의 상용 게임은 C 또는 C++로 작성됩니다.
정보: C++ 프로그래밍 언어의 최신 버전은 훌륭합니다. 튜토리얼은 C를 알고 있다고 가정하는 것과 모른다고 가정하는 두 가지 진영이 있습니다. 지금까지 최고의 C++ 강좌는 Who is Africa in C++입니다. 이미 C에 익숙하다면 C++를 직접 배워보세요.
3. C++를 배워야 하나요, 아니면 C부터 시작해야 하나요?
이 질문은 "어떤 언어를 사용해야 하나요?" 다음으로 가장 자주 묻는 질문입니다. 안타깝게도 정답은 없습니다. C를 직접 배우고 프로그램을 작성하면 많은 시간을 절약할 수 있지만, 이 접근 방식에는 두 가지 단점이 있습니다.
게임에서 데이터 모델링을 더 효율적으로 만들 수 있는 객체 지향 지식을 놓칠 수 있다는 점입니다.
1인칭 슈팅 게임을 포함한 많은 대형 상용 게임은 C++를 사용하지 않습니다. 하지만 이러한 프로그램의 작성자는 구형 C 형식을 사용하더라도 일반적으로 객체 지향 프로그래밍 기법을 고수합니다. C만 배우고 싶다면 최소한 OO(객체 지향) 프로그래밍 기법이라도 배우세요. 객체 지향은 시뮬레이션을 위한 완벽한 방법입니다. OO를 배우지 않으면 열심히 노력해야 합니다.
4. 어셈블리 언어
명백하게도 어셈블리는 최초의 컴퓨터 언어입니다. 어셈블리 언어는 실제로 컴퓨터 프로세서가 실제로 실행하는 명령어를 명령 형식으로 표현한 것입니다. 즉, 레지스터와 스택과 같은 프로세서의 기초를 다루게 됩니다. 관련 자기 설명이 있는 영어와 유사한 언어를 찾고 있다면 이것은 원하는 것이 아닙니다.
정확히 말하면, 다른 언어로 할 수 있는 모든 것을 할 수 있지만 그렇게 간단하지는 않습니다. 물론 어딘가를 운전하거나 걸어갈 수 있다고 말하는 것과 같지만, 그것은 단지 어려울 뿐입니다. 사실이지만 새로운 기술을 사용하면 더 쉽게 사용할 수 있습니다.
일반적으로 게임에서는 어셈블리 언어를 자체적으로 사용하지 않습니다. 게임에서 어셈블리는 주로 성능을 향상시키는 부분에만 사용됩니다. 예를 들어, 레이베이저는 전체적으로 C로 작성되었으며, 어셈블리를 사용하는 드로잉 프로그램이 여러 개 있습니다. 이러한 프로그램은 초당 수천 번 호출되므로 최대한 간결하게 작성하면 게임 성능 향상에 도움이 됩니다. C에서 어셈블리로 작성된 함수를 호출하는 것은 매우 간단하므로 두 언어를 동시에 사용해도 문제가 되지 않습니다.
특별 참고: 언어의 이름은 "assembly"입니다. 어셈블리 언어를 실제 기계 코드로 변환하는 도구를 "어셈블러"라고 합니다. 이 언어를 "어셈블러"라고 지칭하는 것이 일반적이므로 정확한 언어 이름으로 시작하세요.
장점: 가장 작고 빠른 언어. 어셈블러는 다른 어떤 언어보다 빠르게 프로그램을 작성할 수 있습니다. 프로세서의 최신 기능을 직접 사용할 수 있기 때문에 가장 먼저 사용할 수 있습니다.
단점:배우기 어렵고, 구문이 모호하며, 효율성이 지속적이지 않고, 추가 코드가 많이 발생하므로 심장이 약한 사람에게는 적합하지 않습니다.
휴대성: 거의 제로에 가깝습니다. 이 언어는 단일 프로세서용으로 설계되었기 때문에 이식성이 전혀 없습니다. 전용 프로세서 확장을 사용하면 코드가 같은 유형의 다른 프로세서로 이식되지도 않습니다(예: AMD의 3DNow 명령어는 다른 펜티엄 시리즈 프로세서로 이식되지 않습니다).
어셈블리로 작성된 게임: 저는 어셈블리로만 개발된 상용 게임은 알지 못합니다. 그러나 일부 게임은 대부분의 중요한 부품에 어셈블리를 사용합니다.
정보: 어셈블리 언어 설명서를 찾고 있다면 주로 칩 설명서를 찾아야 합니다. 인텔, AMD, 모토로라와 같은 프로세서에 대한 정보는 인터넷에 있습니다. 책으로는 어셈블리 언어:단계별 학습을 추천합니다.
5. 파스칼 언어
파스칼은 1970년대 초에 니콜라스 워스가 FORTRAN과 COBOL이 학생들에게 구조화된 프로그래밍 교육을 강요하지 않고, 당시의 언어가 반대하지 않는 "중공 코드"가 표준이 되는 것에 좌절감을 느껴 설계한 언어입니다. 파스칼은 구조화된 프로그래밍을 수행하도록 설계되었으며, 원래는 교육용으로 엄격하게 설계되었지만 결국 많은 지지자들에 의해 상용 프로그래밍에 도입되었습니다. 파스칼의 영광의 순간은 볼랜드가 IBM PC에서 Turbo Pascal을 출시하면서부터였습니다. 통합 편집기, 초고속 컴파일러, 저렴한 가격은 거부할 수 없는 매력으로 다가왔고, 파스칼은 MS-DOS용 소형 프로그램을 작성하는 데 가장 많이 사용되는 언어가 되었습니다.
그러나 아주 짧은 시간 안에 C 컴파일러가 더 빨라지고 뛰어난 내장 편집기와 디버거를 갖추게 되면서 파스칼은 1990년 Windows가 대중화되기 시작하면서 종말을 고했고, 볼랜드는 파스칼을 버리고 Windows용 프로그램을 작성하는 C++로 관심을 돌리게 됩니다. 터보 파스칼은 곧 잊혀졌습니다.
1996년, 마침내 볼랜드는 멋진 사용자 인터페이스를 갖춘 빠른 파스칼 컴파일러인 '비주얼 베이직 블랙 보이'인 델파이를 출시했습니다. 끈질긴 인내 덕분에 빠르게 많은 팬층을 확보했습니다.
기본적으로 파스칼은 C보다 간단합니다. 구문은 비슷하지만 C에 있는 깔끔한 연산자 중 상당수가 부족합니다. 이는 좋은 점이자 나쁜 점입니다. 이해하기 어려운 '똑똑한' 코드를 작성하기 어렵고, 비트 조작과 같은 일부 저수준 연산도 어렵게 만들 수 있습니다.
장점: 배우기 쉽고, 플랫폼 관련 연산(Dephi)이 훌륭합니다.
단점: 월드 트렌드의 객체 지향 파스칼 후속 제품(모듈라, 오베론)은 성공적이지 못했습니다. 컴파일러 개발자는 언어 표준을 인정하지 않습니다. 특허.
포터빌리티: 매우 열악합니다. 언어의 기능은 플랫폼에 따라 변경되며 플랫폼 관련 기능을 처리할 수 있는 이식 가능한 툴킷이 없습니다.
파스칼로 작성된 게임: 몇 개. DirectX의 델파이 구성 요소는 훨씬 더 큰 플레이 공간을 제공합니다.
정보:델파이 관련 정보를 찾으려면:인프라이즈 델파이 페이지를 방문하세요.
6. 비주얼 베이직
하, 베이직. 1980년대 석기 시대에는 초보자를 위한 첫 번째 언어였습니다. 원래의 기본 형태는 배우기 쉬웠지만 끔찍하게 체계화되어 있었고, 고토의 "속이 빈 파우더 코드"를 사용하는 데 주저하지 않았습니다. 기본 줄 번호와 GOSUB 명령을 떠올릴 때 눈가에 흐르는 눈물을 멈출 수 있는 사람은 거의 없습니다.
90년대 초반으로 거슬러 올라가면, 하이퍼카드는 애플이 기대했던 거물은 아니었지만, 툴북과 같은 하이퍼카드 클론이 느리고 투박하며 비싼 Windows와 경쟁할 수 없는 매력적인 작은 프로그래밍 환경이었습니다. 하이퍼카드와 경쟁하기 위해 마이크로소프트는 썬더 프로그래밍 환경이라는 소규모 프로그래밍 환경에 대한 라이선스 권한을 획득하고 당시로서는 매우 혁신적인 사용자 인터페이스를 갖춘 비주얼 베이직 1.0으로 출시했습니다. 이 언어도 베이직이라고 불렸지만(대문자가 아닌) 좀 더 구조화되어 있었고 줄 번호가 삭제되었습니다. 사실 이 언어는 TRS-80, Apple II, Atari에서 만든 이전 ROM BASIC보다 기본 동사가 있는 파스칼에 더 가까웠습니다.
6번의 릴리스 이후 비주얼 베이직은 매우 아름다워졌습니다. 사용자 인터페이스는 많이 바뀌었지만 '코드와 사용자 인터페이스의 연결'이라는 주제는 여전히 유효합니다. 즉석 컴파일과 결합하면 신속한 프로토타이핑을 위한 훌륭한 환경이 됩니다.
장점: 깔끔한 편집 환경. 배우기 쉽고 즉석에서 컴파일할 수 있어 간단하고 빠른 프로토타이핑이 가능합니다. 다양한 플러그인 사용 가능. 타사 DirectX 플러그인을 사용할 수 있지만, DirectX 7은 Visual Basic을 지원할 준비가 되어 있습니다.
단점: 프로그램이 매우 커서 런타임에 여러 개의 거대한 런타임 동적 연결 라이브러리가 필요합니다. 양식 및 대화 상자 프로그램은 쉽게 만들 수 있지만 좋은 그래픽 프로그램을 작성하기는 어렵습니다. VB의 데이터 구조가 C언어에 잘 매핑되지 않기 때문에 Windows API 프로그램을 호출하는 것이 매우 번거롭습니다. OO 함수가 있지만 완전한 객체 지향이 아닙니다. 특허.
휴대성: 매우 열악합니다. Visual Basic은 Microsoft 제품이기 때문에 구현할 수 있는 플랫폼이 당연히 Microsoft 플랫폼으로 제한됩니다. 즉, 선택할 수 있는 플랫폼은 윈도우, 윈도우 또는 위도우입니다.물론 VB 프로그램을 자바로 변환하는 도구가 있습니다.
Visual Basic으로 작성된 게임:일부. VB로 작성된 * * * 게임이 많이 있으며 일부 상용 게임도 있습니다.
정보:Microsoft의 VB 페이지에 몇 가지 정보가 있습니다.
7. Java
Java는 원래 Sun에서 프로그램 임베딩을 위해 설계한 휴대용 "작은 C++"입니다. 웹에서 작은 프로그램을 실행한다는 아이디어는 많은 관심을 끌었고, 이 언어는 빠르게 유명해졌습니다. Java는 웹 페이지에 애니메이션을 삽입하는 데 유용할 뿐만 아니라 완전한 소프트웨어 프로그래밍을 위한 훌륭한 작은 언어라는 것이 입증되었습니다. "가상 머신", 쓰레기 수집, 포인터리스 메커니즘을 사용하면 충돌이 적고 리소스가 누출되지 않는 안정적인 프로그램을 쉽게 구현할 수 있습니다.
C++의 정식 후속 언어는 아니지만 Java는 많은 구문을 차용하고 있습니다. C++의 복잡한 함수 중 많은 부분을 버리고 간단하고 배우기 쉬운 언어를 만들었습니다. C++와 달리 Java는 객체 지향 프로그래밍을 강제합니다. Java로 객체 지향이 아닌 프로그램을 작성하는 것은 파스칼로 "중공 코드"를 작성하는 것만큼이나 어렵습니다.
장점: 바이너리 코드를 다른 플랫폼으로 포팅할 수 있습니다. 웹 페이지에서 프로그램을 실행할 수 있습니다. 포함된 클래스 라이브러리는 매우 표준적이고 강력합니다. 프로그램에서 리소스 누수를 방지하기 위한 자동 할당 및 쓰레기 수집. 인터넷에 많은 수의 코드 루틴이 있습니다.
단점: 네이티브 코드 대신 이식 가능한 바이트코드를 실행하기 위해 "가상 머신"을 사용하면 실제 컴파일러보다 프로그램이 느려집니다. Java의 속도를 크게 향상시킨 많은 기술("즉석" 컴파일러 등)이 있지만, 그 속도는 머신 코드 솔루션보다 결코 빠를 수 없습니다. AWT와 같은 초기 기능은 신중하게 고려되지 않았고, 공식적으로 사용 중단되었지만 이전 버전과의 호환성을 유지하기 위해 유지해야 했습니다. 기술이 발전할수록 기본 머신 기능을 다루기가 더 어려워집니다. 새로운 "축복받은" 기능을 언어에 추가하는 것은 Sun에게는 너무 느립니다.
이식성: 가장 좋지만, 여전히 부족합니다. 기본 코드는 이식 가능하지만 일부 플랫폼에서는 UI와 새로운 기능의 상당 부분이 불안정합니다.
Java로 작성된 게임: 웹에는 많은 작은 애플트가 있지만, 그 중 일부만 상용 게임입니다. 일부 상용 게임은 내부 스크립팅 언어로 Java를 사용합니다.
정보:Sun의 공식 Java 페이지는 유용한 정보를 제공하며, IBM도 매우 좋은 Java 페이지를 가지고 있습니다.JavaLobby는 Java 뉴스를 위한 최고의 장소입니다.
8. 제작 툴
위에서 언급한 프로그래밍 언어는 대부분의 상용 게임에 적용됩니다. 하지만 예외도 있습니다. 이 대작 게임은 그 부재로 주목할 만합니다.
미스터리 아일랜드. 미스터리 아일랜드는 99%가 3D 모델링 툴로 만들어졌고 기본 프로그래밍 로직은 하이퍼카드로 이루어졌다고 알려져 있지만, 베스트셀러 상업용 게임 중 위의 언어로 작성된 게임은 하나도 없습니다.
대부분의 저작 도구는 비주얼 베이직과 비슷하지만 더 높은 수준에서 작동한다는 점이 다릅니다. 대부분의 도구는 드래그 앤 드롭 방식의 플로차트를 사용하여 프로세스 제어를 시뮬레이션합니다. 많은 프로그래밍 언어에 해석 기능이 내장되어 있지만 위에서 언급한 단일 언어만큼 강력한 것은 없습니다.
장점: 신속한 프로토타이핑 - 게임이 툴의 제작 목적에 적합하다면 다른 언어를 사용할 때보다 더 빠르게 게임을 실행할 수 있습니다. 대부분의 경우 코드 없이도 간단한 게임을 만들 수 있습니다. Shockware 및 IconAuthor 플레이어와 같은 플러그인 프로그램을 사용하면 크리에이티브 툴에서 생성된 많은 프로그램을 웹 페이지에 게시할 수 있습니다.
단점: 특허가 있으며, 어떤 기능이 추가될지는 도구 제작자의 결정에 달려 있습니다. 크리에이티브 툴이 할 수 없는 기능이 많기 때문에 이러한 툴이 게임의 요구 사항을 충족하는지 고려해야 합니다. 일부 툴은 매우 부풀려진 프로그램을 만들 수 있습니다.
휴대성: 크리에이티브 툴은 독점적이기 때문에 휴대성은 툴이 제공하는 기능과 밀접하게 연관되어 있습니다. 디렉터와 같은 일부 시스템은 여러 플랫폼에서 생성 및 실행할 수 있고, 일부 툴은 한 플랫폼에서만 생성 및 실행할 수 있으며, 일부 툴은 단일 플랫폼에서만 생성 및 실행할 수 있습니다.
창작 툴로 제작된 게임: Mysterious Island 및 기타 유사한 어드벤처 게임. 모든 Shockwave 게임은 온라인입니다.
자료:디렉터, 하이퍼카드, 하이퍼카드, 아이콘작가, 저작도구
9. 결론
"어떤 언어를 사용해야 하나요?"라는 질문에 대해 좀 더 표준 결론을 내리고 싶을 것입니다. C는 빠른 애플릿에 적합하지만 객체 지향 프로그래밍을 지원하지 않습니다. C++는 객체 지향 프로그래밍을 완벽하게 지원하지만 복잡합니다. 비주얼 베이직과 델파이는 배우기 쉽지만 이식성이 떨어지고 독점적입니다. 자바는 간결한 기능이 많지만 속도가 느립니다. 저작 도구는 가능한 한 빨리 프로그램을 생성할 수 있지만 특정 유형의 프로그램에서만 작동합니다. 가장 좋은 방법은 어떤 종류의 게임을 제작할지 결정하고 해당 게임을 가장 잘 지원하는 언어를 선택하는 것입니다. '30일 평가판' 방식이 업계 표준이 되고 있다는 점은 다행스러운 일입니다.