前言:
相信我们都玩过三子棋,规则很简单,但想用c语言做出这个游戏,事实上也是比较简单的.(嗯…的确是这样)下面通过c语言进行对三子棋的分析.
结尾含源代码
1.先进行环境的配置
一共会用到三个文件,分别是两个源文件test.c game.c ,还有一个头文件game.h
他们的关系分别是:
test.c是主体,是游戏的测试逻辑
game.c是游戏的实现逻辑
game.h是实现游戏函数的声明
也就是说,main函数在test.c文件中,游戏的实现会使用一部分函数,而函数的功能的实现主要是在game.c函数里,主体文件中使用时引用即可。game.c函数中主要是为了函数的声明。说到这里,你是不是有疑惑,为什么要创建这么多的文件,事实上,如果要实现三子棋的看功能的实现的确只需要一个test.c就可以完成。但是分开能够很好区分各自的功能,防止文件的内容过于繁琐,不便观察。这样就能更好的理解。
2.各种功能实现的逻辑关系
实现大致流程是:
1.实现游戏的开始退出流程
2.创建一个名为board的二维数组,并进行初始化
3.棋盘的搭建
4.玩家下棋,并打印新的棋盘
5.电脑下棋,并打印新的棋盘
6.判断结果
2.1 实现游戏的开始退出流程
便于分析,我把各部分的功能分解,所有的功能全部放在test函数中来实现
int main()
{
test();
return 0;
}
打印一个菜单。
void menu()
{
printf("**************************\n");
printf("****** 1.star **********\n");
printf("****** 0.exit **********\n");
printf("**************************\n");
玩家选择开始游戏与退出游戏选择的实现
void test()
{
int input = 0;
do
{
menu();
printf("请输入开始或者退出:");
scanf("%d", &input);
switch (input)
{
case(1):
game(); break;
case(0):
printf("退出游戏\n"); break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
}
int main()
{
test();
return 0;
}
2.2 创建一个名为board的二维数组,并进行初始化
创造一个二维数组,初始话数组,实现程序的大体框架
char board[ROW][COL] = {
0 };
void InitBoard(char board[ROW][COL], int row, int col)//初始化数组
{
int i, j;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
board[i][j] = ' ';
}
}
}
2.3 棋盘的搭建
首先是在game.c文件中,实现棋盘搭建的功能
void DisplayBoard(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++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
printf("|");
}
printf("\n");
//分割行
if (i < row - 1)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
printf("|");
}
}
printf("\n");
}
}
然后就在test.c文件调用
InitBoard(board, ROW, COL);
这一点是一个关键,棋盘的搭建,要留有数据的空间,以便于游戏开始时,玩家或电脑在棋盘上进行操作。还有每一行有一个分割线,且要保证每一行的区分,还有每一竖的分界线,要保证元素分割开,创建一个“井”子框架。
2.4 玩家下棋
并打印新的棋盘在game文件中实现玩家在棋盘上的空位进行判断,并选择一个位置在上面打印出你自己选择的符号,并打印出你在上面操作之后的棋盘。
void Player_move(char board[ROW][COL], int row, int col)
{
int x, y;
while (1)
{
printf("请选择坐标:\n");
scanf("%d %d", &x, &y);
if (x >= 1 && x <=