游戏运行逻辑代码 进入游戏前的准备代码实现这篇文章将会以一个头文件,两个源文件来讲解
头文件:一些宏定义以及有关函数的声明
源文件:1. 游戏运行逻辑代码
2. 游戏函数实现代码
#include "game.h"
void menu()
{
printf("**************************n");
printf("**************************n");
printf("******* 1. Enter *******n");
printf("******* 0. Exit *******n");
printf("******* 3. Rules *******n");
printf("**************************n");
printf("**************************n");
}
void rules()
{
printf("游戏规则如下:n");
printf("数字代表格子周围的8个格子有多少个雷n");
printf("扫完到雷或者扫完全部的雷,游戏才会结束n");
}
void game()
{
}
int main()
{
menu();
int input = 0;
do
{
scanf("%d", &input);
switch (input)
{
case 1:
printf("正在进入游戏n");
game();
break;
case 0:
printf("正在退出n");
break;
case 3:
rules();
printf("进入游戏n");
game();
break;
default:
printf("输入错误,请重新输入n");
break;
}
}while (input != 0);
return 0;
}
game()函数的实现相信不需要过多的解释,运行的效果就是输入1进入游戏,输入0退出游戏,如果输入错误就重新输入,并且可以循环玩扫雷
如图所示,如果点开黑色的格子,那么就需要检测周围的八个格子有多少个雷,
所以就需要创建一个二维数组,假设1是雷,0不是雷,然后再放入二维数组之中
但是如果这样,点开了最外圈的格子,那么访问周围的八个格子就会存在数组越界
可以通过if来判断是否为边界从来执行是否访问周边元素,但是执行效率就很低,因为有那么多的格子,所以可以在初始化的时候初始化大一圈
这样数组就不会越界访问了。
所以,就需要两个字符数组,一个放置雷,一个用来展示
并且还需要一个打印棋盘的代码
代码实现
// 初始化数组内元素
void Init_arr0(char mine[Rows][Cols],char show[Rows][Cols], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
mine[i][j] = '0';
show[i][j] = '*';
}
}
}
// 放置雷
void Set_mine(char mine[Rows][Cols], int row, int col)
{
int i = 0;
int j = 0;
int count = Easy;
while (count)
{
i = rand() % row + 1;
j = rand() % col + 1;
if (mine[i][j] == '0')
{
mine[i][j] = '1';
count--;
}
}
}
// 打印棋盘
void Display(char mine[Rows][Cols], int row, int col)
{
int i = 0;
printf("0 ");
for (i = 1; i < row; i++)
{
printf("%d ", i);
}
printf("n");
for (i = 1; i < col; i++)
{
printf("%d ", i);
int j = 0;
for (j = 1; j < col ; j++)
{
printf("%c ", mine[i][j]);//玩家棋盘数组
}
printf("n");
}
}
我无了,哪个大佬帮帮我看看源代码哪里错了
头文件
#define Col 10 #define Easy 10 // 初始化为0, * void Init_arr0(char mine[Rows][Cols], char show[Rows][Cols], int, int); // 布置雷 void Set_mine(char mine[Rows][Cols], int, int); // 打印棋盘 void Display(char mine[Rows][Cols], int, int); // 扫雷函数 void Saolei(char mine[Rows][Cols], char show[Row][Col], int, int); // 检测周围有多少雷 int Count(char mine[Rows][Cols], int, int); #include#include #include
游戏函数源代码
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
// 初始化数组内元素
void Init_arr0(char mine[Rows][Cols],char show[Rows][Cols], int row, int col)
{
int i = 0;
for (i = 0; i < row; i++)
{
int j = 0;
for (j = 0; j < col; j++)
{
mine[i][j] = '0';
show[i][j] = '*';
}
}
}
// 放置雷
void Set_mine(char mine[Rows][Cols], int row, int col)
{
int i = 0;
int j = 0;
int count = Easy;
while (count)
{
i = rand() % row + 1;
j = rand() % col + 1;
if (mine[i][j] == '0')
{
mine[i][j] = '1';
count--;
}
}
}
// 打印棋盘
void Display(char mine[Rows][Cols], int row, int col)
{
int i = 0;
printf("0 ");
for (i = 1; i < row; i++)
{
printf("%d ", i);
}
printf("n");
for (i = 1; i < col; i++)
{
printf("%d ", i);
int j = 0;
for (j = 1; j < col ; j++)
{
printf("%c ", mine[i][j]);//玩家棋盘数组
}
printf("n");
}
}
// 检测周围有多少雷
int Count(char mine[Rows][Cols],int x, int y)
{
int count = 0;
if (mine[x - 1][y - 1] == '1')
count++;
if (mine[x - 1][y] == '1')
count++;
if (mine[x - 1][y + 1] == '1')
count++;
if (mine[x][y - 1] == '1')
count++;
if (mine[x][y + 1] == '1')
count++;
if (mine[x + 1][y - 1] == '1')
count++;
if (mine[x + 1][y] == '1')
count++;
if (mine[x + 1][y + 1] == '1')
count++;
return count;
}
// 扫雷函数
void Saolei(char mine[Rows][Cols], char show[Row][Col], int row, int col)
{
printf("请输入坐标:>");
int x = 0, y = 0;
while (1)
{
scanf("%d %d", &x, &y);
if ((x > 0 && x < row) && (y > 0 && y < col))
{
if (mine[x][y] == '0')
{
char ch = '0';
int count = Count(mine, x, y);
show[x][y] = ch + count;
Display(show, Row, Col);
}
else
{
printf("被炸死n");
break;
}
}
}
}
游戏逻辑实现代码
#include "game.h"
void menu()
{
printf("**************************n");
printf("**************************n");
printf("******* 1. Enter *******n");
printf("******* 0. Exit *******n");
printf("******* 3. Rules *******n");
printf("**************************n");
printf("**************************n");
}
void rules()
{
printf("游戏规则如下:n");
printf("数字代表格子周围的8个格子有多少个雷n");
printf("扫完到雷或者扫完全部的雷,游戏才会结束n");
}
void game()
{
srand((unsigned int)time(NULL));
char mine[Rows][Cols] = { 0 };
char show[Rows][Cols] = { 0 };
// 初始化数组
Init_arr0(mine, show, Rows, Cols);
// 布置雷
Set_mine(mine, Row, Col);
// 打印棋盘
// Display(mine, Rows, Cols);
Display(show, Row, Col);
Saolei(mine, show, Rows, Cols);
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
printf("正在进入游戏n");
game();
break;
case 0:
printf("正在退出n");
break;
case 3:
rules();
printf("进入游戏n");
game();
break;
default:
printf("输入错误,请重新输入n");
break;
}
}while (input != 0);
return 0;
}



