diff options
-rw-r--r-- | include/chess.h | 2 | ||||
-rw-r--r-- | mbbsd/chc.c | 8 | ||||
-rw-r--r-- | mbbsd/chess.c | 14 | ||||
-rw-r--r-- | mbbsd/gomo.c | 6 |
4 files changed, 20 insertions, 10 deletions
diff --git a/include/chess.h b/include/chess.h index 19ac4f61..8a151ace 100644 --- a/include/chess.h +++ b/include/chess.h @@ -130,7 +130,7 @@ typedef struct ChessActions { int (*select) (ChessInfo* info, rc_t location, ChessGameResult* result); void (*prepare_step)(ChessInfo* info, const void* step); - int (*apply_step) (void* board, const void* step); + ChessGameResult (*apply_step) (void* board, const void* step); void (*drawstep) (ChessInfo* info, const void* step); /* ending */ diff --git a/mbbsd/chc.c b/mbbsd/chc.c index f1339e14..45c2bb47 100644 --- a/mbbsd/chc.c +++ b/mbbsd/chc.c @@ -44,7 +44,7 @@ static void chc_movecur(int r, int c); static void chc_prepare_play(ChessInfo* info); static int chc_select(ChessInfo* info, rc_t scrloc, ChessGameResult* result); static void chc_prepare_step(ChessInfo* info, const void* step); -static int chc_movechess(board_t board, const drc_t* move); +static ChessGameResult chc_movechess(board_t board, const drc_t* move); static void chc_drawstep(ChessInfo* info, const drc_t* move); static void chc_gameend(ChessInfo* info, ChessGameResult result); static void chc_genlog(ChessInfo* info, FILE* fp, ChessGameResult result); @@ -105,7 +105,7 @@ static const ChessActions chc_actions = { &chc_prepare_play, &chc_select, &chc_prepare_step, - (int (*) (void*, const void*)) &chc_movechess, + (ChessGameResult (*) (void*, const void*)) &chc_movechess, (void (*)(ChessInfo*, const void*)) &chc_drawstep, &chc_gameend, &chc_genlog @@ -383,7 +383,7 @@ chc_prepare_step(ChessInfo* info, const void* step) &move->from, &move->to, info->last_movestr); } -static int +static ChessGameResult chc_movechess(board_t board, const drc_t* move) { int end = (CHE_P(board[move->to.r][move->to.c]) == KIND_K); @@ -391,7 +391,7 @@ chc_movechess(board_t board, const drc_t* move) board[move->to.r][move->to.c] = board[move->from.r][move->from.c]; board[move->from.r][move->from.c] = 0; - return end; + return end ? CHESS_RESULT_WIN : CHESS_RESULT_CONTINUE; } static void diff --git a/mbbsd/chess.c b/mbbsd/chess.c index 226feadf..55199d9c 100644 --- a/mbbsd/chess.c +++ b/mbbsd/chess.c @@ -561,8 +561,18 @@ ChessPlayFuncHis(ChessInfo* info) ChessDrawLine(info, CHESS_DRAWING_WARN_ROW); } else if (result == CHESS_STEP_NORMAL) { info->actions->prepare_step(info, &info->step_tmp); - if (info->actions->apply_step(info->board, &info->step_tmp)) - game_result = CHESS_RESULT_LOST; + switch (info->actions->apply_step(info->board, &info->step_tmp)) { + case CHESS_RESULT_LOST: + game_result = CHESS_RESULT_WIN; + break; + + case CHESS_RESULT_WIN: + game_result = CHESS_RESULT_LOST; + break; + + default: + game_result = CHESS_RESULT_CONTINUE; + } endturn = 1; info->hepass = 0; ChessStepMade(info, 1); diff --git a/mbbsd/gomo.c b/mbbsd/gomo.c index 0e30bd88..86a03463 100644 --- a/mbbsd/gomo.c +++ b/mbbsd/gomo.c @@ -34,7 +34,7 @@ static void gomo_prepare_play(ChessInfo* info); static int gomo_select(ChessInfo* info, rc_t location, ChessGameResult* result); static void gomo_prepare_step(ChessInfo* info, const gomo_step_t* step); -static int gomo_apply_step(board_t board, const gomo_step_t* step); +static ChessGameResult gomo_apply_step(board_t board, const gomo_step_t* step); static void gomo_drawstep(ChessInfo* info, const gomo_step_t* step); static void gomo_gameend(ChessInfo* info, ChessGameResult result); static void gomo_genlog(ChessInfo* info, FILE* fp, ChessGameResult result); @@ -360,7 +360,7 @@ gomo_prepare_step(ChessInfo* info, const gomo_step_t* step) } } -static int +static ChessGameResult gomo_apply_step(board_t board, const gomo_step_t* step) { int style; @@ -368,7 +368,7 @@ gomo_apply_step(board_t board, const gomo_step_t* step) style = getstyle(board, step->loc.r, step->loc.c, step->color, step->color == BLK); board[step->loc.r][step->loc.c] = step->color; - return (chkwin(style, step->color == BLK) != CHESS_RESULT_CONTINUE); + return chkwin(style, step->color == BLK); } static void |