该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
bool PlayerTurn()
{ //选手的回合
    int x, y;
    Show();
    do scanf("%d%d", &x, &y);
    while (x = 3 || y <0 || y >= 3 || a[y][x]);
    a[y][x] = 1; ++cnt;
    putchar('\n');
    Show();
    if (Check(1, x, y))
    {
        puts("You win!\n");
        return true;
    }
    return false;
}
bool ComputerTurn()
{ //计算机的回合
    int pos;
    SearchMove(2, -WIN, WIN, pos, -1);
    a[pos/3][pos%3] = 2; ++cnt;
    Show();
    if (Check(2, pos%3, pos/3))
    {
        puts("You lose!\n");
        return true;
    }
    return false;
}
int main()
{
    int option;
    for(;;)
    {
        //显示菜单
        puts("0 You first\n1 Computer first\n2 Exit\n");
        do scanf("%d", &option);
        while (option = 3);
        if (option == 2) break;
        putchar('\n');
        //清空棋盘
        for (int i = 0; i
            for (int j = 0; j
                a[i][j] = EMPTY;
        cnt = 0;
        //游戏过程
        if (!option)
        {
            for(;;)
            {
                if (PlayerTurn()) break;
                if (cnt == 9)
                {
                    puts("Draw!\n");
                    break;
                }
                if (ComputerTurn()) break;
            }
        }
        else for(;;)
        {
            if (ComputerTurn()) break;
            if (cnt == 9)
            {
                puts("Draw!\n");
                break;
            }
            if (PlayerTurn()) break;
        }
    }
    return 0;
}