//三子棋
//game.h头文件
#ifndef __GAME_H__
#define __GAME_H__
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define ROW 3
#define COL 3
void Inin_Board(char arr[ROW][COL],int row,int col);
void Display_Board(char arr[ROW][COL], int row, int col);
void Computer_Put(char arr[ROW][COL], int row, int col);
void Customer_Put(char arr[ROW][COL], int row, int col);
char Check_Win(char arr[ROW][COL], int row, int col);
#endif
//game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void Inin_Board(char arr[ROW][COL], int row, int col)//初始化棋盘,使其全为空格
{
memset(arr, ,row*col);
}
void Display_Board(char arr[ROW][COL], int row, int col)//打印一个棋盘
{
int i = 0;
for (i = 0; i < row; i++)
{
printf(" %c | %c | %c
", arr[i][0], arr[i][1], arr[i][2]);
if (i < row - 1)
{
printf(" -----------
");
}
}
}
void Computer_Put(char arr[ROW][COL], int row, int col)//电脑走一步
{
printf("电脑走:
");
while (1)
{
row = rand() % 3;
col = rand() % 3;
if (arr[row][col] == )
{
break;
}
}
arr[row][col] = @;
}
void Customer_Put(char arr[ROW][COL], int row, int col)//你走一步
{
int i = 0, j = 0;
printf("你走:
");
printf("请输入你要走的坐标:");
while (1)
{
scanf("%d%d", &i, &j);
i--; j--;
if ((i >= 0 && i <= 2) && (j <= 2 && j >= 0))
{
if (arr[i][j] == )
{
arr[i][j] = X;
break;
}
else
{
printf("坐标已被占用,请重新输入:");
}
}
else
{
printf("输入坐标错误,请重新输入:");
}
}
}
int Full_Board(char arr[ROW][COL], int row, int col)//判断棋盘是否下满
{
int i = 0, 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 row, int col)//检查是电脑赢了,还是你赢了,还是平局,然后输出,否则继续
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
if (arr[i][0] == arr[i][1] && arr[i][0] == arr[i][2] && arr[i][0] != )
{
return arr[i][1];
}
}
for (i = 0; i < col; i++)
{
if (arr[0][i] == arr[1][i] && arr[0][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[1][1] != )
{
return arr[1][1];
}
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != )
{
return arr[1][1];
}
else
{
if (Full_Board(arr, row, col))
{
return q;
}
else return ;
}
}
//Main.C
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include"game.h"
void Menu()
{
printf("**************************
");
printf("**** 1.play 0.exit ****
");
printf("**************************
");
}
void game()
{
char flag = 0;
char board[ROW][COL];
Inin_Board(board, ROW, COL);
Display_Board(board, ROW, COL);
while (1)
{
Computer_Put(board, ROW, COL);
Display_Board(board, ROW, COL);
if ((flag = Check_Win(board, ROW, COL)) != )
break;
Customer_Put(board, ROW, COL);
Display_Board(board, ROW, COL);
if ((flag = Check_Win(board, ROW, COL)) != )
break;
}
if (flag == @)
{
printf("电脑赢!
");
}
if (flag == X)
{
printf("你赢了!
");
}
if (flag == q)
printf("平局
");
}
int main()
{
int choose = 0;
srand((unsigned int)time(NULL));
do
{
Menu();
printf("请输入你的选择:");
scanf("%d", &choose);
switch (choose)
{
case 1:game();
break;
case 0:break;
default:printf("输入错误,请重新输入!
");
break;
}
} while (choose);
fflush(stdin);
getchar();
return 0;
}