GAME PROGRAMMING, a subset of game development , is the software
development of video games .
* 1 Development process
* 1.1 Prototyping
* 2 Tools
* 2.1 Programming languages
* 2.2 APIs and libraries
* 2.2.1 Graphic APIs * 2.2.2 Other APIs
* 3 Game structure * 4 Hobbyists * 5 See also * 6 References
* 7 External links
* 7.1 Wikis
Professional game development usually begins with a game design , which itself has several possible origins. Occasionally the game development process starts with no clear design in mind, but as a series of experiments. For example, game designer Will Wright began development of The Sims by getting programmers to experiment with several ideas.
Programmers are often required to produce prototypes of gameplay ideas and features. A great deal of prototyping may take place during pre-production, before the design document is complete, and may help determine what features the design specifies.
Prototypes are developed quickly with very little time for up-front design and mostly act as a proof of concept or to test ideas. They are not expected to work flawlessly, but are developed to try out new, sometimes exotic, ideas.
Though the programmer's main job is not to develop the game design, the programmers often contribute to the design, as do game artists . The game designer will solicit input from both the producer and the art and programming lead for ideas and strategies for the game design. Often individuals in non-lead positions also contribute, such as copywriters and other programmers and artists.
Programmers often closely follow the game design document . As the game development progresses, the design document changes as programming limitations and new capabilities are discovered and exploited.
During production, programmers may create a great deal of source code to create the game described in the game's design document. Along the way, the design document is modified to meet limitations or expanded to exploit new features. The design document is very much a "living document", much of whose life is dictated by programmer's schedules, talent and resourcefulness.
While many programmers have some say in a game's content, most game producers solicit input from the lead programmer as to the status of a game programming development. The lead is responsible for knowing the status of all facets of the game's programming and for pointing out limitations. The lead programmer may also pass on suggestions from the programmers as to possible features they'd like to implement.
With today's visually rich content, the programmer must often interact with the art staff . This very much depends on the programmer's role, of course. For example, a 3D graphics programmer may need to work side by side with the game's 3D modelers discussing strategies and design considerations, while an AI programmer may need to interact very little, if at all, with the art staff. To help artists and level designers with their tasks, programmers may volunteer or be called upon to develop tools and utilities . Many of these may be for a specific purpose and can be buggy due to time constraints (time for development of such tools is often not included in a game's schedule) as well as because they are only for in-house use anyway. Many game tools are developed in RAD languages for quicker development and may be discarded after the completion of the game.
Main article: Game testing
The formal quality assurance testing process, performed by professional game testers , begins well into game development. High-budget titles may begin testing with the first playable alpha , while low-budget and casual games might not enter testing until a release candidate is ready. The programmers' task is to fix errors and bugs as such are discovered by the QA teams.
Final tasks include "polishing" the game, such as programmers fixing occasional bugs—from minor to catastrophic—that may arise during the last phases of testing .
Game developers may have a beta testing period, but the definition of such varies from developer to developer. Often a beta contains all of the game's features, but may have a few bugs or incomplete content. Few games are given a public beta period, for example, to measure stress tolerance for game servers .
When the game is deemed complete, it is said to have "gone gold " and is shipped off to the publisher. Depending on circumstances, the publisher may then subject it to its own quality assurance or may begin pressing the game from the gold master .
Once a game ships, the maintenance phase for the video game begins. Programmers wait for a period to get as many bug reports as possible. Once the developer thinks they've obtained enough feedback, the programmers start working on a patch . The patch may take weeks or months to develop, but it's intended to fix most bugs and problems with the game. Occasionally a patch may include extra features or content or may even alter gameplay.
Most modern games take from one to three years to complete. The length of development depends on a number of factors, but programming is required throughout all phases of development except the very early stages of game design.
Like other software, game development programs are generated from
source code to the actual program (called the executable) by a
In addition to IDEs, many game development companies create custom tools developed to be used in-house. Some of these include prototypes and asset conversion tools (programs that change artwork, for example, into the game's custom format). Some custom tools may even be delivered with the game, such as a level editor .
Game development companies are often very willing to spend thousands of dollars to make sure their programmers are well equipped with the best tools . A well outfitted programmer may have two to three development systems and multiple monitors dominating their office or cubicle.
C Widely known, widely portable, numerous APIs, compiles to machine code
Java Object-oriented, garbage-collected , widely portable (via a virtual machine )
C# , Visual Basic .NET , etc. Object-oriented, garbage-collected, interfaces with Microsoft products
Objective-C , Swift Object-oriented, interfaces with Apple products
Once the game's initial design has been agreed upon, the development language must be decided upon. The choice depends upon many factors, such as language familiarity of the programming staff, target platforms, the execution speed requirements and the language of any game engines , APIs or libraries being used.
For personal computers , the language selected may be little more than a matter of preference. Language bindings for popular libraries such as SDL and Allegro are widespread, and the performance gap between idiomatic code written in modern compiled languages is negligible. The most popular languages are usually procedural /object-oriented and implemented via compilers ; for example, C , C++ , and Java . However, developers may take into account domain-specific features, such as interfacing with the operating system, and resilience to reverse engineering for online video games. Many games are not written in one language exclusively, and may combine two or more languages; For example, Unity , a popular game engine, has different pieces written in C, C++, and C# .
For consoles , the support of the target platform is usually the most
considered factor. In the past, video games for consoles were written
almost exclusively in assembly due to limited resources in terms of
both storage and processing speed. However, as technology has
advanced, so have the options for game development on consoles.
High-level scripting languages are increasingly being used as
embedded extensions to the underlying game written in a compiled
programming language, for the convenience of both the original
developer and anyone who would wish to mod the game. Lua is a very
popular choice, as its API is written in
ANSI C and the language is
designed to be embedded into other applications. Many developers
have created custom languages altogether for their games, such as id
APIS AND LIBRARIES
A key decision in game programming is which, if any, APIs and libraries to use. Today, there are numerous libraries available which take care of key tasks of game programming. Some libraries can handle sound processing, input, and graphics rendering. Some can even handle some AI tasks such as pathfinding . There are even entire game engines that handle most of the tasks of game programming and only require coding game logic .
Which APIs and libraries one chooses depends largely on the target
platform. For example, libraries for
PlayStation 2 development may not
be available for
Graphics API usage across Operating Systems: OS VULKAN DIRECT X GNMX METAL
WINDOWS 10 yes yes no no
MAC for purchase no no yes
GNU/LINUX yes no no no
ANDROID yes no no no
IOS for purchase no no yes
TIZEN in Dev no no no
SAILFISH in Dev no no no
XBOX ONE no yes no no
ORBIS OS (PS4) no no yes no
NINTENDO SWITCH yes no no no
Today, graphics are a key defining feature of most games. While 2D graphics used to be the norm for games released through the mid-1990s, most AAA games now boast full 3D graphics , even for games which are largely 2D in nature, such as Civilization III . However, purely 2D graphics have experienced a Renaissance with indie games .
A well established personal computer platform is
Currently, the most popular
OpenGL is a portable API specification. Code written with
easily ported between platforms with a compatible implementation. For
Quake II , which uses OpenGL, was ported from Windows to
Linux by a fan of the game.
OpenGL is a standard maintained by the
OpenGL Architecture Review Board (ARB). The ARB meets periodically to
update the standard by adding emerging support for features of the
latest 3D hardware. Since it is standards based and has been around
OpenGL is used by and taught in colleges and universities
around the world. In addition, the development tools provided by the
manufacturers of some video game consoles (such as the Nintendo
For development on
For console programming, the console manufacturers provide facilities for rendering graphics and the other tasks of game development. The console manufacturers also provide complete development systems, without which one cannot legally market nor develop games for their system. Third-party developers also sell toolkits or libraries that ease the development on one or more of these tasks or provide special benefits, such as cross-platform development capabilities.
The central component of any game, from a programming standpoint, is the game loop. The game loop allows the game to run smoothly regardless of a user's input or lack thereof.
Most traditional software programs respond to user input and do nothing without it. For example, a word processor formats words and text as a user types. If the user doesn't type anything, the word processor does nothing. Some functions may take a long time to complete, but all are initiated by a user telling the program to do something.
Games, on the other hand, must continue to operate regardless of a user's input. The game loop allows this. A highly simplified game loop, in pseudocode , might look something like this :
while( user doesn't exit ) check for user input run AI move enemies resolve collisions draw graphics play sounds end while
The loop may be refined and modified as game development progresses, but most games are based on this basic idea.
Game loops differ depending on the platform they are developed for.
For example, games written for DOS and many consoles can dominate and
exploit available processing resources without restraint. However,
games for a modern PC operating system such as
The only platforms widely available for hobbyists to program are
consumer operating systems , such as Android, iOS, Windows, Mac,
Linux, etc. This is because development on game consoles requires
special development systems that cost thousands of dollars. Often
these must be obtained from the console manufacturer and are only sold
or leased to professional game development studios. However, Microsoft
used to distribute a game development framework, XNA , which runs on
Some software engineering students program games as exercises for learning a programming language or operating system .
Some hobbyists may use software packages that help with game
development, such as
* Game development portal
* ^ "SDL Language Bindings". Retrieved 2015-11-08. * ^ "Allegro - Language bindings". Retrieved 2015-11-08. * ^ Corlan, Alexandru-Dan (2003). "Programming language benchmarks". Retrieved 2015-11-08. * ^ Corlan, Alexandru-Dan (2011-06-11). "Programming Languages Benchmarks". Retrieved 2015-11-08. * ^ A B Corlan, Alexandru-Dan (2011). "Game Programming in C and C++". Retrieved 2015-11-08. * ^ A B DeLoura, Mark (2009-03-05). "The Engine Survey: General results". Retrieved 2015-11-08. * ^ Corlan, Alexandru-Dan. "LWJGL - Projects". Retrieved 2015-11-08. * ^ 'No Bugs' Hare. "Chapter V(b) from "Development">"". * ^ Hyde, Randy (1985). Using 6502 Assembly Language. * ^ Helgason, David (November 2, 2012). "Game developers, start your Unity 3D engines". GamesBeat (Interview). Interview with Dean Takahashi. VentureBeat . Retrieved July 13, 2014. * ^ " Why Sony Is Using LLVM/Clang On The PlayStation 4". Phoronix.com. Retrieved 17 November 2014. * ^ Corlan, Alexandru-Dan (2015-03-24). "Lua: Uses". Retrieved 2015-11-08. * ^ A B "MoltenVK - Run Vulkan on iOS and OS X". * ^ "Why Are Most Indie Games 2D Instead of 3D?". Rampant Games. 2013-05-16. Retrieved 2017-01-01. * ^ "Khronos Places OpenGL and OpenGL ES Conformance Tests into Open Source". Khronos Group Press Release. * ^ "Programming Linux Games, Chapter 1" (PDF). ISBN 1-886411-48-4 . Archived from the original (PDF) on 2007-02-08. * ^ "Report: 79% Of Mobile Developers Prefer To Build For Android". 29 August 2016.