10.20扫雷

扫雷

1.构建主函数,方法与三子棋雷同,但是有很多不一样的地方,就是需要构建两个二维数组,一个存放雷的数据,一个存放展现给玩家的数据棋盘

2.在对棋盘分别初始化

时候,考虑到两个二维数组存放内容不同,直接对初始化函数进行添加字符参数

3.构建参数

因为考虑到后期排查雷的时候边缘的数据无法正常排查,就干脆构建11*11比原先的棋盘再大一圈的棋盘,.为了方便区分,分别构建两次宏

4.初始化

的时候直接对全棋盘数据进行初始化,打印只打印1-9的数据就好,这样后期也方便管理,因为数组总比下标-1.很容易凌乱.

5.打印棋盘的时候注意因为坐标太多,最好打印出行数列数,这里要注意对齐,可以后期慢慢调试.

6.用户再拿到一个棋盘的时候,这个棋盘应该是被初始化有雷的棋盘,所以我们构建一个设置雷的函数在雷棋盘里

7.这里我们就可以构建一个宏来存放雷的数量,

8.玩家输入数据,注意参数大小范围,除了初始化棋盘函数,其他函数的形参都是9,因为玩家的输入范围都是1-9;恰好对应数组也是1-9因为下标是0的都没被打印出来

9.不仅要考虑坐标范围也要考虑是否输入过

10.当没有走到雷上就要放入周围8个方位雷的数量,这里我们就要构建一个数量来记录来后期判断,这里构建一个数量函数,注意到数组是字符型,但是恰好雷的数据是'1',非雷的数据是'0'这样我们可以把周围八个方位相加再减去字符'0'*8就是雷的数字.因为两个ASICC码值相减就是整型了.

11.判断输赢就是排查了所有雷,即点击了所有没有雷的坐标,那么我们就用所有坐标数减去埋好雷的数

1.

1.测试游戏函数主体

#define _CRT_SECURE_NO_WARNINGS   1
#include"game.h"
void game()
{
//构建两个棋盘,一个存放雷的数据,一个存放SHOW的数据
char mine[ROWS][COLS] = { 0 };
char show[ROWS][COLS] = { 0 };//分别在mine棋盘和show棋盘初始化,在mine:0代表无,1:代表雷.show:*
Init_board(mine, ROWS, COLS, '0');
Init_board(show, ROWS, COLS, '*');//打印棋盘
//Display_board(mine, ROW, COL);
Display_board(show, ROW, COL);//埋雷
Set_mine(mine, ROW, COL);
//Display_board(show, ROW, COL);//玩家输入数据判断周围雷数
Find_mine(mine, show, ROW, COL);}
void test()
{
printf("*************扫雷*********\n");
printf("******1.play****0.exit*****\n");
printf("****************************\n");
int input = 0;
do
{
scanf("%d", &input);
switch (input)
{
case 1:
{
game();
printf("还玩吗\n");
break;
}
case 0:
{
printf("已退出\n");
break;
}
default:
{
printf("输入错误.请重新输入>:");
break;
}
}
} while (input);}int main()
{
test();
return 0;
}

2.

#define _CRT_SECURE_NO_WARNINGS   1
#include"game.h"
void Init_board(char mine[ROWS][COLS], int rows, int cols, char set)
{
int i = 0;
int j = 0;
for (i = 0;i < rows;i++)
{
for (j = 0;j < cols;j++)
{
mine[i][j] = set;
}
}
}
void Display_board(char arr[ROWS][COLS], int row, int col)
{printf("------------扫雷-------------\n");
int i = 0;
int j = 0;
for (i = 0;i <= row;i++)
{
printf("%d  ", i);}
printf("\n");
for (i = 1;i <= row;i++)
{
printf("%d ", i);
for (j = 1;j <= col;j++)
{
printf(" %c ", arr[i][j]);
}
printf("\n");
}printf("-----------------------------\n");}
void Set_mine(char mine[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int i = 0;
do {
x = rand() % row + 1;
y = rand() % col + 1;
if (mine[x][y] == '0')
{
mine[x][y] = '1';
i++;
}
} while (i <= COUNT);//1-9
}
int get_mine_count(char mine[ROWS][ROWS], int x, int y)
{
int i = 0;
int j = 0;
int n = 0;
for (i = x - 1;i <= x + 1;i++)
{
for (j = y - 1;j <= y + 1;j++)
{
if (mine[i][j] == '1')
{
n++;
}
}
}
return n;
}
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{
printf("玩家回合\n");
int win = 0;
int x = 0;
int y = 0;
while (win<row*col-COUNT)
{
printf("请输入坐标 > :");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= row)
{
if (show[x][y] != '*')
{
printf("已经排查过重新输入\n");
}
else
{if (mine[x][y] == '1')
{
printf("你被砸死了\n");
Display_board(mine, ROW, COL);
break;
}
else
{
int count = get_mine_count(mine, x, y);
show[x][y] = count + '0';
Display_board(show, ROW, COL);
}
}
}
else
{
printf("输入非法重新输入\n");
}}
if (win == row * col - COUNT)
{
printf("排雷成功\n");
}}

