三子棋的主要函数可以分为以下几个:
//初始化棋盘
void InitBoard(char board[][ROW], int row, int col);
//展示棋盘
void ShowBoard(char board[][ROW], int row, int col);
//玩家移动
void PlayerMove(char board[][ROW]);
//判断输赢
int IsWin(char board[][ROW], int row, int col);
//电脑移动
void ComputerMove(char board[][ROW]);
//判断是否下满棋盘
int IsFull(char board[][ROW]);
//打印菜单
void menu()
//游戏开始
void game()
初始化棋盘部分
//初始化棋盘
void InitBoard(char board[][ROW], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';//给二维数组每个位置赋值为空格
}
}
}
展示棋盘部分
void ShowBoard(char board[][ROW], int row, int col)
{
int i = 0, j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
printf("|");
}
printf("\n");
for (j = 0; j < col; j++)
{
printf("___|");
}
printf("\n");
}
}
玩家移动部分
void PlayerMove(char board[][ROW])
{
int x=0, y=0;
printf("请输入棋子的位置:");
while (1)
{
scanf("%d%d", &x, &y);
if ((x > 0 && x<4) && (y>0 && y <4))//判断输入位置是否合法
{
if (board[x-1][y-1] == ' ')
{
board[x - 1][y - 1] = 'x';
break;
}
else
{
printf("该位置有棋子了,请重新输入!\n");
}
}
else
{
printf("输入位置不合法,请重新输入!\n");
}
}
system("cls");//清屏操作
}
判断棋盘是否下满,平局的情况
int IsFull(char board[][ROW])
{
int i = 0, j = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
if (board[i][j] == ' ')//如果棋盘没有下满,返回0
{
return 0;
}
}
}
return 1;//棋盘下满了,返回1
}
判断输赢
int IsWin(char board[][ROW], int row, int col)
{
int x = 0, y = 0;
//判断是否有横行三个相同
for (x = 0; x < row; x++)
{
if (board[x][y] == board[x][y + 1] && board[x][y + 1] == board[x][y + 2] && board[x][y] != ' ')
{
return board[x][y];
}
}
//判断/是否相同
if (board[x][x] == board[x - 1][x - 1] && board[x - 1][x - 1] == board[x - 2][x - 2] && board[x][x] != ' ')
{
return board[x][x];
}
x = 0;
//判断竖行是否三个相同
for (y = 0; y < row; y++)
{
if (board[x][y] == board[x + 1][y] && board[x + 1][y] == board[x + 2][y] && board[x][y]!= ' ')
{
return board[x][y];
}
}
//判断\是否相同
if (board[x][x] == board[x + 1][x + 1] && board[x + 1][x + 1] == board[x + 2][x + 2] && board[x][x]!= ' ')
{
return board[x][x];
}
if (IsFull(board))//判断是否下满棋盘
{
return 1;
}
return 0;
}
电脑移动
void ComputerMove(char board[][ROW])
{
int x = 0, y = 0;
while (1)
{
x = rand() % ROW;
y = rand() % COL;
if (board[x][y] != 'x'&&board[x][y] != 'o')
{
board[x][y] = 'o';
break;
}
}
}
game函数
//游戏开始
void game()
{
int ret =0;
char board[3][3] = { 0 };
InitBoard(board, ROW, COL);
ShowBoard(board, ROW, COL);
while (1)
{
PlayerMove(board);//玩家移动
ret = IsWin(board, ROW, COL);//判断玩家移动后,玩家和电脑的输赢情况
if (ret != 0)
{
break;
}
ShowBoard(board, ROW, COL);//打印玩家移动后的棋盘
printf("电脑移动\n");
ComputerMove(board);//电脑移动
ShowBoard(board, ROW, COL);//打印电脑移动后的棋盘
ret = IsWin(board, ROW, COL);//判断电脑移动后,玩家和电脑的输赢情况
if (ret != 0)
{
break;
}
}
if (ret == 'x')
{
printf("牛逼傲\n");
}
else if (ret == 'o')
{
printf("真菜\n");
}
else if (ret==1)
{
printf("平局\n");
}
}
菜单打印
void menu()
{
printf("*****************************\n");
printf("**********0.不玩游戏*********\n");
printf("**********1.要玩游戏*********\n");
printf("*****************************\n");
}
主函数部分
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//设置随机种子
do
{
menu();
printf("请输入您的玩法-->>");
scanf("%d", &input);
system("cls");//清屏操作
switch (input)
{
case 1:
printf("游戏开始\n");
game();
break;
case 0:
printf("感谢使用!\n");
break;
default:
printf("请输入正确的玩法~~~\n");
break;
}
} while (input);
return 0;
}
运行结果