The following is an excerpt from RB's Uservoice page concerning a tutorial for a complete game:
"Greetings all! Good to see continuing activity here!
I was thinking perhaps we should try to tackle this game project as a community. We could use similar base code, which we post to the forums, and then ask questions if we run into problems. It would give us a chance to learn from working and have the added benefit of creating a number of variations on a theme, provided we use different textures, and different behaviors (to a degree). I'm at a point where this would actually be pretty helpful for my development as well.
So what I suggest, keeping it simple, is a 'Breakout' type clone. My former room mate, and a good friend wrote something very similar for one of his various programming classes, and it can make for a fun 'little' game.
I'm going over to RB's site to start a forum thread under "Forum->Other->Community Projects and encourage everyone to drop by and check in there if you're interested. I'll also post some basic game guidelines, the beginning game code, and open the discussion to suggestions. See you there!"
Welcome to the continuation of that post.
First let me introduce myself, my name is James Michael Hicks, 'Mike' as my friends call me, or 'PiscesMike' whenever I'm out and about posting on the net. I've been an avid gamer for many years, and a code tinkerer for perhaps just as long. When I was a young lad, many years ago, I met a friend who happened to have a Colecovision. He introduced me to Pong, the first 'video game' I had ever seen. As a youngster, this simple pleasure mesmerized me. It wasn't long (probably about as long as it took me to get home) before I was begging my parents to get me a similar game machine. You know how kids can be. This went on until my birthday finally rolled around, and my dad actually told me I could pick out whatever video game machine I wanted. My dad was an electrical engineer and a Ham radio enthusiast, so of course any electronics were pretty interesting for him as well. He also was quite a sneaky and devious person looking back on the whole thing. You see, as we rode together to purchase my birthday present we spent the time talking about games and computers. As he explained more and more, he told me that the computers were able to do all kinds of stuff, including making games. Also, he explained I could get the Colecovision, or Atari, or whatever I wanted, and a couple games OR, if I was smart, I could get a computer, and in a couple of years be making my own games. It isn't hard to guess which one we ended up coming home with.
This was my introduction to the Timex-Sinclair 1000, and the beginning of a relationship that has endured to this day. It's been more than a couple years, and although I think I could tackle a simple 'Pong' game, the finer points of efficiency in implementing 3D terrain, manipulating generated models into XNA, and HLSL are things which are a continuing challenge. I've recently discovered RBWhitaker's lovely site here, and find it a tremendous resource and an inspiration as I push forward in my own endeavors.
Following in the spirit of progress it has occurred to me that while I have some impressive examples of code I've been working on, I have yet to complete a single game. So, I'd like to take the opportunity to do that now, with community input, and provide examples from the ground up to completion. As mentioned above, I suggested a 'Breakout' clone. For those that don't know, Breakout is a 'Pong' derivative of sorts. Instead of facing a live opponent, you control a 'paddle' which hits a 'ball', which 'breaks' an element in a wall of 'bricks'.
So, from the goal of creating a clone of this game, we can deduce the following basic guidelines:
We will need a 'Paddle' object to represent the player
- It should track the location of the 'Paddle'
- EDIT: (added 9.13.2013 7:35am) It would also be a good idea for this object to have inputs for color and texture (like the 'Bricks' object below), which will allow us to change the appearance of the 'Paddle' in game.
We will need a 'Ball' object to represent the ball
- It will need to track the balls position, trajectory, and velocity
- EDIT: (added 9.13.2013 7:32am) It would also be a good idea for this object to have inputs for color and texture (like the 'Bricks' object below), which will allow us to change the appearance of the 'Ball' in game.
We will need a 'Brick' object to represent the 'Bricks'
- This should be an array and will need to track a variety of variables, including: Active(has it been 'broken'), color, texture, and a custom struct to define a 'Brick Type'.
- 'Brick Types' for example can be 'indestructible', 'explosive', 'bonus points', 'drops a powerup', etc
We will need a 'TextOutput' object to display the score using an XNA FontObject
- It should be able to accept text, text position, and color/display options
In the course of this project, I also plan to add a 'Background' object to manage various images in the background, and of course, a 'Sound Manager' object to play music and (EDIT:) sound special effects.
At this point, I'm going to take a break in the post, and ask for your input.
Going forward on this project:
- Everyone should have C# and XNA Game Studio 4.0 installed
- Everyone should be familiar with C# and the basics of OOP
If you have any questions so far, please feel free to ask.