Postmortem
So now that the week of development is over, I thought that I should take a few moments to reflect on the past week, and go through the various parts of the development that I was happy with, as well as the parts that I would do differently next time.First, I have to say that overall I'm extremely pleased with the final product. I managed to throw together what, to me, is a really fun game in less than a week. I got sick early on in the week after nursing my girlfriend back to heath, but it didn't slow me down too much. I was able to get a few days off from work, and class due to the illness, and used a lot of this time to work on the game. My girlfriend was extremely helpful and supportive during the week.
Pygame was a huge part of the rapid development. It's such an easy to use framework, and well documented. Not once did I need to consult with an outside source, such as Google, to find out how to accomplish something specific. I did run into a performance issue in the beginning however, which forced me to change the entire direction of the project. I don't know if this was poor design, or a limitation of the framework, but it's definitely going to affect my designs going forward with games using Pygame. It's also going to push me to exploring other frameworks, such as Pyglet, especially when I want to push big ideas into my games.
The week before PyWeek has started, I was doing some research on handling game states for my last game, Kitty Vacuum Dodge. I asked about it in the Pygame IRC channel, and Idlework opened the doors to State Machines. This had a HUGE effect on the code design (and will on future games). The modular nature of the game states allows you to easily customize the states, as well as easily handle initialization and cleanup when necessary.
One thing that was sorely lacking in my development was planning. Most, if not all features of the game were made up on the fly, and it shows in the code. It got a little tricky when implementing elements later on that relied on previously implemented elements, because the elements relied on weren't being designed with that in mind. That resulted in a lot of back and forth tweaking, and some less than elegant "hacks" to force things to work the way I wanted them to. Midway through the week, I did manage to take a few hours to refactor some of the code, and fix a lot of the spaghetti, and circular dependencies, but I still think it could have been better. In the end however, it works, and I suppose that is what matters the most.
Something that kinda worked and kinda didn't was the art. I managed to put together all of the art on my own, and it works, but isn't quite what I had envisioned the game looking like. I haven't had any prior experience looking for/using free art resources on the web, and didn't want to waste any time doing so during development. The current art definitely gets the point across, and has the benefit of being made with a specific purpose in mind. It was just too simple, and I wanted the graphics to "pop" a bit more than they do. I also wish I could have added a few more backgrounds to the game.
Music and sounds ended up being a complete afterthought. I had forgotten all about them, and had no plans originally to add any. During the last 48 hours, when I was spending time doing tweaks, and adding a help screen, I decided to take some time to look around for some free music and FX. Pygame made adding them extremely simple, in fact, finding the right sounds was harder than actually putting them in the game. I'm so very happy with the background music loops.
In general, this week was a success for me, as all I really wanted to do was complete a game in a given time frame, and I managed to do that, and exceed all expectations for what I could accomplish during that time. I will certainly be participating in future PyWeeks, and try to make each successive entry bigger, and better :)
- Llortus