game.h
#ifndef __ADD_H__
#define __ADD_H__
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
void game();
void com_move(char a[3][3]);
void play_move(char a[3][3]);
void init(char a[3][3]);
void print(char a[3][3]);
char check_win(char a[3][3]);
int is_full(char a[3][3]);//判断棋盘有没有满
#endif //__ADD_H__
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void menu()
{
printf("**********************************\n");
printf("****** 1.game 2.exit *******\n");
printf("**********************************\n");
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
while(1)
{
menu();
scanf("%d",&input);
switch(input)
{
case 1:
game();
break;
case 2:
exit(1);
break;
default:
printf("选择错误\n");
break;
}
}
}
int main()
{
test();
return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
//初始化数组,使值都是空格
void init(char a[3][3])
{
int i = 0;
int j = 0;
//memset(a,' ',row*col*sizeof(char)) <string.h>
//要初始化空间的起始地址,内容,大小
for(i = 0;i < 3;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=' ';
}
}
}
//打印棋盘
void print(char a[3][3])
{
int i = 0;
for(i = 0;i<3;i++)
{
printf(" %c | %c | %c \n",a[i][0],a[i][1],a[i][2]);
if ( 2!=i)
printf("-----------\n");
}
printf("\n");
}
void player_move(char a[3][3])
{
int x = 0;
int y = 0;
while(1)
{
printf("输入要走的位置:\n");
scanf("%d%d",&x,&y);
if(x>=0&&x<=2&&y>=0&&y<=2)
{
if(' '==a[x][y])
{
a[x][y]='x';
break;
}
else
{
printf("该位置有内容\n");
}
}
else
printf("位置越界\n");
}
}
void com_move(char a[3][3])
{
int x = 0;
int y = 0;
while(1)
{
x = rand()%3;
y = rand()%3;
if(' '==a[x][y])
{
a[x][y] = '0';
break;
}
}
}
char check_win(char a[3][3])
{
int i = 0;
for(i=0;i<3;i++)
{
if ((a[i][0]==a[i][1])&&(a[i][1]==a[i][2])&&(a[i][0]!=' ')) //一行
return a[i][0];
if ((a[0][i]==a[1][i])&&(a[1][i]==a[2][i])&&(a[0][i]!=' ')) //一列
return a[0][i];
if ((a[0][0]==a[1][1])&&(a[1][1]==a[2][2])&&(a[0][0]!=' '))
return a[0][0];
if ((a[0][2]==a[1][1])&&(a[1][1]==a[2][0])&&(a[1][1]!=' '))
return a[1][1];
}
if(is_full(a)==1)
{
return 'q';//棋盘满了返回q
}
return 'r';//谁都没赢谁都没输
}
int is_full(char a[3][3])
{
int i =0;
int j = 0;
for(i = 0; i<3;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]==' ')
{
return 0;//没满返回0
}
}
}
return 1;//满了返回1
}
void game()
{
char a[3][3] = {0};
char win = 0;
init(a);
print(a);
do
{
//玩家走
player_move(a);
print(a);
win = check_win(a);
if(win != 'r' )
{
break;
}
//电脑走
com_move(a);
print(a);
win = check_win(a);
//如果win是' '就继续玩
if(win != 'r')
{
break;
}
}while(1);
if(win == '0')
printf("电脑赢\n");
else if(win == 'x')
printf("玩家赢\n");
else if(win == 'q')
printf("平局\n");
}