switch(getchoose(1,3)){ case 1: computer=0; attacktrend=1; // 电脑先手则优先进攻 defenttrend=1; break; case 2: computer=1; // 电脑后手则优先防御 attacktrend=1; defenttrend=2; break; case 3:return; // 返回上级菜单 } }
for(i=0;i<15;i++) // 清空棋盘 for(j=0;j<15;j++) chessboard[i][j].step=0; cursor.x=7; // 光标居中 cursor.y=7; quit=false; // 清空退出标志 system("cls"); // 清屏 printf("\n");
printchessboard(chessboard); // 打印棋盘 for(i=1;i<=225;){ // 行棋主循环 gotoxy(0,0); // 系统光标移到屏幕左上角 textcolor(TEXTS); printf(" 第%03d手,",i); if(color==1) printf("黑棋下"); else printf("白棋下"); regret=false; // 清空悔棋标志 if(i>1){ // 第一子必须下在棋盘中央 if(color!=computer || human) getmove(chessboard); // 该人走棋 else{ // 该电脑走棋 lastx=cursor.x; // 记录光标位置 lasty=cursor.y; AI(chessboard,&cursor.x,&cursor.y,color); // 电脑走棋 renew(chessboard,lastx,lasty); // 更新棋盘 } } if(quit) return; // 如果按了退出热键则返回 if(regret){ // 如果按了悔棋热键则调用悔棋函数 beback(chessboard,i); if(i>2) i-=2; else if(i==2){ i=1; color=(color+1) % 2 ; } }else{ // 如果没有按热键,则在光标位置下子