int main() { int gameover=0; srand(time(NULL)); init_board(); display_board(); // 用户选择是否执黑子 char choice; printf("请选择执黑(B)或执白(W):\n"); scanf("%c", &choice); while (choice != 'B' && choice != 'W') { printf("输入有误,请重新选择:"); scanf("%c", &choice); } if (choice == 'B') { printf("玩家是黑子\n"); cur_player = B; while (!gameover) { if (cur_player == B) {user_move(cur_player);} else {computer_move(cur_player);} } system("cls"); display_board(); while (gameover==1) { return 0;}; cur_player = (cur_player == B) ? W : B; } else { printf("玩家是白子\n"); cur_player = W; while (!gameover) { if (cur_player == W) {computer_move(cur_player=B);} else {user_move(cur_player);} } system("cls"); display_board(); while (gameover==1) { return 0;}; cur_player = (cur_player == B) ? W : B; } }如何优化
时间: 2024-01-10 13:01:55 浏览: 97
这段代码有几个需要优化的地方:
1. 在游戏结束后,while循环中的return 0;语句是无用的,可以直接将gameover置为1跳出循环。
2. 在每次执行完玩家或电脑下棋后,需要检查是否满足游戏结束的条件,比如是否有一方获胜或者棋盘已经下满。检查游戏结束的条件可以在user_move和computer_move函数中完成。
3. 在用户选择执黑子或执白子时,如果输入的不是'B'或'W',程序会进入死循环,可以使用fgets函数代替scanf函数避免这个问题。
4. 在每次切换玩家时,可以使用三目运算符简化代码。
下面是优化后的代码:
int main() {
srand(time(NULL));
init_board();
display_board();
// 用户选择是否执黑子
char choice;
printf("请选择执黑(B)或执白(W):\n");
fgets(&choice, 2, stdin);
while (choice != 'B' && choice != 'W')
{
printf("输入有误,请重新选择:");
fgets(&choice, 2, stdin);
}
if (choice == 'B')
{
printf("玩家是黑子\n");
cur_player = B;
}
else
{
printf("玩家是白子\n");
cur_player = W;
}
int gameover = 0;
while (!gameover)
{
if (cur_player == B)
{
user_move(cur_player);
}
else
{
computer_move(cur_player);
}
gameover = check_gameover();
cur_player = (cur_player == B) ? W : B;
}
system("cls");
display_board();
return 0;
}
阅读全文