Well, before we can start the project, we need to talk about what it’s going to do. I have a good idea of what I want it to do at a high level, but I don’t have all the specific examples ready. In fact, there are probably some design dead ends and new features I’ll think up as I go along. The agile way to do that is via user stories, and I’ll be writing those as I get to them on the board game project site (which will also implement the design).
So for now, I want to talk about the ways I foresee using these applications, and high level ideas for what the user stories will be for these uses. Now I’m fully aware that some of these stories aren’t small. In fact, my plan is to order some of these larger concepts in a sequence, and then break them down into smaller more doable pieces and more appropriate user stories.
In part, that’s because it’s a good way to work. But it is also because I want to be able to regularly blog about the progress two-three times a week. That means getting work done in small logical chunks every week so I can write about and use them in the next week. And that sounds just right for agile.
There’s a lot I’d like to do with this, but for now I want to limit it to two basic bit of functionality. There share some things, even though they may sound wildly different. I’m okay with this, as it’ll focus me some on abstracting the code early on to handle both of these cases.
The first idea is the Virtual Table Top. In this mode, there are several players who control one more more tokens on a board, moving them around the virtual board according to the rules of a role playing game, such as Dungeons & Dragons. One of the players has a privileged role, called game master. That player can control any of the tokens, not just the ones that belong to them, and can create and edit boards for all the players to use. There is an are for the players to chat via text, including a way for them to make dice rolls, which the server will randomize and output.
The second idea is Classic Two-Player Board Games. While the project has as its end-goal to support a variety of real board games, for this first iteration, I only want to support more classic games, where the rules are clear and the pieces fairly standard and straightforward. In fact, I’m only going to pick one, and that’s the game of Checkers. I have some intuition about this: checkers plays out on a square grid (more or less — only half the squares are actually legal); Dungeons and Dragons and similar games also use a square grid (there are exceptions here as well, most notably hexagonal grids). So in Checkers, there are two players, each controls up to 12 tokens. Neither player here is privileged over the other, although one of them creates the game, and invites the other to play. We’ll also want the game server to validate moves for Checkers; we’re not doing this with VTT as it’s incredibly complicated and system-dependent. But Checkers is simple enough to manage, and this will give us a template for later games.
The last thing to talk about is what isn’t in here, because we need to know what we aren’t doing so that we can limit our scope. This will require an internet connection, and human players. We’re not going to do offline games, or games with machine opponents. While we are doing chat, it will be only text based, and fairly limited. Voice and video we’ll offload to someone else: Skype, or G+ hangouts, or whatever the players agree to. We’re mainly offering chat to provide dice rolls and basic commentary on the board most players will be looking at, so it’s not primary to the application.
I do want to do a lot more with this in the long run, but I think I’ve cut off enough to chew on for now. In the next post, I’ll talk about technology and start breaking this down into some phases. As with any agile development, the code should work for as much of the development as possible, and at the end of every phase. Some of these early phases will be fairly limited, but the goal is to always have a working board game project. (Plus I’ll be actually using it, once or twice a month to run games: there’s incentive for you!)