summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-07-12 10:46:00 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-07-12 10:46:00 +0000
commit7c0cdf19188081dba006d2df0334cf75ca0a471e (patch)
treed7609761e2d7e84be56e30a1f862e4b2d7d4837c
parentdcad830c92ea7e484cb972702f27770e4d469f85 (diff)
downloadrockbox-7c0cdf19188081dba006d2df0334cf75ca0a471e.zip
rockbox-7c0cdf19188081dba006d2df0334cf75ca0a471e.tar.gz
rockbox-7c0cdf19188081dba006d2df0334cf75ca0a471e.tar.bz2
rockbox-7c0cdf19188081dba006d2df0334cf75ca0a471e.tar.xz
The check for solvable puzzles didn't use all squares. This fixes bug #911484. Now uses rand() instead of current_tick for randomizing.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4864 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/sliding_puzzle.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 12c7a9a..423ab7f 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -180,7 +180,7 @@ static void puzzle_init(void)
/* shuffle spots */
for (i=19; i>=0; i--) {
- r = (*rb->current_tick % (i+1));
+ r = (rb->rand() % (i+1));
temp = spots[r];
spots[r] = spots[i];
@@ -192,11 +192,16 @@ static void puzzle_init(void)
/* test if the puzzle is solvable */
for (i=0; i<20; i++)
- tsp[i] = spots[i];
+ tsp[i] = spots[i];
r=0;
+
+ /* First, check if the problem has even or odd parity,
+ depending on where the empty square is */
if (((4-hole%5) + (3-hole/5))%2 == 1)
- ++r;
- for (i=0; i<15; i++) {
+ ++r;
+
+ /* Now check how many swaps we need to solve it */
+ for (i=0; i<19; i++) {
while (tsp[i] != (i+1)) {
temp = tsp[i];
tsp[i] = tsp[temp-1];