racecar

Photo credit: minipixel

Lots of students and beginner developers ask me, “What’s the fastest way to become a game programmer?”

Once you’re an amazing programmer, the world is open to you. You can make your own indie projects. Other developers and artists will want to work with you. You can get a job at a small or a large studio. The possibilities are endless!

So how can you turbocharge your skills as best as possible? There are lots of techniques out there, but the trick that I use in my personal life and the advice I give to my students is always the same: build your skills through working on projects.

Experience is the best teacher. By designing your own project that you then execute, you learn innumerable skills that you would never learn from just reading a book or a tutorial. Think about it. If you just read a tutorial called “How to do Collision Detection in C++” then you aren’t going to be a master at collision detection. Heck, you’d still have to refer back to the article to know what you were doing! It wouldn’t be practiced – it wouldn’t be internalized.

On the other hand, if you decide you want to learn collision detection in C++, and then you design a project for yourself that involves lots of collisions, by the time you’ve finished that project, you’ll be at least at an intermediate skills level, if not an expert.

Does it take more work than skimming a book or tutorial? Yes. But is it more effective? Absolutely. You want to learn by doing.

In this article I’ll cover four projects that I think are perfect for beginner game programmers to get them up to intermediate level, in order. Then we’ll talk briefly about how to design your own projects for the purpose of learning skills.

Project #1: Simple Text Game

Kirbytext

Back in the days before GUI’s (graphic user interfaces), many of the fun games were just all text. You’d have a console and enter commands, and see what happens. If you aren’t familiar with this genre, here is a link to an online version of Zork, one of the earliest interactive fiction games. Players explore the world, typing text as commands and moving about, talking to people, exploring objects, and solving puzzles.

It’s amazing how much fun you can have without any images at all, just text and your imagination. The image above is an old Kirby text based adventure game where you type in commands and explore the world. I wrote this a long time ago in Visual Basic, but today it could just as easily be written in Java.

The first project I always recommend as an introduction to programming is one of these simple text games. It’s ideal for a few reasons:

  • Learning how to deal with logic (if/then/else, case/switch)
  • How to deal with variables
  • How to communicate concepts to the player through text and numbers
  • Generally, how to make a program and turn it into an executable or flash file
  • Familiarity with a basic programming language (Java or Flash Actionscript 3 are good places to start)
  • Don’t have to worry about images, animations, etc yet

In short, working on this game will open doors to learn even more valuable skills and more complex game titles.

You can also add sound effects and music, which can make even a simple text game come alive. For the Kirby game I added background music depending on what area you were in, which made the world feel much bigger. Building your own game with even a few simple rooms will do wonders to get you started with beginning game programming concepts.

Project #2: RPG Battler

After you get an interactive fiction under your belt, it’s time to get artsy with some images!

An RPG battler is a good next step project. You have your character and they have different moves, and you fight an enemy, trying to knock down their HP. Think of it as original Final Fantasy or Pokémon without the overworld where you walk around.

Textgame

This is a screenshot from an RPG battler game that I put together in Flash. It consists of an image of you, an enemy, HP bars, and buttons to click for your moves each turn. It may not look pretty, but it was good to teach many basic concepts.

Starting to put in images is a good introduction to the visuals part of game development. You can either make the images yourself or you can start to learn to collaborate with another artist. The screenshot above is some simple “programmer art” that I put together along with borrowed sprites from another game. This worked great because it allowed me to focus what I was trying to learn at the time: the programming side.

The skills that you learn by making a game like this are fundamental to programming all games. They include:

  • Handling sprites
  • Keying animations (if you have them)
  • Coordinate positions
  • Hit boxes (for clicking buttons)
  • Mouse input
  • Visual feedback

Once you make a game like this, you’ll be well on your way to some more interesting games, such as…

Project #3: Puzzle Game

Doing a puzzle game is a great next step for a couple of reasons. A puzzle game consists of:

  • Standard pieces that follow certain rules
  • Pieces are laid out on a board or level
  • Multiple levels
  • Some type of scoring
  • ADVANCED: Some type of way to save and load your game

Some examples of good puzzle games to model after are Minesweeper, Candy Crush Saga, or Triple Town. All of these games are a lot of fun without many moving parts.

SkyGarden

Here’s a simple example game I built in Flash. Each level is made up of a grid with different pieces. Trees, grass, water, etc. Each piece has certain rules. By clicking each piece, the player moves through each level until they complete the game.

By doing a game like this, you learn a lot of skills that build on the skills from your previous game, including:

  • Constructing levels from pieces
  • Creating grids and coordinates
  • Creating classes and rules for certain pieces
  • State machines
  • Saving and loading levels
  • Making a progression or level select screen
  • Storing information in memory and retrieving it

Note that I’m NOT talking about puzzle games that have real-time movement or collision (we’ll get to that in a minute). You’ll have more than enough to learn with just simple step-by-step gameplay. This rules out games like Tetris where blocks are falling down and things are animating on timers. You want to focus on something that’s turn based, where things don’t change until the player takes a turn.

This is also great point to start publishing your games and getting feedback as well. If you’ve never shared your games and gotten ratings or comments, then starting to do so is VERY enlightening. Being able to interpret feedback correctly is key to getting better as a developer.

Project #4: Action Game

Canabalt

Finally, doing an action game is a great next step for a couple of reasons. An action game consists of:

  • Gameplay that depends on timing or time pressure
  • Collision
  • Monitoring frame rate
  • Simple physics, like gravity
  • Possibly third party resources, like Flixel

Some examples of good puzzle games to model after are Angry Birds, Canabalt, or classic Super Mario.

In an action game, you’re really learning a lot of the same problems that come up over and over again in all games. How do you make collision believable but not too sensitive? How do you keep the game from chugging so slowly that it affects the fun? How do you design the levels, the timers, the moves and controls?

By the time you’ve finished all four of these games, you will have mastered a number of the most common game programming skills needed to continue on. You’ll be able to start dreaming up a number of new ideas to try out.

So what next?

Designing Your Own Projects

By starting to do these projects, you’ll begin to pick up beginner programming principles that you’ll be using the rest of your life. But what next?

Now that you get the technique, the best and fastest way to make yourself into a lean, mean game programmer is to start designing your own projects. Start by selecting some skills you want to learn. How about procedural generation like Minecraft? How about a 3D game? How about a game where players can play against each other?

MinecraftFlare

Once you pick the new features or skills you’d like to learn, then come up with a simple game that uses those components. Then design it and build it out. By the time you’re done, you’ll be well versed in the knowledge. Through the project you’ll likely do lots of research, look up lots of tutorials, and run into tons of bugs and problems. But by the end, because you learned by doing, you’ll be much further along than someone who just read and did nothing.

For more info on game careers, design, and development, head over to Complete Game Development Toolkit