三子棋

来源:互联网 发布:手机打开php文件 编辑:程序博客网 时间:2024/05/21 10:41
#include<stdio.h>#include<time.h>#pragma warning(disable:4996)#define ROW 3#define COL 3void menu();     void game();void init_board(char arr[ROW][COL]);       //初始化棋盘void display_board(char arr[ROW][COL]);     //打印棋盘  void play_move(char arr[ROW][COL]);         //玩家下void compare_move(char arr[ROW][COL]);      //电脑下char check_win(char arr[ROW][COL]);         //检查是否赢了int is_full(char arr[ROW][COL]);            //检查棋盘是否下满int main(){    int input = 1;    while (input)    {        menu();        printf("请选择:");        scanf("%d", &input);        switch (input)        {        case 0:            printf("退出程序\n");            break;        case 1:            game();            break;        default:            printf("错误指令请重新输入\n");            break;        }    }    system("pause");    return 0;}void game(){    char ret = 0;    char arr[ROW][COL] = { 0 };    init_board(arr);    display_board(arr);    do    {        play_move(arr);        printf("你落子后:\n");        display_board(arr);        ret = check_win(arr);        if (ret != ' ')            break;        compare_move(arr);        printf("电脑落子后:\n");        display_board(arr);        ret = check_win(arr);    } while (ret = ' ');    if (ret == 'x')        printf("你赢了\n");    else if (ret == ' ')        printf("电脑赢了\n");    else        printf("平局\n");}void menu(){    printf("############################\n");    printf("#######1:start||0:exit######\n");    printf("############################\n");}void init_board(char arr[ROW][COL]){    int i, j;    for (i = 0; i < ROW; i++)    {        for (j = 0; j < COL; j++)        {            arr[i][j] = ' ';        }    }}void display_board(char arr[ROW][COL]){    int i = 0;    printf("\n    1   2   3\n");    for (i = 0; i < ROW; i++)    {        printf("%d | %c | %c | %c |\n", i + 1, arr[i][0], arr[i][1], arr[i][2]);        if (i != 2)            printf("  |---|---|---|\n");    }}void play_move(char arr[ROW][COL]){    int x = 0, y = 0;    while (1)    {        printf("请输入坐标ROW[1,3]COL[1,3]:");        scanf("%d%d", &x, &y);        x--;        y--;        if ((x >= 0 && x<ROW) && (y >= 0 && y < COL))        {            if (arr[x][y] ==' ')            {                arr[x][y] = 'x';                break;            }            else                printf("该位置有子/n");        }        else            printf("非法坐标/n");    }}void compare_move(char arr[ROW][COL]){    int x = 0;    int y = 0;    srand((unsigned)time(NULL));    while (1)    {        if (is_full(arr) == 1)        {            printf("棋盘已满\n");            break;        }        else        {            x = rand() % 3;            y = rand() % 3;            if (arr[x][y] ==' ')            {                arr[x][y] = '0';                break;            }        }    }}char check_win(char arr[ROW][COL]){    int i = 0;    for (i = 0; i < ROW; i++)    if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')              return arr[i][0];    for (i = 0; i < COL; i++)    if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')        return arr[0][i];    if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')        return arr[0][0];    if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')        return arr[0][2];    if (is_full(arr) == 1)        return 'e';    return ' ';}int is_full(char arr[ROW][COL]){    int i = 0, j = 0;    for (i = 0; i < ROW; i++)    {        for (j = 0; j < COL; j++)        {            if (arr[i][j] == ' ')                return 0;        }    }    return 1;}
1 0