For many years in Nancy, the students taking my first year course in C language were requested to code a little game of their choice. That's a rather unusual assignment ("now I demand you to do what you want!"). Hopefully, the fun part of this project will help learners to overcome their fear of coding their first project. Also, I like the message that even apprentice can do nice games very early. The main issue they have is to find a "good" game to code. The easiest is to reimplement some existing game to keep the focus on the programming side without getting lost in game design issues. I do not teach that class anymore, but this link collection remains useful I think.

Finding a Game to Implement

Of course, the main source of inspiration is the flash gamer scene, with all the creativity they deploy for /casual gaming/ ie, the little game you play after lunch and before going back to work. They invented several game types, such as tower defense for example. There is a plenty of sites offering these games, such as http://www.kongregate.com/ or http://armorgames.com/. My prefered is certainly http://gamamia.com/ which presents many indie games. They are probably a good source of inspiration for you. You may also want to have a look at http://www.pica-pic.com/, which is a bit specific. That's a collection of very old games reimplemented in flash. I like this site very much because it proves me that I'm now a dinosaur: I actually played these games when I was kid (and I even had fun doing so)!.. That being said, I don't think that these games are actually worth being reimplemented because of the absolute simplicity of their game mecanic.

If you are looking for a real game to implement (not a casual game), you should look for an old one. Modern creations such as Call of Duty are of course ways beyond what's doable without big teams. There is several abandonware sites that list games which were discontinued by their creators, such as http://www.abandonwarering.com/. The Wikipedia page is also interesting and contains some further links on this.

Game programming contests are a great place to find a little gamming ideas. For example, http://www.java4k.com/ is a furious competition where you have to come up with a game implemented in Java, with the crazy restriction that the final jar file must be smaller than 4096 bytes. That's a really amazing competition because this restriction induce specific tricks to compress the jar file, forbids the use of more than one object in the code, etc. But the results are very interesting. I for example love Miners4k game (I confess, I regularly play it), and the Bridge4k is a classical concept rendered brightly. As usual, the Wikipedia page is very interesting and explain both some tricks to manage to do a 4K game, why the contest is interesting and some preeminent projects.

http://www.ludumdare.com/ is another game programming contests, with slightly different rules: there is no technical limitation, but each contest consists in a sprint: you have a limited amount of time (like a week-end), and an imposed theme, which is given when the contest begins. It leads to interesting results, too, but because of the time limitation, the amount of finished games amongst the opponents is much lower that for Java4K, for example. The TINS contest is similar, but with an additional limitation that you should use the allegro library.

In particular, here are some little games I like. Feel free to submit links if you have good ones.

Everyone loves board games, too. But beware that adapting a board games to the computer will be tedious, as the gameplay is very different in each case. Some good compendium of board games are http://jeuxstrategie.free.fr/ and http://www.ludism.fr while some abstract games can be found at http://www.papatilleul.fr/. All these links are in French only, sorry. English readers should head to https://boardgamegeek.com/. There is even a research group in Berkeley dedicated to the analysis of board games: http://gamescrafters.berkeley.edu/...

Technical and Algorithmic Aspects

FANG is a Java library aiming at easing the design of simple games, in the intend of teaching programming through games. The proposed games are a bit simple maybe, but the approach is definitely worth noting here. If you are more of a Python fan, check the aging PyGame or the rising Arcade python libraries.

Game programming require some classical tricks, with specific algorithms. At the very least, you need to understand the basics of game loops. Vincent Thomas has great tutorials on this on that topic. That's mainly in French, but he also provides some english links too. You also need to read that book.

Assets and Game mechanic

As Vincent says, a game is not only about technology (far from that). You also have to find good graphics to support your game. Note that I don't expect my student to have great graphics and that in my case, that's a /programming/ assignment. But having decent graphics cannot hurt either.

One solution is to gimp/photoshop it yourself, but the result is likely to be not as attractive as you'd like to (if you're as bad as me at it), or illegal (if you reuse the graphics of the original game that are probably copyrighted). Alternatively, you may spend so much time on it that you run out of time for the actual programming of your game logic. A much better solution is to find some really free (as in free speech) graphics on the net. "Creative" is the keyword that you want to add to your query (such as "creative artwork castle 2D") since such work are very often released under the Creative Commons license. Alternatively, you can turn to existing repositories of such material, such as http://opengameart.org/ or http://funplosion.com/free-assets.html. I particularly like the Reiner's Tilsets, linked from the previous page.

But, reimplementing a game is maybe not fun enough for you. If you want to invent your own game, you need to think about the game mechanic that base your creation. For that, http://www.lostgarden.com/ is an incredible resource. That's the blog of a brilliant game designer since years, and it's full of interesting hints, game ideas and even free game graphics. This is a must read. Don't miss this [[online course][http://cs.wellesley.edu/~games349/]. Some homeworks are "Required Playing" :-D

Participating to larger projects

Instead of reinventing your own game, you may want to get involved in one of the existing free games out there. That may be a bit harder than creating your own game, but it's definitly more rewarding. One major difficulty may be to find a welcoming community of game programmers. Give a try to widelands (RTS game), Flare (dungon crawler), Frogatto (platformer) and its anura engine, Solarus (written by an ex-student of Telecom Nancy), or even the little Xbubble. Contact me if you want, I could somehow sherpard you in these projects. There are many other great free games that you can consider (eg Wesnoth, 0AD or MineTest), but I know don't know the communities behind these projects.

I dream of a strategy game built on top of Minetest, where you have villagers with you. You'd build the house of a farmer, and someone would come to gather the wheat, and so on with the whole Settlers II economy. That would be something like Factorio in another universe. One day maybe.