~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
First cut at a game timer. Yet another backend function which
[sgt/puzzles]
/
fifteen.c
diff --git
a/fifteen.c
b/fifteen.c
index
3aba7fa
..
bbdb939
100644
(file)
--- a/
fifteen.c
+++ b/
fifteen.c
@@
-72,21
+72,17
@@
static game_params *dup_params(game_params *params)
return ret;
}
return ret;
}
-static
game_params *decode_params(
char const *string)
+static
void decode_params(game_params *ret,
char const *string)
{
{
- game_params *ret = default_params();
-
ret->w = ret->h = atoi(string);
while (*string && isdigit(*string)) string++;
if (*string == 'x') {
string++;
ret->h = atoi(string);
}
ret->w = ret->h = atoi(string);
while (*string && isdigit(*string)) string++;
if (*string == 'x') {
string++;
ret->h = atoi(string);
}
-
- return ret;
}
}
-static char *encode_params(game_params *params)
+static char *encode_params(game_params *params
, int full
)
{
char data[256];
{
char data[256];
@@
-154,7
+150,7
@@
static int perm_parity(int *perm, int n)
return ret;
}
return ret;
}
-static char *new_game_
seed
(game_params *params, random_state *rs,
+static char *new_game_
desc
(game_params *params, random_state *rs,
game_aux_info **aux)
{
int gap, n, i, x;
game_aux_info **aux)
{
int gap, n, i, x;
@@
-247,8
+243,8
@@
static char *new_game_seed(game_params *params, random_state *rs,
}
/*
}
/*
- * Now construct the game
seed, by describing the tile array as
- * a simple sequence of comma-separated integers.
+ * Now construct the game
description, by describing the tile
+ * a
rray as a
simple sequence of comma-separated integers.
*/
ret = NULL;
retlen = 0;
*/
ret = NULL;
retlen = 0;
@@
-275,14
+271,14
@@
static void game_free_aux_info(game_aux_info *aux)
assert(!"Shouldn't happen");
}
assert(!"Shouldn't happen");
}
-static char *validate_
seed(game_params *params, char *seed
)
+static char *validate_
desc(game_params *params, char *desc
)
{
char *p, *err;
int i, area;
int *used;
area = params->w * params->h;
{
char *p, *err;
int i, area;
int *used;
area = params->w * params->h;
- p =
seed
;
+ p =
desc
;
err = NULL;
used = snewn(area, int);
err = NULL;
used = snewn(area, int);
@@
-326,7
+322,7
@@
static char *validate_seed(game_params *params, char *seed)
return err;
}
return err;
}
-static game_state *new_game(
game_params *params, char *seed
)
+static game_state *new_game(
midend_data *me, game_params *params, char *desc
)
{
game_state *state = snew(game_state);
int i;
{
game_state *state = snew(game_state);
int i;
@@
-338,7
+334,7
@@
static game_state *new_game(game_params *params, char *seed)
state->tiles = snewn(state->n, int);
state->gap_pos = 0;
state->tiles = snewn(state->n, int);
state->gap_pos = 0;
- p =
seed
;
+ p =
desc
;
i = 0;
for (i = 0; i < state->n; i++) {
assert(*p);
i = 0;
for (i = 0; i < state->n; i++) {
assert(*p);
@@
-460,6
+456,8
@@
static game_state *make_move(game_state *from, game_ui *ui,
int gx, gy, dx, dy, ux, uy, up, p;
game_state *ret;
int gx, gy, dx, dy, ux, uy, up, p;
game_state *ret;
+ button &= ~MOD_MASK;
+
gx = X(from, from->gap_pos);
gy = Y(from, from->gap_pos);
gx = X(from, from->gap_pos);
gy = Y(from, from->gap_pos);
@@
-780,7
+778,7
@@
static void game_redraw(frontend *fe, game_drawstate *ds, game_state *oldstate,
}
static float game_anim_length(game_state *oldstate,
}
static float game_anim_length(game_state *oldstate,
- game_state *newstate, int dir)
+ game_state *newstate, int dir
, game_ui *ui
)
{
if ((dir > 0 && newstate->just_used_solve) ||
(dir < 0 && oldstate->just_used_solve))
{
if ((dir > 0 && newstate->just_used_solve) ||
(dir < 0 && oldstate->just_used_solve))
@@
-790,7
+788,7
@@
static float game_anim_length(game_state *oldstate,
}
static float game_flash_length(game_state *oldstate,
}
static float game_flash_length(game_state *oldstate,
- game_state *newstate, int dir)
+ game_state *newstate, int dir
, game_ui *ui
)
{
if (!oldstate->completed && newstate->completed &&
!oldstate->used_solve && !newstate->used_solve)
{
if (!oldstate->completed && newstate->completed &&
!oldstate->used_solve && !newstate->used_solve)
@@
-804,6
+802,11
@@
static int game_wants_statusbar(void)
return TRUE;
}
return TRUE;
}
+static int game_timing_state(game_state *state)
+{
+ return TRUE;
+}
+
#ifdef COMBINED
#define thegame fifteen
#endif
#ifdef COMBINED
#define thegame fifteen
#endif
@@
-818,9
+821,9
@@
const struct game thegame = {
dup_params,
TRUE, game_configure, custom_params,
validate_params,
dup_params,
TRUE, game_configure, custom_params,
validate_params,
- new_game_
seed
,
+ new_game_
desc
,
game_free_aux_info,
game_free_aux_info,
- validate_
seed
,
+ validate_
desc
,
new_game,
dup_game,
free_game,
new_game,
dup_game,
free_game,
@@
-837,4
+840,5
@@
const struct game thegame = {
game_anim_length,
game_flash_length,
game_wants_statusbar,
game_anim_length,
game_flash_length,
game_wants_statusbar,
+ FALSE, game_timing_state,
};
};