//game.h
void init_board(char board[ROW ][COL ], int row, int col);//初始化棋盘
void display(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);//电脑走
int chek_win(char board[ROW ][COL ], int row, int col);//检查是否赢
int CheckNull(char board[ROW ][COL ], int row, int col);//判断棋盘是否已满;
#include<stdio.h>
#include<stdlib.h>
#include"game.h"
#include <time.h>
void menu()
{
printf ("*****************\n" );
printf ("**** 1.play ****\n" );
printf ("**** 0.exit ****\n" );
printf ("*****************\n" );
}
void game()
{
int ret = 0 ;
char board[ROW][COL] = { 0 };
init_board(board ,ROW, COL);
display(board, ROW ,COL);
while (1 )
{
player_move(board, ROW, COL);
display(board, ROW, COL);
ret=check_win(board, ROW, COL);
if (ret != ' ' )
{
break ;
}
computer_move(board, ROW, COL);
display(board, ROW, COL);
check_win(board, ROW, COL);
if (ret != ' ' )
{
break ;
}
}
if (ret == 'X' )
{
printf ("恭喜你,赢了\n" );
}
if (ret == 'O' )
{
printf ("很遗憾,电脑赢了\n" );
}
if (ret == 'q' )
{
printf ("平局\n" );
}
}
int main()
{
int choose = 0 ;
srand((unsigned int )time(NULL));
do
{
menu();
printf ("请输入;> " );
scanf_s("%d" , &choose);
switch (choose)
{
case 1 :
game();
break ;
case 0 :
printf ("退出游戏\n" );
break ;
default :
printf ("输入错误\n" );
break ;
}
printf ("欢迎再来玩" );
} while (choose);
system("pause" );
return 0 ;
}
#include"game.h"
#include"game.h"
#include<stdio.h>
#include<stdlib.h>
#include <time.h>
void init_board(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 display(char board[ROW][COL], int row, int col)
{
int i = 0 ; int j = 0 ;
printf ("---------\n" );
for (i = 0 ; i < col; i++)
{
printf ("%c | %c | %c\n" , board[i][0 ], board[i][1 ], board[i][2 ]);
if (i != 2 )
{
printf ("---------\n" );
}
}
printf ("---------\n" );
}
void player_move(char board[ROW][COL], int row, int col)
{
int x = 0 ;
int y = 0 ;
printf ("请输入坐标\n" );
scanf_s("%d%d" , &x, &y);
while (1 )
{
if ((1 <= x && x <= 3 ) && (1 <= y && y <= 3 ))
{
if (board[x - 1 ][y - 1 ] == ' ' )
{
board[x - 1 ][y - 1 ] = 'X' ;
break ;
}
else
{
printf ("棋盘有棋子了,请重新输入\n" );
}
}
else
{
printf ("输入错误\n" );
}
}
}
void computer_move(char board[ROW][COL], int row, int col)
{
int x = 0 ;
int y = 0 ;
printf ("电脑走棋\n" );
while (1 )
{
x = rand() % row;
y = rand() % col;
if (board[x][y] == ' ' )
{
board[x][y] = 'O' ;
break ;
}
}
}
int check_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 ])) && (board[i][1 ] != ' ' ))
{
return board[i][1 ];
}
}
for (i = 0 ; i < col; i++)
{
if (((board[0 ][i] == board[1 ][i]) && (board[1 ][i] == board[2 ][i])) && (board[1 ][i] != ' ' ))
{
return board[1 ][i];
}
}
if (((board[0 ][0 ] == board[1 ][1 ]) && (board[1 ][1 ] == board[2 ][2 ])) && (board[1 ][1 ] != ' ' ))
{
return board[1 ][1 ];
}
if (((board[0 ][2 ] == board[1 ][1 ]) && (board[1 ][1 ] == board[2 ][0 ])) && (board[1 ][1 ] != ' ' ))
{
return board[1 ][1 ];
}
if (CheckNull(board, ROW, COL))
{
return 'q' ;
}
return ' ' ;
}
int CheckNull(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 ;
}