C语言实现简单井字棋

C语言实现简单井字棋

  • 一、规则
  • 二、代码
  • 三、说明

一、规则

两个玩家,一个打圈(O),一个打叉(X),轮流在3乘3的格上打自己的符号,最先以横、直、斜连成一线则为胜。如果双方都下得正确无误,将得和局。

二、代码

#include 
#include void init_chess(char arr[3][3]);//初始化数组
void print_chess(char arr[3][3]);//画棋盘
void menu();//开始菜单
int whom_action();//选择谁先落子
int chess_full(char arr[3][3]);//判断棋盘是否下满
char fail_win(char arr[3][3]);//判断输赢
void player_action(char arr[3][3]);//玩家落子
void computer_action(char arr[3][3]);//电脑落子int main()
{int input = 0;char arr[3][3] = { 0 };//定义一个3x3的数组,用来存放棋子do{menu();printf("请选择你想进行的动作:=》");scanf_s("%d", &input);switch (input){case 1:system("cls");//清屏init_chess(arr);if (whom_action())//电脑先手{while (1){system("cls");computer_action(arr);print_chess(arr);if ((fail_win(arr)) == 'X'){printf("你赢了,真棒!\n");break;}else if ((fail_win(arr)) == 'O'){printf("你输了,加油!\n");break;}else if (chess_full(arr)){printf("平局,实力相当!\n");break;}player_action(arr);print_chess(arr);if ((fail_win(arr)) == 'X'){printf("你赢了,真棒!\n");break;}else if ((fail_win(arr)) == 'O'){printf("你输了,加油!\n");break;}else if (chess_full(arr)){printf("平局,实力相当!\n");break;}}}else{while (1){system("cls");print_chess(arr);player_action(arr);print_chess(arr);if ((fail_win(arr)) == 'X'){printf("你赢了,真棒!\n");break;}else if ((fail_win(arr)) == 'O'){printf("你输了,加油!\n");break;}else if (chess_full(arr)){printf("平局,实力相当!\n");break;}computer_action(arr);print_chess(arr);if ((fail_win(arr)) == 'X'){printf("你赢了,真棒!\n");break;}else if ((fail_win(arr)) == 'O'){printf("你输了,加油!\n");break;}else if (chess_full(arr)){printf("平局,实力相当!\n");break;}}}break;case 0:printf("\n正在退出游戏...\n\n");system("pause");return 0;}if (input < 0 || input > 1){printf("\n这你都能输错,要你有何用!\n\n");system("pause");system("cls");}} while (input);system("pause");return 0;
}//初始化数组
void init_chess(char arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){arr[i][j] = ' ';}}
}//画棋谱
void print_chess(char arr[3][3])
{printf("\n");for (int i = 0; i < 3; i++){printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]);if (i < 2){printf("-+-+-+-+-+-\n");}}printf("\n");
}//开始菜单
void menu()
{printf("*****************************\n");printf("***      1、开始游戏      ***\n");printf("***                       ***\n");printf("***      0、退出游戏      ***\n");printf("*****************************\n");
}//判断谁先下
int whom_action()
{int input = 0;while (1){printf("*****************************\n");printf("***      1、电脑先手      ***\n");printf("***                       ***\n");printf("***      0、玩家先手      ***\n");printf("*****************************\n");printf("请选择谁先落子:=>");scanf_s("%d", &input);if (input == 1)return 1;else if (input == 0)return 0;else{printf("\n选择错误,请重新选择。\n\n");system("pause");printf("\n");}system("cls");}
}//判断九个格子是否全部下满
int chess_full(char arr[3][3])
{for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){if (arr[i][j] == ' ')return 0;}}return 1;
}//判断输赢
char fail_win(char arr[3][3])
{for (int i = 0; i < 3; i++){if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][2] != ' '))//判断一行是否相等return arr[i][0];else if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[0][i] != ' '))//判断一列是否相等return arr[0][i];else if ((arr[0][0] == arr[1][1]) && (arr[1][1] == arr[2][2]) && (arr[1][1] != ' '))//判断斜对角是否相等return arr[1][1];else if ((arr[0][2] == arr[1][1]) && (arr[1][1] == arr[2][0]) && (arr[1][1] != ' '))return arr[1][1];}return ' ';
}//玩家落子
void player_action(char arr[3][3])
{int x = 0;int y = 0;while (1){printf("请输入x轴的坐标(1~3):=》");scanf_s("%d", &x);printf("\n请输入y轴的坐标(1~3):=》");scanf_s("%d", &y);if (arr[--x][--y] == ' '){arr[x][y] = 'X';break;}else{printf("\n您选择的位置已有棋子,请重新选择。\n");continue;}}
}//电脑落子
void computer_action(char arr[3][3])
{srand((unsigned)time(NULL));while (1){int x = rand() % 3;int y = rand() % 3;if (arr[x][y] == ' '){arr[x][y] = 'O';break;}}
}

三、说明

该代码没有实现机器人智能化,可能还有一些BUG,机器人落子只是简单的随机,如有感兴趣的朋友可自行完善。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部