3.游戏头文件

#define _CRT_SECURE_NO_WARNINGS   1
#include<stdio.h>
#define ROW 9
#define COL 9
#define ROWS  ROW+2//防止后期检验边缘雷出现超界行为
#define COLS  COL+2
#define COUNT 79
void Init_board(char mine[ROWS][COLS], int rows, int cols, char set);
void Display_board(char arr[ROW][COL], int row, int col);
void Set_mine(char mine[ROWS][COLS], int row, int col);
void Find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252249.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

扫雷游戏

游戏设计 1.设计两个二维数组的面板&#xff0c;一个是展示给用户使用的&#xff0c;另一个是雷区的面板 2.初始化两个面板&#xff0c;用户使用的面板初始化为‘’&#xff0c;雷区的面板全部初始化为‘0’ 3.设置你所需要的雷区 4.用户输入坐标&#xff0c;进行判断。越界重新…

【180720】微软Windows扫雷游戏代码

源码简介 本源码是一个微软Windows扫雷游戏代码&#xff0c;可选择难度级别&#xff1a;初级、中级、高级。 注意事项: 1、开发环境为Visual Studio 2010&#xff0c;使用.net 2.0开发。 源码下载地址&#xff1a;点击下载 备用下载地址&#xff1a;点击下载

扫雷win10_windows扫雷游戏原来是一道数学难题!

各位同学大家好&#xff0c;这里是质心数学游戏科普频道。 今天和大家聊的是一款有点复古的windows系统自带小游戏——MineSweeper&#xff08;扫雷&#xff09;。 我刚接触这款游戏是高中的上机课&#xff0c;当时的电脑系统还是win95&#xff0c;在大家还不会局域网互联打Sta…

【扫雷】游戏

一、目的 实现一个扫雷游戏 二、过程 1、游戏框架 首先&#xff0c;游戏开始之前&#xff0c;显示游戏菜单Menu() static void Menu() {printf("#############################\n");printf("########欢迎来到扫雷游戏#######\n");printf("######…

扫雷1.0

目录 一.规则介绍 二.基本思路 三.代码实现 一.规则介绍 扫雷是一个经典的游戏&#xff0c;一张棋盘中有许多不确定是雷还是安全区域的格子&#xff0c;当点击之后若没雷则会在该区域显示周围八个格子雷瑟数目&#xff0c;若踩雷则游戏结束。 二.基本思路 1.创建菜单 2.…

扫雷win10_厉害了,一个自动扫雷游戏项目!

转载自公众号【视学算法】 原文&#xff1a;https://www.cnblogs.com/chestnut-egg/p/9302238.html 自动扫雷一般分为两种&#xff0c;一种是读取内存数据&#xff0c;而另一种是通过分析图片获得数据&#xff0c;并通过模拟鼠标操作&#xff0c;这里我用的是第二种方式。 一、…

RK3566 ALC5616录音调试

1.硬件原理图 MIC_P&#xff0c;MIC_N&#xff1a;mic输入。 I2S&#xff1a;总共有5根线&#xff08;这里不是指 i2s 标准接口&#xff09;&#xff1a;两根音频数据线&#xff08;输入/输出&#xff09;、三根时钟线 其中&#xff1a; I2S_LRCK 是指示当前数据线传输的是左声…

comsol with matlab联合仿真

目前网上的教程基本上只有如何找到comsol with Matlab以及如何打开&#xff0c;和部分代码的讲解&#xff0c;但是要真正的跑起来还有一些步骤&#xff0c;小白在这里跟大家分享一下&#xff0c;不对轻喷&#x1f97a; 1.comsol文件需要连接到服务器comsol multiphysics serve…

