头文件game.h部分:
#ifndef _GAME_H_
#define _GAME_H_
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
enum OP
{
QUIT,
PLAY
};
#define ROWS 3
#define COLS 3
typedef unsigned int uint;
void init_board(char board[ROWS][COLS]);//初始化棋盘
void print_board(char board[ROWS][COLS]);//打印棋盘
void play_move(char board[ROWS][COLS]);//玩家玩
char cheak_win(char board[ROWS][COLS]);//检测输赢
void computer_move(char board[ROWS][COLS]);//电脑玩
int cheak_full(char board[ROWS][COLS]);//检测棋盘是否为满
#endif //_GAME_H_
各种功能实现game.c部分:
#include "game.h"
void init_board(char board[ROWS][COLS])
{
int i=0;
for(i=0;i<ROWS;i++)
{
int j=0;
for(j=0;j<COLS;j++)
{
board[i][j]=' ';
}
}
}
void print_board(char board[ROWS][COLS])
{
int i=0;
for(i=0;i<ROWS;i++)
{
printf(" %c | %c | %c \n",board[i][0],board[i][1],board[i][2]);
if(i!=2)
{
printf("---|---|---\n");
}
}
}
void play_move(char board[ROWS][COLS])
{
int x=0;
int y=0;
printf("请输入坐标(0<x<4),(0<y<4)>:");
scanf("%d%d",&x,&y);
x--;
y--;
if(board[x][y]==' ')
{
board[x][y]='X';
}
else
{
play_move(board);
}
}
char cheak_win(char board[ROWS][COLS])
{
int i=0;
for(i=0;i<ROWS;i++)
{
if((board[i][0]==board[i][1])&&(board[i][1]==board[i][2])&&(board[i][2]!=' '))//行成
{
return board[i][0];
}
}
for(i=0;i<COLS;i++)
{
if((board[0][i]==board[1][i])&&(board[1][i]==board[2][i])&&(board[2][i]!=' '))//列成
{
return board[0][i];
}
}
if((board[0][0]==board[1][1])&&(board[1][1]==board[2][2])&&(board[1][1]!=' '))//对角线成
{
return board[1][1];
}
if((board[2][0]==board[1][1])&&(board[1][1]==board[0][2])&&(board[1][1]!=' '))
{
return board[1][1];
}
return ' ';
}
int cheak_full(char board[ROWS][COLS])
{
int i=0;
for(i=0;i<ROWS;i++)
{
int j=0;
for(j=0;j<COLS;j++)
{
if(board[i][j]==' ')
{
return 0;//未满
}
}
}
return 1;//满
}
void computer_move(char board[ROWS][COLS])
{
int x=0;
int y=0;
printf("电脑玩!!!!!\n");
srand((uint)time(NULL));
while(1)
{
x=rand()%3;
y=rand()%3;
if(board[x][y]==' ')
{
board[x][y]='0';
break;
}
}
}
测试主函数部分test.c:
#include "game.h"
void menu()
{
printf("请选择>:\n");
printf("***********************************\n");
printf("********** 1.play game **********\n");
printf("********** 0.quit game **********\n");
printf("***********************************\n");
}
void game()
{
char board[ROWS][COLS]={0};
char ret=' ';
init_board(board);
print_board(board);
do
{
play_move(board);
ret=cheak_win(board);
if(ret!=' ')
{
break;
}
if(cheak_full(board)==1)
{
ret='q';
break;
}
print_board(board);
computer_move(board);
ret=cheak_win(board);
if(ret!=' ')
{
break;
}
if(cheak_full(board)==1)
{
ret='q';
break;
}
print_board(board);
}while(ret==' ');
print_board(board);
if(ret=='X')
{
printf("恭喜你赢了!!!\n");
}
else if(ret=='0')
{
printf("你输了!!!\n");
}
else if(ret=='q')
{
printf("平局!!!!\n");
}
}
int main()
{
int input=1;
while(input)
{
menu();
scanf("%d",&input);
switch(input)
{
case PLAY:
game();
break;
case QUIT:
exit(EXIT_SUCCESS);
break;
}
}
system("pause");
return 0;
}