X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/f278dcf496976e0e8f29feb6d5370cc48d37be0f..ff5d35e1a92e919353b016417132ca3497b65b16:/unfinished/sokoban.c diff --git a/unfinished/sokoban.c b/unfinished/sokoban.c index d67f907..53bd3a5 100644 --- a/unfinished/sokoban.c +++ b/unfinished/sokoban.c @@ -99,8 +99,8 @@ #define BARREL_LABEL(b) ( (b)>='A'&&(b)<='Z' ? (b) : \ (b)>=1 && (b)<=26 ? (b)+('A'-1) : 0 ) -#define DX(d) (d == 0 ? -1 : d == 2 ? +1 : 0); -#define DY(d) (d == 1 ? -1 : d == 3 ? +1 : 0); +#define DX(d) (d == 0 ? -1 : d == 2 ? +1 : 0) +#define DY(d) (d == 1 ? -1 : d == 3 ? +1 : 0) #define FLASH_LENGTH 0.3F @@ -907,6 +907,11 @@ static char *solve_game(game_state *state, game_state *currstate, return NULL; } +static int game_can_format_as_text_now(game_params *params) +{ + return TRUE; +} + static char *game_text_format(game_state *state) { return NULL; @@ -1039,7 +1044,7 @@ int move_type(game_state *state, int dx, int dy) static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, int x, int y, int button) { - int dx, dy; + int dx=0, dy=0; char *move; /* @@ -1066,9 +1071,23 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, dx = -1, dy = +1; else if (button == (MOD_NUM_KEYPAD | '3')) dx = +1, dy = +1; + else if (button == LEFT_BUTTON) + { + if(x < COORD(state->px)) + dx = -1; + else if (x > COORD(state->px + 1)) + dx = 1; + if(y < COORD(state->py)) + dy = -1; + else if (y > COORD(state->py + 1)) + dy = 1; + } else return NULL; + if((dx == 0) && (dy == 0)) + return(NULL); + if (move_type(state, dx, dy) < 0) return NULL; @@ -1396,6 +1415,11 @@ static float game_flash_length(game_state *oldstate, game_state *newstate, return 0.0F; } +static int game_status(game_state *state) +{ + return state->completed ? +1 : 0; +} + static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; @@ -1414,7 +1438,7 @@ static void game_print(drawing *dr, game_state *state, int tilesize) #endif const struct game thegame = { - "Sokoban", NULL, + "Sokoban", NULL, NULL, default_params, game_fetch_preset, decode_params, @@ -1429,7 +1453,7 @@ const struct game thegame = { dup_game, free_game, FALSE, solve_game, - FALSE, game_text_format, + FALSE, game_can_format_as_text_now, game_text_format, new_ui, free_ui, encode_ui, @@ -1444,6 +1468,7 @@ const struct game thegame = { game_redraw, game_anim_length, game_flash_length, + game_status, FALSE, FALSE, game_print_size, game_print, FALSE, /* wants_statusbar */ FALSE, game_timing_state,