diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/sliding_puzzle.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c index 12c7a9aafa..423ab7fcf1 100644 --- a/apps/plugins/sliding_puzzle.c +++ b/apps/plugins/sliding_puzzle.c | |||
@@ -180,7 +180,7 @@ static void puzzle_init(void) | |||
180 | 180 | ||
181 | /* shuffle spots */ | 181 | /* shuffle spots */ |
182 | for (i=19; i>=0; i--) { | 182 | for (i=19; i>=0; i--) { |
183 | r = (*rb->current_tick % (i+1)); | 183 | r = (rb->rand() % (i+1)); |
184 | 184 | ||
185 | temp = spots[r]; | 185 | temp = spots[r]; |
186 | spots[r] = spots[i]; | 186 | spots[r] = spots[i]; |
@@ -192,11 +192,16 @@ static void puzzle_init(void) | |||
192 | 192 | ||
193 | /* test if the puzzle is solvable */ | 193 | /* test if the puzzle is solvable */ |
194 | for (i=0; i<20; i++) | 194 | for (i=0; i<20; i++) |
195 | tsp[i] = spots[i]; | 195 | tsp[i] = spots[i]; |
196 | r=0; | 196 | r=0; |
197 | |||
198 | /* First, check if the problem has even or odd parity, | ||
199 | depending on where the empty square is */ | ||
197 | if (((4-hole%5) + (3-hole/5))%2 == 1) | 200 | if (((4-hole%5) + (3-hole/5))%2 == 1) |
198 | ++r; | 201 | ++r; |
199 | for (i=0; i<15; i++) { | 202 | |
203 | /* Now check how many swaps we need to solve it */ | ||
204 | for (i=0; i<19; i++) { | ||
200 | while (tsp[i] != (i+1)) { | 205 | while (tsp[i] != (i+1)) { |
201 | temp = tsp[i]; | 206 | temp = tsp[i]; |
202 | tsp[i] = tsp[temp-1]; | 207 | tsp[i] = tsp[temp-1]; |