test.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>
#define ROW 3
#define COL 3
void initboard(char board[][COL], int row, int col);
void printboard(char board[][COL], int row, int col);
void playerplay(char board[][COL], int row, int col);
char is_win(char board[][COL], int row, int col);
void computerplay(char board[][COL], int row, int col);
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("************************\n");
printf("******1.play 0.exit*****\n");
printf("************************\n");
}
void game()
{
char board[ROW][COL] = { 0 };
initboard(board, ROW, COL);
printboard(board, ROW, COL);
char winner = 'c';
while (winner== 'c')
{
printf("玩家下\n");
playerplay(board, ROW, COL);
printboard(board, ROW, COL);
winner=is_win(board, ROW, COL);
if (winner != 'c')
{
break;
}
printf("电脑下\n");
computerplay(board, ROW, COL);
printboard(board, ROW, COL);
is_win(board, ROW, COL);
}
if (winner == 'x')
printf("玩家胜\n");
if (winner == 'o')
printf("电脑胜\n");
if (winner == 'q')
printf("平局\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请输入:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出");
break;
default:
printf("输错了,重输\n");
break;
}
} while (input);
return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void initboard(char board[][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < row; j++)
{
board[i][j] = ' ';
}
}
}
void printboard(char board[][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < row; j++)
{
if (j == row - 1)
{
printf(" %c ", board[i][j]);
break;
}
printf(" %c |",board[i][j]);
}
printf("\n");
for (int j = 0; j < row; j++)
{
if (j == row - 1)
{
printf("___", board[i][j]);
break;
}
printf("___|");
}
printf("\n");
}
}
void playerplay(char board[][COL], int row, int col)
{
int x = 0, y = 0;
while (1)
{
printf("请输入坐标纵坐标y 横坐标x\n");
scanf("%d %d", &y, &x);
if (!(y > row || x > col))
{
if (board[y - 1][x - 1] == ' ')
{
board[y - 1][x - 1] = 'x';
break;
}
else
printf("下过了");
}
else
printf("超出棋盘范围\n");
}
}
int is_full(char board[][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
if (board[i][j] == ' ')
return 0;
}
}
return 1;
}
char is_win(char board[][COL], int row, int col)
{
if (is_full(board,row,col))
{
for (int i = 0; i < row; i++)
{
if (board[i][0] == board[i][1] && board[i][0] == board[i][2]&&board[i][2]!=' ')
{
return board[i][0];
}
}
for (int i = 0; i < row; i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[2][i] != ' ')
{
return board[2][i];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[2][2] != ' ')
return board[0][0];
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
return board[1][1];
}
else
return'c';
}
void computerplay(char board[][COL], int row, int col)
{
srand((unsigned long)time(NULL));
while (1)
{
int x = rand() % row; int y = rand() % col;
if (board[y][x] == ' ')
{
board[y ][x ] = 'o';
break;
}
}
printf("Computer ... Done\n");
}