文章目录
一、 三子棋简单游戏介绍
想必大家小时候都玩过三子棋游戏,今天我们用二维数组和循环的知识简单实现这个游戏。
前言:
此次代码实现我们采用分模块的方式,具体如下:
test.c | 测试 |
---|---|
game.h | 函数头文件的声明 |
game.c | 游戏代码的实现 |
具体如下:
二、大致函数介绍
- 2.1、主函数的设计
首先用do while()语句进入循环,menu是一个简易菜单,利用switch case语句来判断大家是否玩游戏。
void menu()//简易菜单
{
printf("*********************\n");
printf("****1.play 0.exit****\n");
printf("*********************\n");
}
int main()
{
srand((unsigned)time(NULL));
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);
return 0;
}
- 2.2、初始化棋盘
设计一个二维数组,并里面的内容初始化为空格。
//初始化棋盘
void InitBoard(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] = ' ';
}
}
}
- 2.3 打印棋盘
我们这里采用空格字符空格竖杠依次类推的形式打印棋盘,
//打印棋盘
void PrintBoard(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)
{
for (j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
}
printf("\n");
}
}
- 2.4 玩家走
这里玩家走我们用*号表示,即是在二维数组里放元素
//玩家走
void PlayerBoard(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
printf("请玩家下棋:>");
scanf("%d %d", &x, &y);
if ((x >= 1 && x <= 3) && (y >= 1 && y <= 3))
{
if (board[x - 1][y - 1]==' ')
{
board[x - 1][y - 1] = '*';
break;
}
}
else
{
printf("坐标非法,请重新输入\n");
}
}
}
- 2.5 电脑走
同理,电脑走也是一样的,只不过我们不在电脑屏幕上打印出来。
//电脑走
void ComputerBoard(char board[ROW][COL], int row, int col)
{
printf("电脑走\n");
while (1)
{
int x = rand() % 3;
int y = rand() % 3;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
- 2.6 判断输赢
三子棋胜利条件估计大家也都明白,就是三子棋赢的方式有三种 一行 一列 一条对角线 三字相同即可
//判断输赢
int WinBoard(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][1] == board[i][2] && board[i][0] != ' ')
{
if (board[i][1] == '*')
{
printf("玩家赢\n");
return 1;
}
if (board[i][1] == '#')
{
printf("电脑赢\n");
return 0;
}
}
}
//三列相等
int j = 0;
for (j = 0; j < col; j++)
{
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != ' ')
{
if (board[0][j] == '*')
{
printf("玩家赢\n");
return 1;
}
if (board[0][j] == '#')
{
printf("电脑赢\n");
return 0;
}
}
}
//两个斜线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
{
if (board[0][0] == '*')
{
printf("玩家赢\n");
return 1;
}
if (board[0][0] == '#')
{
printf("电脑赢\n");
return 0;
}
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
{
if (board[0][2] == '*')
{
printf("玩家赢\n");
return 1;
}
if(board[0][2]=='#')
{
printf("电脑赢\n");
return 0;
}
}
}
- 2.7 代码运行结果
*********************
****1.play 0.exit****
*********************
请选择:>1
| |
---|---|---
| |
---|---|---
| |
请玩家下棋:>1 1
* | |
---|---|---
| |
---|---|---
| |
电脑走
* | # |
---|---|---
| |
---|---|---
| |
请玩家下棋:>2 1
* | # |
---|---|---
* | |
---|---|---
| |
电脑走
* | # |
---|---|---
* | |
---|---|---
| # |
请玩家下棋:>3 1
* | # |
---|---|---
* | |
---|---|---
* | # |
玩家赢
*********************
****1.play 0.exit****
*********************
请选择:>
- 2.8 总结
游戏到这里应该就结束了,有部分细节问题在代码都有体现,希望对你有所帮助。