Archive for January, 2009


It’s Getting Close…

I’m prepared to officially declare Alpha this morning!

I had an extremely productive couple of days and finished off the 2 Player Mode last night. There are still a few small things to add to the game (a few animations to spice things up in places), but all the big features are finished. At this point it’s finishing up the last of the polish items and then it’s tuning, testing, and bug fixing until submission!

My original plan was to declare Alpha by the end of December, but then I decided I had time to implement Timed Mode and 2 Player Mode. I’m really glad I spent the time to add these modes; they add so much to the game. I really feel like I’ll be able to justify the price-point I’ve been mulling over in my head (more on that later). Given that I added two game modes in the last 3 weeks I’m feeling pretty good at declaring Alpha today.

The plan now is to wrap up the last of the polish tasks and fix the bugs I’m aware of by mid next week. At that point I’ll declare Beta and send out a Beta build to everyone who has signed up for Beta Testing.

I’m still looking for more Beta Testers. If you’re interested, please send me an email (info AT streamingcolour DOT com) with “beta test” in the subject. There are full details in this previous post.

Unrelated to Dapple, I wanted to share a few links that have been sent my way over the last while:

  • AppTheater (www.apptheater.com) – A site that collects videos of iPhone Apps. If you want to see what an App is like before you buy it, look for a video here.
  • Oolong Engine (www.oolongengine.com) – Noel from Snappy Touch informed me about this freely available simple engine for iPhone. It looks to me like it’s based off the code from Apple’s (now removed) CrashLanding example project, but they’ve added all kinds of handy functionality. I wish I’d known about this 6 months ago…

Oh, one final note: I contacted the TTC (Toronto Transit Commission, for those outside Toronto) about advertising on buses and subways. They sent me some pricing information and I’ve realised that the old adage “you need to spend money to make money” is so true. There should perhaps be a corollary “you need money to make money”. I’ve realised I can’t afford to do that kind of physical advertising until I make some money. Ironic, ain’t it?

Owen


It Pays to Think About Things

I posted this morning about the issues around converting my board object to a 2-player system. After the post I started reading through the code trying to decide how to proceed. After thinking about things for a while I came to an important realisation: my single player game is actually a special case of my two player game! I’d been thinking about the problem backwards!

What this means is that I can convert the board so that it always thinks it’s running a 2-player game. It will make calls to the game state to ask it whose turn it is, etc. However, in the single player game, the game state always returns that’s it’s player 1’s turn.

The nice thing about this is that there will be very little player-specific code in the board. There will be some, but it should be pretty minimal.

I’ve spent the rest of the day working my way through the board code updating things and it’s going quite well so far. I also uncovered and fixed a major bug in my search code in the process. It’s feeling like a good day.

Owen


The Problem with Sub-Classing

Yesterday I got all of the non-gameplay related layout changes implemented for 2-player mode. It looks pretty good. I managed to make everything fit on the screen and look good, so I’m happy about that. Today I’m starting to implement the gameplay-side changes that are required, but I’ve run into a dilemma around how to set up the code.

Warning: coding discussion to follow…

This is the way my game is structured at an extremely high level (lots of classes missing from this diagram, but this gives you a general idea of how things work):

Dapple - High Level Classes

Dapple - High Level Classes

Right now all of the information about whose turn it is (in a two player mode) is stored within the GameState class. It stores the users’ scores, levels, etc, and it knows whose turn it is, and who plays next. The problem I’m running into is with the Board.

Right now the board knows nothing about which player is playing. It’s responsible for all of the logic that handles making matches and searching the board for possible matches. For the most part, it doesn’t care about which player is playing…except that now it needs to. In my 2-player mode, both players play on the same board, but each on their own half of the board. This means that all the searching algorithms now need to take into account which side of the board to search, which means they need to know whose turn it is.

This seems pretty straightforward except that the end-of-turn code flow also needs to completely change. When a player ends his/her turn, instead of checking to see if there are any moves left, I need to check if there any moves left for the opponent.

What I’m trying to decide is whether I should sub-class Board into TwoPlayerBoard, or whether to embed the logic inside Board’s functions. Both have benefits and drawbacks. By sub-classing it allows me to keep the two-player logic separate. It means cleaner code for all game modes. However, it also means that any logic bugs in the board would potentially need to be fixed in two classes instead of one. By embedding the logic in the Board it means I only have to maintain one class, but all of a sudden I have all these conditionals in the code for “if (2 player mode) do this, else do this”, which makes things harder to follow.

I think what I need to do is go through all the functions in Board and see which ones need to change for 2 player mode. If it’s less than 1/3 of them, I’ll subclass. If it’s more, I’ll embed the logic.

Phew, I’m glad we figured that out.

Owen


A Call for Beta Testers

I have a few things to mention this morning…

I’ve added a few links to the Contact Us page – one for my Twitter account, and one for the Streaming Colour Facebook page. I’ve also added a link to my Twitter account off the blog page in the sidebar. I post things to Twitter that are too small to warrant a full blog post. Blog post notifications are also sent to Twitter, so it’s a good way to get blog updates if you don’t use the RSS feed.

I started implementing the 2-player mode for the game yesterday. So far I’ve got all of the game state classes converted to storing state for two players and all of the calling code now passes a player id into the calls. I’ll be getting to the first big changes today, namely: layout changes. After the new layout is implemented I’ll make the actual gameplay changes.

Finally, I’m putting out a call for beta testers for Dapple. If you would like to beta test Dapple, I’ll hopefully send out a build sometime next week. Here are some details:

  • You must be willing to play all of the game modes of the game fairly regularly.
  • You must be willing to send me reports of any bugs/crashes you encounter (in as much detail you can provide about what you were doing, what happened, crash logs, etc).
  • You should feel free to send me feedback on the difficulty of the various game modes.
  • You should feel free to send my any other kind of feedback on the game.
  • You will not be compensated for beta testing. (i.e. you will not be paid)
  • You will not receive any kind of game credit for beta testing.
  • You must have an iPhone or iPod touch that is running OS 2.1 or higher.
  • You must be willing to provide me with your unique iPhone/iPod touch identifier number so that I can create an ad-hoc build that will run on your device (I will provide you with instructions on finding the number).
  • You will get to play Dapple before it’s released!

If you want to get in on the beta, please email me at: “info AT streamingcolour DOT com” with “Beta Test” in the subject line before 11:59 PM EST, Sunday, January 25th, 2009. I haven’t decided how many testers I need yet, but it will probably be up to 20 or so. I’ll accept testers in the order the emails arrive.

Finally, if you’re reading this from the U.S., happy inauguration day!

Owen


Some New Press

I did an interview with my home-town newspaper last week and it made the front page today! Here’s a link to the online article from the Owen Sound Sun Times:

It’s pretty exciting to see word of Dapple starting to get out there. I guess I’d better actually finish the game now!

Owen