#define _CRT_SECURE_NO_WARNINGS
#define MAX_ROW 11
#define MAX_COL 11
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int x = 0;
int y = 0;
//初始化棋盘
void init(char chessBoard[MAX_ROW][MAX_COL])
{
for (int row = 1; row <= 10; row++)
{
for (int col = 1; col <= 10; col++)
{
chessBoard[row][col] = ' ';
}
}
}
//打印棋盘
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL])
{
printf("+---+---+---+---+---+---+---+---+---+---+\n");
for (int row = 1; row <= 10; row++)
{
printf("| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n",chessBoard[row][1],
chessBoard[row][2], chessBoard[row][3], chessBoard[row][4], chessBoard[row][5],
chessBoard[row][6],chessBoard[row][7], chessBoard[row][8], chessBoard[row][9],
chessBoard[row][10] );
printf("+---+---+---+---+---+---+---+---+---+---+\n");
}
}
//玩家落子
void playerMove(char chessBoard[MAX_ROW][MAX_COL])
{
int row = 0;
int col = 0;
printf("轮到你了!\n");
do
{
printf("请输入坐标:>");
scanf("%d %d", &row, &col);
if (row <= 0 || row >= MAX_ROW || col <= 0 || col >= MAX_COL)
{
printf("超出范围,请重试\n");
continue;
}
if (chessBoard[row][col] != ' ')
{
printf("此处已经有子了\n");
continue;
}
else
{
chessBoard[row][col] = 'X';
x = row;
y = col;
break;
}
} while (1);
}
//电脑落子
void computerMove(char chessBoard[MAX_ROW][MAX_COL])
{
while (1)
{
int row = rand() % 5;
int col = rand() % 5;
if (row >= 3)
{
if (chessBoard[-(row/2) +x][-(col/2) + y] == ' ')
{
chessBoard[-(row/2) +x][-(col/2) +y] = 'O';
break;
}
else
{
continue;
}
}
if (row < 3)
{
if (chessBoard[row + x][col + y] == ' ')
{
chessBoard[row + x][col + y] = 'O';
break;
}
else
{
continue;
}
}
}
}
//判断棋盘是否已满
int isFull(char chessBoard[MAX_ROW][MAX_COL])
{
for (int row = 1; row < MAX_ROW; row++)
{
for (int col = 1; col < MAX_COL; col++)
{
if (chessBoard[row][col] == ' ')
{
return 0;
}
}
}
return 1;
}
//判断谁获胜
char isWin(char chessBoard[MAX_ROW][MAX_COL])
{
for (int row = 1; row < MAX_ROW; row++)
{
for (int col = 1; col <= 5; col++)
{
if (chessBoard[row][col] != ' '
&& chessBoard[row][col] == chessBoard[row][col+1]
&& chessBoard[row][col] == chessBoard[row][col+2]
&& chessBoard[row][col] == chessBoard[row][col+3]
&& chessBoard[row][col] == chessBoard[row][col+4]
)
{
return chessBoard[row][col];
}
}
}
for (int col = 1; col < MAX_COL; col++)
{
for(int row=1;row<=5;row++)
{
if (
chessBoard[row][col] != ' '
&& chessBoard[row][col] == chessBoard[row + 1][col]
&& chessBoard[row][col] == chessBoard[row + 2][col]
&& chessBoard[row][col] == chessBoard[row + 3][col]
&& chessBoard[row][col] == chessBoard[row + 4][col]
)
{
return chessBoard[row][col];
}
}
}
for (int row = 1; row <= 5; row++)
{
for (int col = 1; col <= 5; col++)
{
if (
chessBoard[row][col] != ' '
&&chessBoard[row][col] == chessBoard[row + 1][col + 1]
&& chessBoard[row][col] == chessBoard[row + 2][col + 2]
&& chessBoard[row][col] == chessBoard[row + 3][col + 3]
&& chessBoard[row][col] == chessBoard[row + 4][col + 4]
)
{
return chessBoard[row][col];
}
}
}
for (int row = 10; row >= 5; row--)
{
for (int col = 1; col <= 5; col++)
{
if (
chessBoard[row][col] != ' '
&&chessBoard[row][col]==chessBoard[row-1][col+1]
&& chessBoard[row][col] == chessBoard[row - 2][col + 2]
&& chessBoard[row][col] == chessBoard[row - 3][col + 3]
&& chessBoard[row][col] == chessBoard[row - 4][col + 4]
)
{
return chessBoard[row][col];
}
}
}
if (isFull(chessBoard))
{
return 'q';
}
return ' ';
}
//游戏主体
void game()
{
char chessBoard[MAX_ROW][MAX_COL] = { 0 };
init(chessBoard);
char winner = ' ';
while (1)
{
system("cls");
print_chessBoard(chessBoard);
playerMove(chessBoard);
winner = isWin(chessBoard);
if (winner != ' ')
{
break;
}
computerMove(chessBoard);
winner = isWin(chessBoard);
if (winner != ' ')
{
break;
}
}
print_chessBoard(chessBoard);
if (winner == 'X')
{
printf("恭喜您, 您赢了!\n");
}
else if (winner == 'O')
{
printf("哈哈,您连人工智障都下不过!\n");
}
else
{
printf("您只能和人工智障打平手!!\n");
}
}
void menu()
{
printf("--------------------------\n");
printf("--------1.开始游戏--------\n");
printf("--------0.退出游戏--------\n");
printf("--------------------------\n");
}
int main()
{
int choice = 0;
srand((unsigned int)time(0));
do
{
menu();
printf("请输入你的选择:");
scanf("%d", &choice);
switch(choice)
{
case 1:
game();
break;
case 0:
printf("退出游戏,GOODBYE!!!!!\n");
break;
default :
printf("输入错误!请重新输入!\n");
break;
}
} while (choice != 0);
system("pause");
return 0;
}