I decided sometime around 2nd grade that I wanted to make video games, so I jumped at the chance to take Game Programming as an elective while working on my Bachelor’s degree. The class used the book Game Programming All In One (1st Edition) which features the Allegro game programming library. It is open source, cross-platform and written in C++. Check out the Introduction page here for a more official description.
We focused on 2d games in the class and a couple text ones to start. Overall the class included 7 or 8 programming assignments with a Final Project of our own design and a list of required features based on what we had learned. Each of our games was shown during class to get feedback and to see what others were doing. We covered sprites, animation, some collision logic, simple sound playback, double buffering, tiled backgrounds, and possibly a few other things I cannot recall. Most of the non-final games were pretty forgettable; though I incorporated Strongbad in one which had pretty funny results. It was an introduction for my teacher to Strongbad and she later commented to me that we must be drinking while watching them, hahaha!
One of the required features for the final, that for some reason I didn’t like, was using a tiled background because the way we had covered that feature was to use a large static array of tiles. Instead I came up with an idea for a tiled background that could be generated on the fly using a logic matrix describing which tiles could follow what other tiles. This concept brought me to the decision to make a vertically scrolling shooter. Then I figured I could have two layers of background that moved at different speeds with transparency in the tiles (which I later learned is called Parallax). For enemies, I wanted some random waves and then a multi-sprite boss.
Sadly, I ran out of time developing partly due to the necessity to MSPaint my own sprites and search the internet for sound effects (and all the other “life” stuff going on). I did not get to use all the functionality I programmed nor did I get to add all the features I wanted. Approaching the end I realized I still needed enemies to call it a game and so I threw together a logic framework and used that to describe 4 types of enemies with different movement patterns and firing chances.
One of my favorite final projects from the class was an RPG created by one of my friends. He grabbed sprites and music from some SNES classics and built several tile maps connected to each other. It was pretty impressive amongst the other final projects for the class. In the end, Game Programming was one of my favorite classes and it left me with an idea of how much effort goes into even a simple game project. I currently believe that video games are some of the most complex software out there but a lack of professional experience in making them might make that a bad assumption.