From c931c4a7eed552c8eebae0d405641c4399ee5ba6 Mon Sep 17 00:00:00 2001 From: Your Name <18408000323@stu.hut.edu.cn> Date: Sat, 5 Jan 2019 03:55:50 +0800 Subject: [PATCH] version1.0 --- functions.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++ main.c | 56 +++++++++++++++++++++++++ sanziqi.h | 25 ++++++++++++ 3 files changed, 196 insertions(+) create mode 100644 functions.c create mode 100644 main.c create mode 100644 sanziqi.h diff --git a/functions.c b/functions.c new file mode 100644 index 0000000..1b88bfa --- /dev/null +++ b/functions.c @@ -0,0 +1,115 @@ +#include"sanziqi.h" +void menu() //菜单 +{ + printf("****************************\n"); + printf("* 输入1.开始游戏 *\n"); + printf("* 输入0.退出游戏 *\n"); + printf("****************************\n"); +} +void print_board(char arr[3][3]) //打印棋盘 +{ + printf("\n"); + int i; + for (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 init_board(char arr[3][3]) //初始化棋盘 +{ + + int i, j; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + arr[i][j] = ' '; + } + } +} +int whom_act() //选择谁先行动 +{ + int input = 0; + printf("****************************\n"); + printf("** 1.电脑先手:O **\n"); + printf("** 0.玩家先手:X **\n"); + printf("****************************\n"); + while (1) + { + printf("请选择谁先落子:"); + scanf("%d", &input); + if (input == 1) + return 1; + else if (input == 0) + return 0; + else + printf("选择错误,请重新选择。\n"); + } +} +int chess_full(char arr[3][3]) //判断棋子是否下满 +{ + int i, j; + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + if (arr[i][j] == ' ') + return 0; + } + } + return 1; +} +char judge(char arr[3][3]) //判断输赢,谁达到三字则返回对应的字符 +{ + int i; + for (i = 0; i < 3; i++) + { + if ((arr[i][0] == arr[i][1]) && (arr[i][1] == arr[i][2]) && (arr[i][0] != ' '))//行 + 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_act(char arr[3][3]) //玩家行动 +{ + int x = 0; + int y = 0; + char ch; + while (1) + { + printf("请落子(即输入对应x,y坐标)例如: %d,%d \n", x, y); + scanf("%d,%d", &x, &y); + if(arr[--x][--y] == ' ') + { + arr[x][y] = 'X'; + break; + } + else + { + while ((ch = getchar()) != EOF && ch != '\n');//清空缓存区,防止scanf接收上次的非法输入从而死循环 + printf("wrong input!请重新输入\n"); + } + } +} +void computer_act(char arr[3][3]) //电脑行动 +{ + srand((unsigned)time(NULL));//用系统时间初始化随机数种子 + while (1)//无限循环直到遇到break退出 + { + int x = rand() % 3;//计算机随机落子 + int y = rand() % 3; + if (arr[x][y] == ' ') + { + arr[x][y] = 'O'; + break; + } + } +} diff --git a/main.c b/main.c new file mode 100644 index 0000000..3653e91 --- /dev/null +++ b/main.c @@ -0,0 +1,56 @@ +#include +#include +#include +#include "sanziqi.h" +#define computer_first 1 +#define player_first 0 +int main() //主函数 +{ + char arr[3][3]; + while(1) + { + menu(); + int i=0; + scanf("%d",&i); + if(i) + { + init_board(arr); + print_board(arr); + if(whom_act()==computer_first) + { + while(i++<9) + { + computer_act(arr); + print_board(arr); + if(judge(arr)=='O') break; + player_act(arr); + print_board(arr); + if(judge(arr)=='X') break; + } + if(judge(arr)=='X') + printf("你赢了。\n"); + else + printf("你输了。\n"); + } + else + { + while(i++<9) + { + player_act(arr); + print_board(arr); + if(judge(arr)=='X') break; + computer_act(arr); + print_board(arr); + if(judge(arr)=='O') break; + } + if(judge(arr)=='X') + printf("你赢了。\n"); + else + printf("你输了。\n"); + } + } + else + break; + } + return 0; +} diff --git a/sanziqi.h b/sanziqi.h new file mode 100644 index 0000000..339ea22 --- /dev/null +++ b/sanziqi.h @@ -0,0 +1,25 @@ +#ifndef SANZIQI_H_INCLUDED +#define SANZIQI_H_INCLUDED +#include +#include +#include + +void init_board(char arr[3][3]); //初始化棋盘 + +void print_board(char arr[3][3]); //打印棋盘 + +void menu(); //菜单 + +int whom_act(); //选择谁先行动 + +int chess_full(char arr[3][3]); //判断棋子是否下满 + +char judge(char arr[3][3]); //判断输赢 + +void player_act(char arr[3][3]); //玩家行动 + +void computer_act(char arr[3][3]); //电脑行动 + + + +#endif // SANZIQI_H_INCLUDED