Asens Game Programming
Asens Game Programming
This article is about programming video games. For a broader overview of the subject,
see video game development.
Activities/jobs[show]
Development[show]
Types[show]
Topics[show]
Related[show]
Lists[show]
v
t
e
Contents
1Development process
o 1.1Prototyping
o 1.2Game design
o 1.3Production
o 1.4Testing
o 1.5Nearing completion
o 1.6Maintenance
o 1.7Duration
2Tools
o 2.1Programming languages
2.2.1Graphic APIs
2.2.2Other APIs
3Game structure
4Hobbyists
5See also
6References
7External links
o 7.1Wikis
Development process[edit]
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.
Prototyping[edit]
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.
Game design[edit]
Main article: Game design
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.
Production[edit]
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.
Testing[edit]
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.
Nearing completion[edit]
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.
Maintenance[edit]
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.
Duration[edit]
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.
Tools[edit]
Like other software, game development programs are generated from source code to the
actual program (called the executable) by a compiler. Source code can be developed with
almost any text editor, but many professional game programmers use a full integrated
development environment. Once again, which IDE one uses depends on the target platform.
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.
Programming languages[edit]
Language Features
Object-oriented, garbage-collected,
Java
widely portable (via a virtual machine)
Object-oriented, garbage-collected,
C#, Visual Basic .NET, etc.
interfaces with Microsoft products
Object-oriented, interfaces
Objective-C, Swift
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 librariesbeing 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,[1]
[2]
and the performance gap between idiomatic code written in modern compiled languages is
negligible.[3][4] The most popular languages are usually procedural/object-oriented and
implemented via compilers; for example, C,[5]C++,[5][6] and Java.[7] 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.[8]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.[9] However, as technology has
advanced, so have the options for game development on consoles. Nintendo,[10] Microsoft,
and Sony[11] all have differing SDKs for their Wii U, Nintendo Switch, Xbox One, and PlayStation
4 consoles, respectively.
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.[6][12] Many developers have created custom languages altogether for their games,
such as id Software's QuakeC and Epic Games' UnrealScript.
GNU/Linux yes no no no
Android yes no no no
Sailfish in Dev 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.[13]
A well established personal computer platform is Microsoft Windows. Since it came pre-
installed on almost ninety percent of PCs sold, it now has the largest user base.[citation needed] The
two most popular 3D graphics APIs for Microsoft Windows are Direct3D and OpenGL. The
benefits and weaknesses of each API are hotly debated among Windows game programmers.
Currently, the most popular Computing platform is Google Android. Since it comes pre-installed
on almost eighty percent of Smartphones sold, Android has the second largest user base, and
increasing. Android uses OpenGL ES & Vulkan (API).
DirectX is a collection of game APIs. Direct3D is DirectX's 3D API. Direct3D is freely available
from Microsoft, as are the rest of the DirectX APIs. Microsoft developed DirectX for game
programmers and continues to add features to the API. The DirectX specification is not
controlled by an open arbitration committee and Microsoft is free to add, remove or change
features. Direct3D is not portable; it is designed specifically for Microsoft Windows and no
other platform (though a form of Direct3D is used on Microsoft's Xbox, Windows Phone 7.5
smartphones and mobile devices which run the Pocket PC operating system).
OpenGL is a portable API specification. Code written with OpenGL is easily ported between
platforms with a compatible implementation. For example, 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 the longest, OpenGL is used by and taught
in colleges and universities around the world.[citation needed] In addition, the development tools
provided by the manufacturers of some video game consoles (such as the Nintendo
GameCube, the Nintendo DS, and the PSP) use graphic APIs that resemble OpenGL. OpenGL
often lags behind on feature updates due to the lack of a permanent development team and
the requirement that implementations begin development after the standard has been
published. Programmers who choose to use it can access some hardware's latest 3D features,
but only through non-standardized extensions. The situation may change in the future as the
OpenGL architecture review board (ARB) has passed control of the specification to
the Khronos Group in an attempt to counter the problem.[14]
Other APIs[edit]
For development on Microsoft Windows, the various APIs of DirectX may be used for
input, sound effects, music, networking and the playback of videos. Many commercial libraries
are available to accomplish these tasks, but since DirectX is available for free, it is the most
widely used.
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.
Game structure[edit]
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 :
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.[15]
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 Microsoft
Windows must operate within the constraints of the process scheduler. Some modern games
run multiple threads so that, for example, the computation of character AI can
be decoupled from the generation of smooth motion within the game. This has the
disadvantage of (slightly) increased overhead, but the game may run more smoothly and
efficiently on hyper-threading or multicore processors and on multiprocessor platforms. With
the computer industry's focus on CPUs with more cores that can execute more threads, this is
becoming increasingly important. Consoles like the Xbox 360 and PlayStation 3already have
more than one core per processor, and execute more than one thread per core.