A good idea is to think about where to start and what features you would like for your game. You can do this by a process of brainstorming – i.e. think of anything that comes into your head, write the ideas down and then later on, go through and pick out the good things that you could use from your ideas. You can also draw out your ideas and sketch them on paper. An example below is the brainstorming that I did to create my game.
—– Start of Brainstorming —–
For my first 2D game, I wish to create a space-invaders like game initially just to get the hang of programming a game. I will create a ship of some sort that will hover around the bottom of the screen, maybe let it fly higher later. I will create some alien creatures to shoot and get them to shoot down on me. I will need to figure out sounds and explosions as well. I probably will get the user to use the keyboard to move the spaceship and play the game. I will need to employ a score, and a high score for people to beat, maybe a list of high scorers. I may even get some background music to play if it is not too annoying (something techno maybe?). Depending how motivated I am, I may turn this game more into a Galaga / Galaxian style of game later to get the aliens to move and shoot as well as fly off the screen. Once the user completes a level, I could make things a little harder by speeding things up, introducing new traps, etc.
—–End of brainstorm—-
After your brainstorming session, you are ready to nut out the game design. Note that you come up with a basic design first. Then you can write some code. Afterwards, you will end up changing the game design and adding more details. Then you write more code. And so on. As you can see, game design is pretty much an iterative process (ie. you start with the basics and then you flesh out the details more and more as you get closer to completing your game). Sometimes you may also change your game design because the feature may not be possible to code or it may take too long.
Here is the game design so far (not in any particular order):
- Name of your game
- Design of starting screen
- Design of configuration screen (keyboard assignments, etc)
- A storyline for the game to set it in context
- Design of leaderboard screen to show high scores and save to disk
- Artwork for ship, bullets, aliens, explosions
- Special sounds for shit shooting, alien shooting, alien movement
- Background music while user is playing
- Design of end screen which will include credits
- Program to install the game to the user’s hard disk
- Design of different levels and degree of difficulty
- Scoring – how many points does the user get for shooting the aliens?
- How many ships does the user get before game is over?
- What fonts to use for the text on the screen?
- What background screen to use?
- What screen resolution to use?
- Title screen (before configuration)
- Keys that the player uses to play
- How do the aliens and player ship move?
- Add any special effects?
As you can see, there is a lot of work involved just to make a simple space invaders type game.
After much thought, I decided to call the game RuzInvaders. The first 3 letters are from my surname and the “Invaders” is from the space invaders type of game. The name is useful as I will be saving my programs with this name.
Game Design of RuzInvaders Version 1.0
Download the zip file to see version 1.0 in action (736K) – this was done using DirectX 9. It will still work on Windows 10 – note that when you run the .exe file, it will go into full screen mode – press ESC to exit.
I am working on converting the DirectX9 code to DirectX12.
I started with the bare basics to make the game reasonably functional. I only have one level at the moment. This is my game design which I wrote down roughly and then coded it bit and tested it. So far I did the following:
- game loop
- make sure the user can quit the program
- bring up blank screen (black)
- write text to screen (in this case – the name of the game, score and highscore)
- create a starfield background (white dots on a black screen)
- display one alien
- make the alien move
- display the player’s ship
- make the ship move (ie. by using arrow keys)
- play background music (as a break from graphics)
- create a ship’s bullet and get the player to fire it at the alien
- collision detection – check if the ship hit the alien
- display a score to the screen which updates if the ship’s bullet hits the alien
- create an alien bullet and get it to hit the ship
- create the ship’s explosion upon impact
- create more aliens of different types each with different scores when hit
- create a title screen
- create a config screen
I pretty much did it in the order above because I was learning about games programming. It took me quite a while to figure out how to display graphics to the screen and then animating the graphics.
I didn’t know that this would be my first version of the game – I did as many steps to get things up and running. Then I hit a “brick wall” when I realised that I needed to keep track of and display many aliens of the same type. I sort of knew how to do it, but it was going to be a major change to the code, hence I thought I would make this the next version (as well as adding more features to it such as restricting the player to 3 ships and writing the high scores and names to disk).