~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
The cube was being drawn slightly differently on the top and left
[sgt/puzzles]
/
cube.c
diff --git
a/cube.c
b/cube.c
index
1bc08f6
..
e779068
100644
(file)
--- a/
cube.c
+++ b/
cube.c
@@
-511,15
+511,7
@@
char *new_game_seed(game_params *params)
for (i = 0; i < data.nclasses; i++) {
for (j = 0; j < facesperclass; j++) {
for (i = 0; i < data.nclasses; i++) {
for (j = 0; j < facesperclass; j++) {
- unsigned long divisor = RAND_MAX / data.nsquares[i];
- unsigned long max = divisor * data.nsquares[i];
- unsigned long n;
-
- do {
- n = rand();
- } while (n >= max);
-
- n /= divisor;
+ int n = rand_upto(data.nsquares[i]);
assert(!flags[data.gridptrs[i][n]]);
flags[data.gridptrs[i][n]] = TRUE;
assert(!flags[data.gridptrs[i][n]]);
flags[data.gridptrs[i][n]] = TRUE;
@@
-529,7
+521,7
@@
char *new_game_seed(game_params *params)
* better data structure for this, but for such small
* numbers it hardly seems worth the effort.
*/
* better data structure for this, but for such small
* numbers it hardly seems worth the effort.
*/
- while (
(int)
n < data.nsquares[i]-1) {
+ while (n < data.nsquares[i]-1) {
data.gridptrs[i][n] = data.gridptrs[i][n+1];
n++;
}
data.gridptrs[i][n] = data.gridptrs[i][n+1];
n++;
}
@@
-567,19
+559,7
@@
char *new_game_seed(game_params *params)
/*
* Choose a non-blue square for the polyhedron.
*/
/*
* Choose a non-blue square for the polyhedron.
*/
- {
- unsigned long divisor = RAND_MAX / m;
- unsigned long max = divisor * m;
- unsigned long n;
-
- do {
- n = rand();
- } while (n >= max);
-
- n /= divisor;
-
- sprintf(p, ":%d", data.gridptrs[0][n]);
- }
+ sprintf(p, ":%d", data.gridptrs[0][rand_upto(m)]);
sfree(data.gridptrs[0]);
sfree(flags);
sfree(data.gridptrs[0]);
sfree(flags);
@@
-808,7
+788,7
@@
game_state *new_game(game_params *params, char *seed)
state->previous = state->current;
state->angle = 0.0;
state->previous = state->current;
state->angle = 0.0;
- state->completed =
FALSE
;
+ state->completed =
0
;
state->movecount = 0;
return state;
state->movecount = 0;
return state;
@@
-1066,6
+1046,8
@@
game_state *make_move(game_state *from, int x, int y, int button)
ret->facecolours = newcolours;
}
ret->facecolours = newcolours;
}
+ ret->movecount++;
+
/*
* And finally, swap the colour between the bottom face of the
* polyhedron and the face we've just landed on.
/*
* And finally, swap the colour between the bottom face of the
* polyhedron and the face we've just landed on.
@@
-1088,7
+1070,7
@@
game_state *make_move(game_state *from, int x, int y, int button)
if (ret->facecolours[i])
j++;
if (j == ret->solid->nfaces)
if (ret->facecolours[i])
j++;
if (j == ret->solid->nfaces)
- ret->completed =
TRUE
;
+ ret->completed =
ret->movecount
;
}
sfree(poly);
}
sfree(poly);
@@
-1117,7
+1099,6
@@
game_state *make_move(game_state *from, int x, int y, int button)
ret->sgkey[1] = skey[1];
ret->previous = from->current;
ret->angle = angle;
ret->sgkey[1] = skey[1];
ret->previous = from->current;
ret->angle = angle;
- ret->movecount++;
return ret;
}
return ret;
}
@@
-1313,8
+1294,8
@@
void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
}
for (j = 0; j < poly->order; j++) {
}
for (j = 0; j < poly->order; j++) {
- coords[j*2] = (int)(points[j*2] * GRID_SCALE) + ds->ox;
- coords[j*2+1] = (int)(points[j*2+1] * GRID_SCALE) + ds->oy;
+ coords[j*2] = (int)
floor
(points[j*2] * GRID_SCALE) + ds->ox;
+ coords[j*2+1] = (int)
floor
(points[j*2+1] * GRID_SCALE) + ds->oy;
}
/*
}
/*
@@
-1349,6
+1330,19
@@
void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
draw_update(fe, 0, 0, (int)((bb.r-bb.l+2.0F) * GRID_SCALE),
(int)((bb.d-bb.u+2.0F) * GRID_SCALE));
draw_update(fe, 0, 0, (int)((bb.r-bb.l+2.0F) * GRID_SCALE),
(int)((bb.d-bb.u+2.0F) * GRID_SCALE));
+
+ /*
+ * Update the status bar.
+ */
+ {
+ char statusbuf[256];
+
+ sprintf(statusbuf, "%sMoves: %d",
+ (state->completed ? "COMPLETED! " : ""),
+ (state->completed ? state->completed : state->movecount));
+
+ status_bar(fe, statusbuf);
+ }
}
float game_anim_length(game_state *oldstate, game_state *newstate)
}
float game_anim_length(game_state *oldstate, game_state *newstate)
@@
-1360,3
+1354,8
@@
float game_flash_length(game_state *oldstate, game_state *newstate)
{
return 0.0F;
}
{
return 0.0F;
}
+
+int game_wants_statusbar(void)
+{
+ return TRUE;
+}