summaryrefslogtreecommitdiffstats
path: root/mbbsd/chess.c
diff options
context:
space:
mode:
authorscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-09-01 22:25:35 +0800
committerscw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2005-09-01 22:25:35 +0800
commit4e3e46136dea38519a94693c41e7f9d637a6f4d1 (patch)
tree10a3d53acb7b1c4069e4f49dac5d4eafc26035c5 /mbbsd/chess.c
parent74068181c7fec8d9c9d577142910d74fd1c83162 (diff)
downloadpttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar.gz
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar.bz2
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar.lz
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar.xz
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.tar.zst
pttbbs-4e3e46136dea38519a94693c41e7f9d637a6f4d1.zip
* allowing undo when playing chess personally
* message enhenced git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3122 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/chess.c')
-rw-r--r--mbbsd/chess.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/mbbsd/chess.c b/mbbsd/chess.c
index 762d312f..cc7a4a47 100644
--- a/mbbsd/chess.c
+++ b/mbbsd/chess.c
@@ -137,6 +137,7 @@ ChessDrawHelpLine(const ChessInfo* info)
ANSI_COLOR(;31;47) " (←↑↓→)" ANSI_COLOR(30) " 移動 "
ANSI_COLOR(31) "(空白鍵/ENTER)" ANSI_COLOR(30) " 下子 "
ANSI_COLOR(31) "(q)" ANSI_COLOR(30) " 離開 "
+ ANSI_COLOR(31) "(u)" ANSI_COLOR(30) " 悔棋 "
ANSI_RESET,
/* CHESS_MODE_REPLAY, 看譜 */
@@ -183,6 +184,7 @@ static void
ChessRedraw(const ChessInfo* info)
{
int i;
+ clear();
for (i = 0; i < b_lines; ++i)
info->actions->drawline(info, i);
ChessDrawHelpLine(info);
@@ -463,7 +465,10 @@ ChessPlayFuncMy(ChessInfo* info)
{
char buf[4];
IGNORE_PEER();
- getdata(b_lines, 0, "是否真的要認輸?(y/N)",
+ getdata(b_lines, 0,
+ info->mode == CHESS_MODE_PERSONAL ?
+ "是否真的要離開?(y/N)" :
+ "是否真的要認輸?(y/N)",
buf, sizeof(buf), DOECHO);
CONNECT_PEER();
ChessDrawHelpLine(info);
@@ -476,7 +481,7 @@ ChessPlayFuncMy(ChessInfo* info)
break;
case 'p':
- {
+ if (info->mode != CHESS_MODE_PERSONAL) {
char buf[4];
IGNORE_PEER();
getdata(b_lines, 0, "是否真的要和棋?(y/N)",
@@ -496,6 +501,21 @@ ChessPlayFuncMy(ChessInfo* info)
}
break;
+ case 'u':
+ if (info->mode == CHESS_MODE_PERSONAL && info->history.used > 0) {
+ ChessMessageSend(info, CHESS_STEP_UNDO_ACC);
+
+ info->actions->init_board(info->board);
+ info->current_step = 0;
+ ChessReplayUntil(info, info->history.used - 1);
+ info->history.used--;
+
+ ChessRedraw(info);
+
+ endturn = 1;
+ }
+ break;
+
case '\r':
case '\n':
case ' ':