Outer Court

Tech - Games Programming overview

Games Programming overview

If you have medium to good hardware and are not against Windows as platform, go directly to the greatest language available right now for 2D (and soon, 3D) programs: BitzBasic. You can get a lot of information in the tutorials around, in the discussion groups online, in the BlitzBasic mailing list, in the BlitzBasic help, or in the printed manual that comes with the registered version of BlitzBasic (which can compile stand-alone executables, the only option not available in the free demo version).

BlitzBasic is a language of the Basic family of languages, known to be beginner-friendly. Another Basic language for which older hardware is enough is QBasic (which comes with Windows 95 and is free), or the later version QuickBasic 4.5 (which can compile your programs into stand-alone executables, as opposed to just interprete them from within the program). QB is a great language to learn programming, games programming or other kind, but it's hard to get multimedia in it (like graphics and music). It's possible, but you will spend time on details that won't teach you any valuable lessons except how to do it in QB, or maybe how to do it in MS-DOS. However, the logic behind a program, the structure etc. is still the same when it's not about Multimedia and when you don't want to start programming Classes, inheritance etc. right now, which are more advanced topics. You can try to get QuickBasic 4.5 somewhere online, it has to be released to the public domain by Microsoft.

If you're into professional games development, like big teamwork 3D games, you might want to look into some C/C++ flavors, as this is the language of most professional game projects and the de-facto industry standard for programming at the time being. C/C++ is fast, and rather low-level. Many tutorials will use C/C++ as language used for samples.

If you're interested in making money (fast), I suppose Java is the right way to take. The syntax is similar to C/C++ (there are only so many syntax flavors around these days, two of the most important being C and Basic style syntax). With it, you can write online games, even if they're of moderate fun you might still be able to sell them to websites; those would probably be customer-made advertisement games for a product. Also, from Java you will learn skills applicaple in a lot of job environments.
Java also allows for some cross-platform programming; the same application will run under different operating systems, as long as they provide the so-called Java Virtual Machine.

If you're mainly interested in Multimedia with some restricted interaction, you can go for Macromedia Director + Lingo (a clumsy language and annoying environment, but it's easy to integrate images, animation and music). You might also take a look at Flash, which I don't really like tho, it's basically to create animations, but you can add some functionality. If you'll be able to work yourself really into it it's pretty sure you got a secure job, as long as this program is in popular use and the Shockwave plug-in is not replaced by a newer technology.

Just to mention it, there's also assembler language (the closest to machine language); in some languages you can write inline-assembly to speed up certain functionality, but with todays compiler's build-in optimizations that's hardly worth the effort anymore, unless you want to write hardware drivers or really low-level routines in say 3D games.

If you want a completely visual, point-and-click interface, my suggestions is (even though I think there might be some interesting programs available): forget about it. You won't get around real programming (basically just typing text) for the time being.

Now, HTML. This is not a programming language. HTML is a markup language; it is content/ data oriented and describes the logical structure of text, and embeds certain media like images in a way the end result will be media- and system-independent. HTML is very simple, by design, because a single document can be used in so many different situations.

Connected to HTML is XML, also a markup-language, to be exact a meta-language to describe markup languages (such as XHTML, HTML as an XML-application). These are all very interesting technologies (which I spend a lot of time with), but those are for structuring the data behind your applications, not to actually implement movement, behavior and so on.

A way to get games right on the webpage (without using those little slow-loading gray boxes known as Java-Applets), is to use DHTML, D for Dynamic. This is a mixture of HTML, JavaScript (not to be confused with Java), and CSS (Cascading Style Sheets, the language to layout a page). With DHTML you can creaty movement and interactivity on a webpage. Most of the games you will create may rely on heavy workarounds and won't be very elegant, fast, or playable. They will also largely depend on the browser the player uses.

Pascal, I don't really know much about its use today. I know the programmer that worked on Arthur used Delphi (the sort of modern Pascal) to write the game, so it can't be too bad for games programming.

