game.h:
#pragma once
//声明参数
#include<stdio.h>//头文件的包含
#include<stdlib.h>
#include<time.h>
#define row 3
#define col 3
//声明函数
void initable(char table[row][col], int Row, int Col);//初始化棋盘
void displayboard(char table[row][col],int Row,int Col);//打印棋盘
void man_play(char table[row][col], int Row, int Col);//玩家下
void computer_play(char table[row][col], int Row, int Col);//电脑下
int whowin(char table[row][col], int Row, int Col);//判断输赢
game.c:
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void initable(char table[row][col], int Row, int Col)//初始化棋盘
{
int i = 0;
int j = 0;
for (i = 0;i < Row;i++)
{
for (j = 0;j < Col;j++)
{
table[i][j] = ' ';
}
}
}
void displayboard(char table[row][col], int Row, int Col)//打印棋盘
{
int i = 0;
int j = 0;
for (i = 0;i < Row;i++)
{
for (j = 0;j < Col;j++)
{
printf(" %c ", table[i][j]);
if (j < Col - 1)
{
printf("|");
}
}
printf("\n");
for (j = 0;j < Col;j++)
{
if (i < Row - 1)
{
printf("---");
}
if (j < Col - 1 && i < Row - 1)
{
printf("|");
}
}
printf("\n");
}
}
void man_play(char table[row][col], int Row, int Col)
{
int x = 0;
int y = 0;
printf("玩家请输入\n");
printf("-->");
scanf("%d %d", &x, &y);
if (x > 0 && x < row + 1 && y>0 && y < col + 1 && table[x-1][y-1]==' ')
{
table[x - 1][y - 1] = '*';
}
else
{
printf("输入不符合规范\n");
}
}
void computer_play(char table[row][col], int Row, int Col)
{
srand((unsigned)time(0));
int flag = 1;
while (flag)
{
int x = rand() % 3;
int y = rand() % 3;
if (x >= 0 && x < row && y>=0 && y < col && table[x][y] == ' ')
{
table[x][y] = '#';
flag = 0;
}
else
{
flag = 1;
}
}
}
int whowin(char table[row][col], int Row, int Col)
{
int i = 0;
int j = 0;
int wan = 0;
int dian = 0;
for(i=0;i<Row;i++)
{
wan = 0;
dian = 0;
for (j = 0;j < Col-1;j++)
{
if (table[i][j]==table[i][j+1] &&table[i][j] == '*')
{
wan++;
}
if (table[i][j] == table[i][j + 1] &&table[i][j] == '#')
{
dian++;
}
}
}
for (j = 0;j < Col;j++)
{
wan = 0;
dian = 0;
for (i = 0;i < Row-1;i++)
{
if (table[i][j] == table[i+1][j] &&table[i][j] == '*')
{
wan++;
}
if (table[i][j] == table[i+1][j] &&table[i][j] == '#')
{
dian++;
}
}
}
i = 0;
j = 0;
if (table[i][j] == table[i + 1][j + 1] && table[i + 1][j + 1] == table[i + 2][j + 2] && table[i][j] == '*')
{
wan = 2;
}
if (table[i][j] == table[i + 1][j + 1] && table[i + 1][j + 1] == table[i + 2][j + 2] && table[i][j] == '#')
{
dian = 2;
}
if (wan == 2)
{
printf("玩家赢\n");
return 1;
}
if (dian == 2)
{
printf("电脑赢\n");
return 2;
}
int p = 0;//判断是否平局的工具
for (i = 0;i < Row;i++)
{
for (j = 0;j < Col;j++)
{
if (table[i][j] != ' ')
{
p++;
}
}
}
if(p==9)
{
printf("平局\n");
return 5;
}
}
text.c:
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void menu()
{
printf("*************************************\n");
printf("********** 0.exit ***********\n");
printf("********** 1.play ***********\n");
printf("*************************************\n");
}
void game()
{
char table[row][col];//定义函数
initable(table, row, col);//初始化棋盘
displayboard(table, row, col);//打印棋盘
while (1)
{
man_play(table, row, col); //玩家玩
if (whowin(table, row, col) == 1)//()中的whowin(table, row, col)会执行一次
{
displayboard(table, row, col);//打印棋盘
break;
}
if (whowin(table, row, col) == 5)
{
displayboard(table, row, col);//打印棋盘
break;
}
computer_play(table, row, col); //电脑玩
displayboard(table, row, col);//打印棋盘
if (whowin(table, row, col) == 2 )//()中的whowin(table, row, col)会执行一次
{
break;
}
if (whowin(table, row, col) == 5)
{
displayboard(table, row, col);//打印棋盘
break;
}
}
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 0:
printf("退出游戏\n");
break;
case 1:
game();
break;
default:
printf("搞错了重来\n");
break;
}
}
while (input);
return 0;
}