X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/5b502ae807b1e98a91644f179863484c61aedb4c..7fb7e7c120bf5d4e2dba21f1a76ea98c51b5b818:/midend.c diff --git a/midend.c b/midend.c index 5229935..323ac97 100644 --- a/midend.c +++ b/midend.c @@ -278,6 +278,8 @@ void midend_size(midend *me, int *x, int *y, int user_size) *y = me->winheight; } +int midend_tilesize(midend *me) { return me->tilesize; } + void midend_set_params(midend *me, game_params *params) { me->ourgame->free_params(me->params); @@ -383,6 +385,25 @@ void midend_new_game(midend *me) me->states[me->nstates].state = me->ourgame->new_game(me, me->params, me->desc); + /* + * As part of our commitment to self-testing, test the aux + * string to make sure nothing ghastly went wrong. + */ + if (me->ourgame->can_solve && me->aux_info) { + game_state *s; + char *msg, *movestr; + + msg = NULL; + movestr = me->ourgame->solve(me->states[0].state, + me->states[0].state, + me->aux_info, &msg); + assert(movestr && !msg); + s = me->ourgame->execute_move(me->states[0].state, movestr); + assert(s); + me->ourgame->free_game(s); + sfree(movestr); + } + me->states[me->nstates].movestr = NULL; me->states[me->nstates].movetype = NEWGAME; me->nstates++; @@ -538,6 +559,9 @@ static int midend_really_process_key(midend *me, int x, int y, int button) midend_stop_anim(me); if (!midend_redo(me)) goto done; + } else if (button == '\x13' && me->ourgame->can_solve) { + if (midend_solve(me)) + goto done; } else if (button == 'q' || button == 'Q' || button == '\x11') { ret = 0; goto done; @@ -923,6 +947,7 @@ int midend_num_presets(midend *me) me->ourgame->encode_params(preset, TRUE); me->npresets++; } + sfree(e); } }