~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
comment c'n'p error
[sgt/puzzles]
/
sixteen.c
diff --git
a/sixteen.c
b/sixteen.c
index
2751be4
..
966cc0f
100644
(file)
--- a/
sixteen.c
+++ b/
sixteen.c
@@
-95,11
+95,10
@@
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);
ret->w = ret->h = atoi(string);
+ ret->movetarget = 0;
while (*string && isdigit(*string)) string++;
if (*string == 'x') {
string++;
while (*string && isdigit(*string)) string++;
if (*string == 'x') {
string++;
@@
-113,15
+112,17
@@
static game_params *decode_params(char const *string)
while (*string && isdigit((unsigned char)*string))
string++;
}
while (*string && isdigit((unsigned char)*string))
string++;
}
-
- return ret;
}
}
-static char *encode_params(game_params *params)
+static char *encode_params(game_params *params
, int full
)
{
char data[256];
sprintf(data, "%dx%d", params->w, params->h);
{
char data[256];
sprintf(data, "%dx%d", params->w, params->h);
+ /* Shuffle limit is part of the limited parameters, because we have to
+ * supply the target move count. */
+ if (params->movetarget)
+ sprintf(data + strlen(data), "m%d", params->movetarget);
return dupstr(data);
}
return dupstr(data);
}
@@
-192,7
+193,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 stop, n, i, x;
game_aux_info **aux)
{
int stop, n, i, x;
@@
-362,8
+363,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;
@@
-390,14
+391,14
@@
static void game_free_aux_info(game_aux_info *aux)
}
}
-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);
@@
-441,7
+442,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(game_params *params, char *
desc
)
{
game_state *state = snew(game_state);
int i;
{
game_state *state = snew(game_state);
int i;
@@
-452,7
+453,7
@@
static game_state *new_game(game_params *params, char *seed)
state->n = params->w * params->h;
state->tiles = snewn(state->n, int);
state->n = params->w * params->h;
state->tiles = snewn(state->n, int);
- 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);
@@
-973,9
+974,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,