DirectX is a technology behind the programming languages on Windows. It's shielding certain Hardware-Specific functionality behind an abstract layer; people have to be less involved into "what system is this running on?" and they can start to focus on the actual logic behind the graphic routines and so on. However, DirectX still can be rather complicated if all you want to do is just determine the game logic. BlitzBasic for example hides DirectX and makes it really easy to create fast and powerful Windows games.

VisualBasic is the current Basic line of Microsoft. It's well-suited for applications, maybe even certain type of Casino or board-games, maybe even for certain strategy games. You can actually also include DirectX in it, but it's still not as easy as could be. For applications however, VB is my language of choice. It's visual, you can drag-and-drop your Windows program (but still not be spared to program the underlying functionality).

If you're interested more in text-games, a whole lot of options are available, like QML (my own language, which is an XML-based Choose-Your-Own-Adventure game creation system, the results to be played on a webpage), or Interactive Fiction languages like Inform or TADS (support and sample programs are heavily available for those).

If your main interest is 3D, you may want to give DarkBasic a chance, even tho I would advise against it since the possible structure of your program is very basic and can't get elegant (read: easy to maintain & easy to debug, readable & self-explanatory, non-redundant). There's also some interesting web-based 3D languages becoming available.

Some words you might come across

API (Application Programming Interface): An abstract layer put between the language you use and the actual underlying technology.

BASIC (Beginner's All-Purpose Symbolic Instruction Code): These languages tend to be relatively slow and "wordy", but also feature easy syntax and self-explanatory source code.

Bitmap/ Vector graphics: A bitmap is a rectangle put on the screen, a map containing pixels of a certain color at each location inside the rectangle. If you mask a color, the pixels of the mask color will not be drawn.
Vector graphics are drawn by geometrical data, like draw a line from point a to b using color c.

Flipping: In games, you can first draw to a hidden screen in the background; once you finished doing so, it's "flipped" with the active, visible screen. This reduces so-called flickering.

FPS (Frames Per Second): Describes the speed in which in-game animation takes place. The higher the FPS, the smoother the animation will appear and the easier it is to the human eye to look at the game for a long period of time.

Gouraud Shading, Vertices, Polygon Reduction...: Terms used in 3D programming, for games like Quake.

Library: A set of common, useful routines included in the program.

Interpreter, Compiler: An interpreter will run the source from within the program. A compiler will create a stand-alone executable to be played without additional programs (however often, certain components need to be installed with the program in order to make it work).

OOP (Object-Oriented Programming): OOP uses things such as classes and inheritance to model the program based on the underlying objects. For example a car might inherit functionality from a vehicle, and compose itself by instantiating other classes such as tire and door.

Parallax Scrolling: In 2D games, several background layers move at different speed to create the illusion of depth.

Sprite: A sprite is something that moves around on the screen, like the Pac-Man character in the classic arcade game.

Books & other ressources


Designing Arcade Computer Game Graphics (Ari Feldman):
Fairly basic but helpful information on: display modes, graphic file formats, use of color, use of fonts, graphic creation tools, naming conversion.
Find this book at Amazon.com

Game Over (David Sheff):
Game Over: Press Start to Continue (The Maturing Of Mario) gives good information on not only the Japanese company Nintendoy (inventors of the Super Mario Bros.), but also the gaming industry in general.
Find this book at Amazon.com

Hackers (Steven Levy):
This "classic underground history of the computer age" also features a chapter on "game hackers".
Find this book at Amazon.com

PC-Grafik für Insider (Scott Anderson, Steve Anger and others): [German] Information on morphing, blobs, radiosity, animation, JPEG/MPEG data compression.

Ready-to-Run Visual Basic Algorithms (Rod Stephens):
Info on recursion, sorting, Big O-Notation, stacks and queues, decision trees, searching, object-orientation.
Find this book at Amazon.com

More sites

Coding NEXUS (game programming links)

Learn C/C++ Today

The DirectX Experience

Java Software, FAQs, Books

Lucky's VB Gaming Site

Make a donation