Changed my mind about midend_is_solved: I've now reprototyped it as

midend_status(), and given it three return codes for win, (permanent)
loss and game-still-in-play. Depending on what the front end wants to
use it for, it may find any or all of these three states worth
distinguishing from each other.

(I suppose a further enhancement might be to add _non_-permanent loss
as a fourth distinct status, to describe situations in which you can't
play further without pressing Undo but doing so is not completely
pointless. That might reasonably include dead-end situations in Same
Game and Pegs, and blown-self-up situations in Mines and Inertia.
However, I haven't done this at present.)

[originally from svn r9179]
This commit is contained in:
Simon Tatham
2011-06-19 13:43:35 +00:00
parent 8dcdb33b77
commit 73daff3937
42 changed files with 188 additions and 164 deletions

View File

@ -1336,7 +1336,7 @@ char *midend_solve(midend *me)
return NULL;
}
int midend_is_solved(midend *me)
int midend_status(midend *me)
{
/*
* We should probably never be called when the state stack has no
@ -1347,8 +1347,10 @@ int midend_is_solved(midend *me)
* practically, a user whose midend has been left in that state
* probably _does_ want the 'new game' option to be prominent.
*/
return (me->statepos == 0 ||
me->ourgame->is_solved(me->states[me->statepos-1].state));
if (me->statepos == 0)
return +1;
return me->ourgame->status(me->states[me->statepos-1].state);
}
char *midend_rewrite_statusbar(midend *me, char *text)