扫雷的实现

Posted jienow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扫雷的实现相关的知识,希望对你有一定的参考价值。

扫雷分为三个部分

主程序部分,功能函数实现部分,头函数部分

*注:如果抄代码的话,建议把三个部分分成三个文件,且头函数用game.h作为名字

​主函数部分

#include"game.h"

void menu()
{
printf("**************************\\n");
printf("****** 1、play ******\\n");
printf("****** 0、exit ******\\n");
printf("**************************\\n");
}

void game()
{
//定义数组
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };

//初始化数组
initboard(mine,ROWS,COLS,0);
initboard(show,ROWS,COLS,*);

//打印棋盘
//display(mine, ROW, COL);
display(show, ROW, COL);

//放置雷
setmine(mine, ROW, COL);
//display(mine, ROW, COL);//查看雷

//排查雷
findmine(mine, show, ROW, COL);


}

int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入:>");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\\n");
break;
default:
printf("输入错误,请重新输入\\n");
break;
}
} while (input);
return 0;
}


头函数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include <conio.h>

#define ROW 9
#define COL 9

#define ROWS 11
#define COLS 11

//定义雷的个数
#define minee 10


//初始化数组
void initboard(char board[ROWS][COLS], int row, int col,char set);

//打印棋盘
void display(char board[ROWS][COLS], int row, int col);

//放置雷
void setmine(char mine[ROWS][COLS],int row ,int col);

//排查雷
void findmine(char mine[ROW][COL], char show[ROW][COL],int row,int col);


功能函数实现部分

#include"game.h"

//初始化数组
void initboard(char board[ROWS][COLS], int row, int col,char set)
{
int i,j;
for (i = 0;i < row; i++)
{
for (j = 0;j < col;j++)
{
board[i][j] = set;
}
}
}

//打印棋盘
void display(char board[ROWS][COLS], int row, int col)
{
int i, j;
printf("#####################\\n");

for (i = 0;i <= col;i++)
{
printf("%d ", i);
}
printf("\\n");
for (i = 1;i <= row; i++)
{
printf("%d ", i);
for (j = 1;j <= col;j++)
{

printf("%c ", board[i][j]);
}
printf("\\n");
}
printf("#####################\\n");
}

//放置雷
void setmine(char mine[ROWS][COLS], int row, int col)
{
int count = minee;//雷的个数
while (count)
{
int x = rand() % row + 1;
int y = rand() % col + 1;
if (mine[x][y] == 0)
{
mine[x][y] = 1;
count--;
}
}

}

int aroundmine(char mine[ROWS][COLS], int x, int y)
{
return mine[x - 1][y - 1] +
mine[x][y - 1] +
mine[x + 1][y - 1] +//左三列
mine[x - 1][y] +
mine[x + 1][y] +//中两列
mine[x - 1][y + 1] +
mine[x][y + 1] +
mine[x + 1][y + 1]//右两列
- 8 * 0;
}

//排查雷
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
//数组传递变量的过程中,实参与形参的声明必须相同,不然会出项莫名其妙的bug:没有报错,但是再用的时候出现了char (*)[9]”和“char (*)[11]”数组的下标不同
{
//思路
// 判断是否合法
//判断是不是雷
//1、雷:抱歉你被炸死了
//2、不是雷:周围8个有多少个雷

int a = row*col-minee;
while (a)
{
int x = 0;
int y = 0;
printf("请输入坐标:>");
scanf_s("%d %d", &x, &y);
system("CLS");
if (mine[x][y] == 1)
{
printf("此处是雷,你被炸死了\\n");
display(mine, ROW, COL);
break;
}
else
{
int ret = aroundmine(mine,x,y);//此处函数是计算周围有多少颗雷
show[x][y] = ret + 0;
display(show, ROW, COL);
a--;
}
}
if (a == 0)
{
printf("恭喜你,雷已经被全部排出\\n");
}
}

以上是关于扫雷的实现的主要内容,如果未能解决你的问题,请参考以下文章

原生 JavaScript 实现扫雷 (分析+代码实现)

C语言实现扫雷(初阶)

C语言实现扫雷游戏(一步步教你如何写扫雷)

运用HTML+CSS+JavaScript实现扫雷游戏

运用HTML+CSS+JavaScript实现扫雷游戏

c语言初学者如何代码实现 扫雷 游戏