COMSOL6.0软件安装说明+视频教程

链接&#xff1a;https://pan.baidu.com/s/1a_BaY6K-fP0PiMhcw5eLcg?pwd6iis 提取码&#xff1a;6iis 首先用虚拟光驱加载或者用winrar直接解压镜像文件&#xff0c;再双击setup.exe程序&#xff0c;选择简体中文语言&#xff1b; 2.选择新安装&#xff1b; 3.选择你要安装…

COMSOL 5.2安装教程(自用)

3、允许用户协议&#xff0c;将许可证格式修改为“许可证文件”&#xff0c;然后点击浏览载入安装包中“_SolidSQUAD_”目录下的“Comsol52_SSQ.lic” 电磁 AC/DC 模块RF 模块波动光学模块射线光学模块等离子体模块半导体模块 结构力学 & 声学 结构力学模块非线性结构材料模…

COMSOL在云平台的使用教程,超高效的方法来了

在北鲲云超算平台上有多种COMSOL作业提交方式&#xff0c;这里给大家演示的是图形界面提交 在平台上使用图形界面提交超级简单&#xff0c;平台已内置模板&#xff0c;只需按照提示上传文件及选择选项即可&#xff0c;对于没有代码基础的同学来说&#xff0c;这是最推荐的方式…

EDA安装------Centos7 安装Comsol5.5

目录 1.引言2.资源3.安装4.结语 1.引言 由于项目需求&#xff0c;博主最近要做微流控通道的流体仿真&#xff0c;对于一个小白来说&#xff0c;首先就是安装仿真软件了。据目前所知&#xff0c;流体仿真大多数使用Ansys的Fluent或CFX、Comsol两个软件。经过网上查询&#xff0…

页眉如何设置成一页左一页右?页码如何设置成一页左一页右?

WPS页眉如何设置成一页左一页右&#xff1f;页码如何设置成一页左一页右&#xff1f;

WPS页眉不同页之间的修改

1-打开WPS 2-建立第一页的页眉 3-点击第二页的页眉 4-点击一下&#xff0c;取消“同前节” 5-编辑第二页的页眉 6-如果后续不修改&#xff0c;那么后面的页眉应是第二页的页眉

WPS的页眉设置

设置步骤如下 首先点开显示段落标记&#xff0c;这样更方便看到分节符&#xff1a; 在每页文字的最后插入分节符&#xff0c;操作步骤如下&#xff1a; 可以在页面上看到分节符&#xff0c;分节符的作用就是将多个页面分节&#xff0c;分节符前是一节&#xff0c;之后是另外一…

word操作——论文中——设置WPS奇偶页页眉内容不同和公式居中,公式的标号靠右、......

一、设置WPS奇偶页页眉内容不同&#xff1a; 一、先设置“奇偶页不同”&#xff1a; 首先双击页眉&#xff0c;在工具栏点击页眉页脚选项&#xff0c;勾选奇偶页不同、奇数页页眉同前节&#xff08;可选&#xff09;&#xff0c;后确定。 二、然后&#xff0c;在分各章节的页…

MySQL中BETWEEN AND(范围查询)

0 写在前面 MySQL 提供了 BETWEEN AND 关键字&#xff0c;用来判断字段的数值是否在指定范围内。 BETWEEN AND 需要两个参数&#xff0c;即范围的起始值和终止值。如果字段值在指定的范围内&#xff0c;则这些记录被返回。如果不在指定范围内&#xff0c;则不会被返回。 最近…

利用短信猫发送短信教程解决windows上发送成功而linux上失败问题

前言 目前用过的开源短信猫工具有jSMSEngine和SMSLib&#xff0c;下载地址及使用网上有很多&#xff0c;本文只是简要介绍短信猫的安装使用及在项目中遇到的坑。 说明&#xff1a;本文主要解决windows上通过短信猫发送成功而Linux上发送失败的问题。 通过短信猫发送短信案例…

短信验证码总是发送失败是什么原因?

有些用户在使用某产品时可能会出现短信验证码收不到的情况&#xff0c;同事之前也遇到过这样的情况&#xff0c;连续发送多次依然收不到短信。那么短信验证码为什么会发送失败、原因有哪些呢。#短信验证码安全 现在短信验证码服务在各种网站和App中的实际应用已经非常成熟和广泛…