寸阳分阴须爱惜,休负春色与时光。这篇文章主要讲述扫雷的实现相关的知识,希望能为你提供帮助。
扫雷分为三个部分主程序部分,功能函数实现部分,头函数部分
*注:如果抄代码的话,建议把三个部分分成三个文件,且头函数用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");
}
}
推荐阅读
- 保存壁纸太麻烦(教你如何用Java快速获取网站图片)
- Java知识点详解 4Java泛型详解
- #私藏项目实操分享#原理讲解-项目实战 <-; 多目标跟踪算法之DeepSORT
- 面试只要问到分布式,必问分布式锁
- 第三章-字符串#yyds干货盘点#
- #yyds干货盘点#前端如何下载文件流
- #yyds干货盘点#dart系列之:创建Library package
- 如何正确提出数据需求
- 冒泡排序