//五子棋改进:(电脑随机下棋,棋盘大小可随意更改)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Menu(int choice)
{
printf("=====================\n");
printf("1 开始游戏!\n");
printf("0 退出游戏!\n");
printf("=====================\n");
printf("请输入您的选择:\n");
scanf("%d", &choice);
return choice;
}
#define ROW 10
#define COL 10
char g_chess_board[ROW][COL];
void Init()
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 0; col < COL; ++col)
{
g_chess_board[row][col] = ' ';
}
}
}
void Display()
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 0; col < COL; ++col)
{
printf("| %c ", g_chess_board[row][col]);
}
printf("|\n");
for (int col = 0; col < COL; ++col)
{
printf("____");
}
printf("\n");
}
}
void Playermove()
{
int row = 0;
int col = 0;
while (1)
{
printf("请玩家落子:(row,col)");
scanf("%d %d", &row, &col);
if (row < 0 || row >= ROW || col < 0 || col >= COL)
{
printf("输入有误,请重新输入:\n");
continue;
}
if (g_chess_board[row][col] != ' ')
{
printf("此处有子,请重新输入:");
continue;
}
g_chess_board[row][col] = 'x';
break;
}
}
void Computermove()
{
printf("请电脑落子:\n");
while (1)
{
int row = rand() % ROW;
int col = rand() % COL;
if (g_chess_board[row][col] == ' ')
{
g_chess_board[row][col] = 'o';
break;
}
}
}
int Isfull()
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 0; col < COL; ++col)
{
if (g_chess_board[row][col] == ' ')
{
return 0;
}
}
}
return 1;
}
char Checkwinner(char winner)
{
for (int row = 0; row < ROW; ++row)
{
for (int col = 2; col < COL - 2; ++col)
{
if (g_chess_board[row][col] == g_chess_board[row][col - 2] &&
g_chess_board[row][col] == g_chess_board[row][col - 1] &&
g_chess_board[row][col] == g_chess_board[row][col + 1] &&
g_chess_board[row][col] == g_chess_board[row][col + 2] &&
g_chess_board[row][col] != ' ')
{
return g_chess_board[row][col];
}
}
}
for (int col = 0; col < COL; ++col)
{
for (int row = 2; row < ROW - 2; ++row)
{
if (g_chess_board[row][col] == g_chess_board[row - 2][col] &&
g_chess_board[row][col] == g_chess_board[row - 1][col] &&
g_chess_board[row][col] == g_chess_board[row + 1][col] &&
g_chess_board[row][col] == g_chess_board[row + 2][col] &&
g_chess_board[row][col] != ' ')
{
return g_chess_board[row][col];
}
}
}
for (int row = 2; row < ROW - 2; ++row)
{
for (int col = 2; col < COL - 2; ++col)
{
if (row == col&&
g_chess_board[row][col] == g_chess_board[row - 2][col + 2] &&
g_chess_board[row][col] == g_chess_board[row - 1][col + 1] &&
g_chess_board[row][col] == g_chess_board[row + 1][col - 1] &&
g_chess_board[row][col] == g_chess_board[row + 2][col - 2] &&
g_chess_board[row][col] != ' ')
{
return g_chess_board[row][col];
}
}
}
for (int row = 2; row < ROW - 2; ++row)
{
for (int col = 2; col < COL - 2; ++col)
{
if (row==col&&
g_chess_board[row][col] == g_chess_board[row - 2][col - 2] &&
g_chess_board[row][col] == g_chess_board[row - 1][col - 1] &&
g_chess_board[row][col] == g_chess_board[row + 1][col + 1] &&
g_chess_board[row][col] == g_chess_board[row + 2][col + 2] &&
g_chess_board[row][col] != ' ')
{
return g_chess_board[row][col];
}
}
}
if (Isfull() == 1)
{
return 'p';
}
return ' ';
}
void Game()
{
char winner = '0';
Init();
Display();
//1, 定义二维数组表示棋盘
//2,初始化数组
//3,打印棋盘
//4,请玩家落子
//5,检查是否结束
//6,请电脑落子
//7,检查是否结束
while (1)
{
Playermove();//玩家落子用x表示
Display();
winner = Checkwinner(winner);
if (winner != ' ')
{
break;
}
Computermove();//电脑落子用o表示
Display();
winner = Checkwinner(winner);
if (winner != ' ')
{
break;
}
}
if (winner == 'x')
{
printf("玩家获胜!\n");
}
else if (winner == 'o')
{
printf("电脑获胜!\n");
}
else if (winner == 'p')
{
printf("平局!\n");
}
}
int main()
{
srand((unsigned int)time(0));
int choice = 0;
while (1)
{
choice = Menu(choice);
if (choice == 1)
{
Game();
}
else
{
printf("Goodbye!\n");
break;
}
}
system("pause");
return 0;
}