三子棋游戏是一个很好地数组应用实例,在这篇博客中我将分享我在初学C语言时编写三子棋游戏的思路和过程。
1.模块设置
设置一个测试模块test.c和一个函数模块game.c,测试模块放置主函数,函数模块放置初始化函数、打印棋盘的函数、放置棋子的函数等。
2.编写一个菜单
三子棋游戏初始菜单,制作一个简易菜单,输入1进入游戏,输入0退出游戏,输入其他值要求重新输入,使用switch语句。
void menu()
{
printf("******************************\n");
printf("****1.play**********0.exit****\n");
printf("******************************\n");
}
void game()
{
printf("11111\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择>:\n");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
return 0;
}
3.初始化棋盘
三子棋格子为3×3,为了方便后续扩展游戏,在头文件game.h中定义行ROW=3,列COL=3。初始化是将3×3数组的9个位置都填充上" ",将初始化函数封装为intiboard()。
void Intiboard(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] = ' ';
}
}
return 0;
}
4.绘制棋盘
3×3的棋盘由---|---|---组成,打印顺序为board[i][j],|;---,|。将棋盘绘制函数封装成Displayboard()。
void Displayboard(char board[ROW][COL], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
if (i < row - 1)
{
int j = 0;
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
}
}
}
5.玩家下棋
玩家下棋,输入棋子坐标(x,y),先判断x,y是否合法,判断在数组board中board[x][y]位置上是否是空格,如是空格放置字符'*',若不是则重新输入坐标。为了符合要求和方便玩家使用,(x >= 1 && x <= row && y >= 1 && y <= col。
void playmove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
printf("玩家下棋:\n");
while (1)
{
printf("输入坐标:\n");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= row&&y >= 1 && y <= col)
{
if (board[x - 1][y - 1] == ' ')
{
board[x - 1][y - 1] = '*';
break;
}
else
{
printf("坐标被占用,请重新输入\n");
}
}
else
{
printf("非法输入,请重新输入\n");
}
}
}
6.电脑下棋
电脑下棋,输入棋子坐标(x,y),利用rand()函数生成随机数,要求(x>0&&x<row&&y>0&&y<col),令x=rand()%row,y=rand()%col,则不需要判断是否合法。在判断判断在数组board中board[x][y]位置上是否是空格,如是空格放置字符'+',若不是则重新输入坐标。
void computermove(char board[ROW][COL], int row, int col)
{
printf("电脑下棋\n");
while (1)
{
int x = rand() % row;
int y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '+';
break;
}
else
{
printf("请从新输入\n");
}
}
}
7.判断游戏胜负
判断胜负规则是三个一样的符号先连成一条线的一方胜利,棋盘上没有落子的位置就是平局,
char iswin(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][2] == board[i][1]&&board[i][0]!=' ')
{
return board[i][0];
}
}
for (i = 0; i < col; i++)//三列
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
{
return board[0][i];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
{
return board[0][0];
}
if (board[0][2] = board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
{
return board[1][1];
}
int ret = full(board, row, col);
if (ret == 1)
{
return 'D';
}
else
{
return 'C';
}
}
总结
三子棋是一个很基础的小游戏,很适合初学者体会数组,函数,分支语句,条件语句,循环语句等内容的应用。
c语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANS1C,作为C语言最初的标准。[1]目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。
c语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、TurboC等。