renew(chessboard,cursor.x,cursor.y); break; case 80: // 下 cursor.x++; if(cursor.x>14) cursor.x=14; renew(chessboard,cursor.x-1,cursor.y); renew(chessboard,cursor.x,cursor.y); break; case 75: // 左 cursor.y--; if(cursor.y<0) cursor.y=0; renew(chessboard,cursor.x,cursor.y+1); renew(chessboard,cursor.x,cursor.y); break; case 77: // 右 cursor.y++; if(cursor.y>14) cursor.y=14; renew(chessboard,cursor.x,cursor.y-1); renew(chessboard,cursor.x,cursor.y); break; case 134: // 退出 quit=true; return true; } else if(c==13 && chessboard[cursor.x][cursor.y].step==0) return true; // 下子 else if(c=='U' || c=='u'){ // 悔棋 regret=true; return true; } } }
void beback(NODE chessboard[][15], int step) {//悔棋 int i,j,tempx,tempy; if(step==1) return; // 如果才开始,直接返回 if(step>2){ // 如果下了多于两步 for(i=0;i<15;i++) // 搜索前两步所下的位置 for(j=0;j<15;j++) { if(chessboard[i][j].step==step-1){ // 找到上一步 chessboard[i][j].step=0; // 清空棋子标志 renew(chessboard,i,j);} // 重绘棋盘 else if(chessboard[i][j].step==step-2){ // 找到上两步 chessboard[i][j].step=0; // 清空棋子标志 tempx=cursor.x; // 记录光标位置 tempy=cursor.y; cursor.x=i; // 将光标回复到