Rick and I IM-ed a bit, and I think I have a design solution I like.
First a quick screenshot to give you a frame of reference.
This is the first screen you see when the game starts. It's pretty simple, but has everything you need to get started.
Solution for the design
The cute little scrolling box you see here will no longer contain the highest scores. Instead it will contain the scores for the most recent 20 (or 50 or 100 if it loads fast enough) games you have played in the order you played 'em. It's not really all that informational, but it'll give you a feeling if you're "on a roll" or not. After 20 (or 50 or 100) games, the oldest games will start dropping off the bottom of the list.
(I'm also gonna get rid of that "name" field. No point in making users log in to their own game)
I'll also have a second array of one byte per board. For the sake of design, let's assume that it's an array of a million boards (and hence a million bytes). The array will be initially populated entirely with 0xff's, which signify an unplayed board. After you play a board, the game will replace that byte with your actual score.
For example, the first time you play board 813211, it'll look up cell 813211 in the array. Seeing a 0xff, you'll get a little message on the game screen saying "you have never played board 813211 before". Suppose you get the game down to 76 pieces then give up. It'll now store a 76 in byte 813211. If you ever happen back to board 813211 again, your message will state "You have gotten down to 76 pieces on board 813211. Try to beat that!". If you manage to do better than 76, it'll replace that byte with your new score.
I think this is a "best of all worlds" situation without getting so complicated that it scares away casual players.
- If you just wanna play the same board over and over and try to get the highest possible score for a board, it'll keep track of your best score.
- If you wanna ensure that you never play the same game twice, you'll have an indication of that.
- And if you're just a casual player who doesn't care at all about any of that, you can just gaze at the "most recently played games" table on the front page and marvel at the great scores you got recently.
Now then. . .
Solution for the practicalities
Emmanuel Deloget mentioned that MS Access databases can run from a DLL and don't have to run as a separately-installed background process like MySQL, which is a fact I should've been able to glean with about five minutes of thought.
I have MS Access, so making up an MDB file isn't a problem.
MSJet40.dll compresses to about 650k. That's bigger than SQLITE (which compresses to about 100k), but it's not so heavy that it'll scare downloaders away.
One problem. I can't find anything with the particulars of licensing and packaging and installing the MS Jet DLL(s). This'll need to install on your grandma's machine without any fuss, so I need to figure out all of the particulars as far as licensing (if any), installing (if anything more than copying the msjet DLL to your app's directory) and registering with the system (if required) that I'll need to do.
Anyone know of a resource for the Jet DLL runtime particulars?