test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
int ret=0;
char board[ROW][COL]={0};
//初始化棋盘
Initplayboard(board,ROW,COL);
//打印棋盘
displayboard(board,ROW,COL);
//移动
while(1)
{
//玩家移动
playermove(board,ROW,COL);
displayboard(board,ROW,COL);
//判断输赢
ret=ISwin(board,ROW,COL);//判断的时候要注意不能是三个一样的空格
if(ret!='C')
{
break;//
}
//电脑移动
computermove(board,ROW,COL);
displayboard(board,ROW,COL);
//判断输赢
ret=ISwin(board,ROW,COL);
if(ret!='C')
{
break;
}
}
if(ret=='+')
{
printf("玩家赢\n");
}
else if(ret=='-')
{
printf("电脑赢\n");
}
else
{
printf("平局\n");
}
}
void menu()
{
printf("**********************************************\n");
printf("**** 1.play ****\n");
printf("**** 0.exlt ****\n");
printf("**********************************************\n");
}
void test()
{
int input=0;
menu();
do
{
printf("请输入>:\n");
scanf("%d",&input);
switch(input)
{
case 1:
{
game();
break;
}
case 0:
{
printf("退出游戏.......\n");
break;
}
default :
{
printf("输入错误,请重新输入>:\n");
break;
}
}
}while(input);
}
int main()
{
test();
return 0;
}
game.c
#include"game.h"
void Initplayboard(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++)
{
board[i][j]=' ';
}
}
}
void displayboard(char board[ROW][COL],int row,int col)//打印棋盘
{
int x=0;
int y=0;
for(x=0;x<row;x++)
{
//1打印数据行
for(y=0;y<col;y++)
{
printf(" %c ",board[x][y]);
if(y!=col-1)
{
printf("|");
}
if(y==col-1)
{
printf("\n");
}
}
//2打印分割行
for(y=0;y<col;y++)
{
printf("___");
if(y!=col-1)
{
printf("|");
}
if(y==col-1)
{
printf("\n");
}
}
}
}
//玩家移动
void playermove(char board[ROW][COL],int row,int col)
{
int a=0;
int b=0;
while(1)
{
printf("请输入坐标>:");
scanf("%d%d",&a,&b);
if(a>=1&&a<=row && b>=1&&b<=col)
{
if(board[a-1][b-1]==' ')
{
board[a-1][b-1]='+';
break;
}
else
{
printf("该位置已有棋子,请重新下棋\n");
}
}
else
{
printf("坐标不合法,请重新输入\n");
}
}
}
//电脑移动
void computermove(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
srand((unsigned int)time(NULL));
while(1)
{
int x=rand()%row;
int y=rand()%col;
if(board[x][y]==' ')
{
printf("电脑下\n");
board[x][y]='-';
break;
}
}
}
int ISfull(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
for(x=0;x<row;x++)
{
for(y=0;y<col;y++)
{
if(board[x][y]==' ')
{
return 0;
}
}
}
return 1;
}
//判断输赢 ‘+’玩家赢‘-’电脑赢‘Q’平局‘C’继续
char ISwin(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
for(x=0;x<row;x++)
{
if(board[x][0]==board[x][1]&&board[x][1]==board[x][2]&&board[x][0]!=' ')//判断三行
{
return board[x][0];
}
}
for(x=0;x<row;x++)
{
if(board[0][x]==board[1][x]&&board[1][x]==board[2][x]&&board[0][x]!=' ')//判断三列
{
return board[0][x];
}
}
if(board[0][0]==board[1][1]&&board[1][1]==board[2][2]&&board[0][0]!=' ')//判断左斜线
{
return board[0][0];
}
if(board[0][2]==board[1][1]&&board[1][1]==board[2][0]&&board[0][2]!=' ')//判断右斜线
{
return board[0][2];
}
if(1==ISfull(board,ROW,COL))
{
return 'Q';
}
return 'C';
}
game.h
#define _CRT_SECURE_NO_WARNINGS 1
#define ROW 3
#define COL 3
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void Initplayboard(char board[ROW][COL],int row,int col);
void displayboard(char board[ROW][COL],int row,int col);
void playermove(char board[ROW][COL],int row,int col);
void computermove(char board[ROW][COL],int row,int col);
char ISwin(char board[ROW][COL],int row,int col);
int ISfull(char board[ROW][COL],int row,int col);