C语言实现:三子棋

mac2024-04-17  31

主函数:main.c

#include "game.h" int main() { srand((unsigned int)time(NULL));//设置随机数生成器 int select = 0; int quit = 0; while (!quit) { meun(); printf("请输入选项\n"); scanf("%d", &select); switch (select) { case 1: game(); break; case 0: printf("Bye Bye!\n"); quit = 1; break; default: printf("输入错误,重新输入\n"); break; } } system("pause"); return 0; }

子函数:game.c

#include"game.h" //引入头文件game.h void meun() { printf("*******************************\n"); printf("*******1.play 0.exit*********\n"); printf("*******************************\n"); } void game() { char arr[row][col]; int x = 0; int y = 0; char ret = 0; Init_borad(arr);//初始化棋盘 print_borad(arr);//打印棋盘 printf("\n"); while (1) { player_move(arr);//玩家下棋 printf("\n"); if ((ret = check_win(arr)) != ' ')//里面条件成立说明谁赢了或平局,那就跳出循环判断 { break; } computer_move(arr);//电脑下棋 if ((ret = check_win(arr)) != ' ')//里面条件成立说明谁赢了或平局,那就跳出循环判断 { break; } print_borad(arr);//打印出这次你和电脑的走位 printf("\n"); } if (ret == 'x') { printf("玩家赢\n"); } else if (ret == '0') { printf("电脑赢\n"); } else if (ret == 'q') { printf("平局\n"); } print_borad(arr);//打印出游戏结果 } void Init_borad(char arr[row][col])//初始化棋盘 { int i,j; for(i=0;i<row;i++) { for(j=0;j<col;j++) { arr[i][j]=' '; } } } void print_borad(char arr[row][col])//打印棋盘 { int i = 0; for (i = 0; i < row; i++) { printf(" %c | %c | %c \n", arr[i][0], arr[i][1], arr[i][2]); if (i != row) { printf("---|---|---\n"); } } } void player_move(char arr[row][col])//玩家下棋 { int x = 0; int y = 0; while (1) { printf("请输入你要下的坐标:\n"); scanf("%d%d", &x, &y); if ((x >= 1) && (x <= row) && (y >= 1) && (y <= row) && arr[x - 1][y - 1] == ' ') { arr[x - 1][y - 1] = 'x'; break; } else { printf("坐标错误,重新输入\n"); } } } void computer_move(char arr[row][col])//电脑下棋 { while (1) { int x = rand() % 3; int y = rand() % 3; if (arr[x][y] == ' ') { arr[x][y] = '0'; break; } } } int is_full(char arr[row][col])//检测棋盘是否满了 { int i = 0; int j = 0; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { if (arr[i][j] == ' ') { return 0; } } } return 1; } 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)) { return 'q'; } return ' '; }

函数声明:game.h

#ifndef __GAME_H__ #define __GAME__H__ #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #pragma warning(disable:4996) #define row 3 #define col 3 void game(); void meun(); void Init_borad(char arr[row][col]); void print_borad(char arr[row][col]); char check_win(char arr[row][col]); void player_move(char arr[row][col]); void computer_move(char arr[row][col]); int is_full(char arr[row][col]); #endif //__GAME_H__
最新回复(0)