I discussed that I’m making a racing game for my final project for the class here. While working on the game, I changed the direction I was going and instead of a normal racing game, I made a drag race game.
You can download the game from the below link.
In this game, you race against either an AI or a 2nd player (if a second controller is connected) and try to win as many races as possible. You have a choice of 3 cars, with different acceleration values that you can choose from. I initially wanted to have an unlock system for the card, but decided against it. You use a controller to control the car, The controls used are the common ones used in racing games, namely
- Accelerate – Right trigger / W
- Brake – Left trigger / S
- Change camera – Right shoulder button.
- Change cars – D-Pad Up and down / M , N
- Start / Restart race – Start button / R
My experience building the game: I made a lot of changes to the design of the game, but in the end made a simple drag race simulator. There were a few features that I couldn’t make it in, the most important one is having a split screen multiplayer, since my game already handles multiple inputs.
Using my own engine component: I made a controller input component as described here. It was very easy to use and I did not have to change anything in the component.
Using Shantanu’s Audio Engine Component : Shantanu Pandey‘s audio engine component was also pretty easy to use, with easy to access interfaces to play an audio file. But, I’ve come across some bugs, which I hope are fixed in a future update.
What I learned from this class:
The most important thing that I think I learnt is the importance of the data oriented design, which is a bit different from the traditional object oriented design that we generally see in most programs.
I also learnt that in game programming, most of the times it is better to sacrifice safety for speed as we want the game to have the best possible experience. This includes assuming the way data is stored when retrieving without checking for the integrity as I’ve done for meshes and effects. That also means that sometimes you can use extra memory for cache coherency.
The importance of binary files: As I discussed here, binary files have quite a few advantages which are immensely useful. Not having worked with binary files before, I found then quite fascinating and the class taught me on how to maximize their utility.
I also realized the importance of creating easy to use interfaces to the functions that I wrote while working on my engine component. I saw few components of my classmates which were extremely well written, but did not provide an easy to use interface to use them, which made their use a bit hard. When people who said that it took no effort in implementing my component, I felt good in creating something that people wanted to use.
There are many more things that I learned from this class apart from those I posted above and I am looking forward to the graphics class next semester 🙂