text.c 文件
#include"game.h"
int main()
{
int a=0;
int count=1;
do
{
menu();
scanf("%d",&a);
switch(a)
{
case 1:
game();
break;
case 0:
count--;
break;
default:
printf("选择错误,请重新输入!\n");
break;
}
}while(count);
return 0;
}
game.h 文件
#ifndef _GAME_H
#define _GAME_H
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
#define ROW 3
#define COL 3
void menu();
void game();
void init_board(char board[ROW][COL],int row,int col);
void print_board(char board[ROW][COL],int row,int col);
void player_move(char board[ROW][COL],int row,int col);
void computer_move(char board[ROW][COL],int row,int col);
char is_win(char board[ROW][COL],int row,int col);
int is_full(char board[ROW][COL],int row,int col);
#endif//_GAME_H_
game.c 文件
#include"game.h"
void menu()
{
printf("**************************\n");
printf("**** 1.play 0.exit ****\n");
printf("**************************\n");
}
void init_board(char board[ROW][COL],int row,int col)
{
memset(board,' ',ROW*COL);
}
void print_board(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
if(i<row-1)
{
printf("---|---|---\n");
}
}
}
void player_move(char board[ROW][COL],int row,int col)
{
int x=0,y=0;
while(1)
{
printf("请输入坐标->\n");
scanf("%d %d",&x,&y);
if(x>0 && x<4 && y>0 && y<4)
{
if(board[x-1][y-1]=' ')
{
board[x-1][y-1]='*';
break;
}
else
printf("该坐标被占用->\n");
}
else
printf("输入坐标错误->\n");
}
}
void computer_move(char board[ROW][COL],int row,int col)
{
int a=0,b=0;
while(1)
{
a=rand()%row;
b=rand()%col;
if(board[a][b]==' ')
{
board[a][b]='0';
break;
}
}
}
static int is_full(char board[ROW][COL],int row,int col)//判断表满
{
int i=0;
int j=0;
for (i=0;i<row;i++)
{
for (j=0;j<col;j++)
{
if (board[i][j]==' ')
return 0;
}
}
return 1;
}
char is_win(char board[ROW][COL],int row,int col)
{
int i=0;
for(i=0;i<row;i++)
{
if((board[i][0]==board[i][1])&&(board[i][1]==board[i][2]))
{
return board[i][0];
}
}
for(i=0;i<col;i++)
{
if((board[0][i]==board[1][i])&&(board[1][i]==board[2][i]))
{
return board[0][i];
}
}
if((board[0][0]==board[1][1])&&(board[1][1]==board[2][2]))
{
return board[0][0];
}
if((board[2][0]==board[1][1])&&(board[1][1]==board[0][2]))
{
return board[2][0];
}
if (is_full(board,ROW,COL)==1)
{
return 'Q';
}
else
return ' ';
}
int board_full(char board[ROW][COL])//棋盘判满函数
{
int i= 0;
int j =0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if (board[i][j]==' ')
return 0;
}
}
return 1;
}
void game()
{
char i;
char board[ROW][COL];
init_board(board,ROW,COL);
print_board(board,ROW,COL);
while (1)
{
printf("玩家走->:\n");
player_move(board,ROW,COL);
print_board(board,ROW,COL);
i=is_win(board,ROW,COL);
if(i!= ' ')
break;
printf("电脑走->:\n");
computer_move(board,ROW,COL);
print_board(board,ROW,COL);
i=is_win(board,ROW,COL);
if(i!=' ')
break;
}
if(i=='*')
{
printf("玩家获胜!\n");
}
else if(i=='0')
{
printf("电脑获胜!\n");
}
else if(i=='Q')
{
printf("平局!\n");
}
}