Getting Started in Game Programming

This post is to answer a question a reader Cullen asked me, and my comment reply started getting so large I decided it would be better served as its own post. Cullen’s question is what are my thoughts on how to get into programming. It’s a great question, and there are so many possibilities, especially nowadays.

In the dark ages of computing, you had BASIC, which stands for “Basic All-Purpose Symbolic Instruction Code”, which well, was a simple form of programming for a computer.

Code simply was run from start to finish, with a some rudimentary branching with GOTO or GOSUB statements. I won’t bore you with historical details, but a program looked like the following:

20 GOTO 10

The above would essnetially fill your screen with HELLO’s, and yes, in those dark days the code WAS ALL CAPS, and you had to put line numbers in – cringe! Wikipedia has a nice article on BASIC, if you want to dig deeper.

If you were really manly, you would dive into Assembly Language programming, because that got you right down to the hardware level, but alas, I was never that macho. BASIC, was more accessible and not too difficult to learn. BASIC today still survives, and the modern variations are far more sophisticated and better documented than they were in those dark days. Having said that, BASIC is only one option of a computer language to get into. I’ll go over a few other options here.

I feel the best way to get motivated to learn how to program is to find a topic of interest. Games is a great source of inspiration, since games can be quite challenging even the deceptively simple ones. There are a variety of tools available for little or no cost. One of the best values out there is probably Microsoft’s XNA Game Studio, which is a free conglomeration of several tools from Microsoft. It’s basically programming in C# (pronounced C-Sharp), and is a framework for making games for the Xbox 360, PC, and I believe the Windows Phone 7 platform. Having C# knowledge is also beneficial outside of games, since C# is used widely used in Windows application and web development. Having said that, its power does have some complexities, but there are plenty of resources and books on this topic.

Another nice tool if you don’t wish to dive into something as complex as C# yet is something I’ve been meaning to look at starting with my son; GameMaker, by YoYo Games.  It boasts its own programming language and development methodology for easily making games. Some of the games I’ve seen made with the tool are pretty impressive, and the entire package costs $30. Which is quite a bargain. They have an active community, and there are a few books written for the tool. They offer a demo, so that’s something I would definately look into.

If you want to dive into 3D game development, one of the best tools out there is Unity3D. It’s a full 3D game engine framework for creating some pretty impressive games. The company gives you the base tool for free, so you are welcome to play around with it as much as you want. It has it’s own scripting language, as well as supports C# and Javascript. Unity3D offers the ability to compile your game onto multiple platforms, including Windows, Mac, iPhone and Android. Of course, to get onto the mobile platforms, will cost you $400+ per platform. It’s still an impressive tool to check out.

As much as I seem to have bashed BASIC, there are two impressive implementations of it for gaming that I feel is worth mentioning. Dark Basic and Blitz Basic. I’ve not really played with either of them, but both also have strong communities around the tools, and both offer demos. I think Dark Basic has a larger community and there are also a few books written for it too.

So you see, there are quite a number of resources out there to try out. My personal preference is to start with either XNA or GameMaker. But definately take some time to explore. There are  other tools and frameworks I’ve not even touched upon in this article, and I didn’t mention the Mac or Flash. I’ll leave that discussion for another time. I hope this was helpful.