扫雷:扫雷是一款相当大众化的小游戏,游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。

我们要做的就是布雷:在一个10*10的方格里,随机布9颗雷,并且计算出每个雷周围的格子里应该是几(紧挨着他有几颗雷,就是几)。

其中我们要注意的是:

①选随机数作为雷的位置,让雷的位置可以随机分布;

②随机数不能重复,以免雷的数量减少;

③计算每个雷周围的格子的数字。

接下来看看我们具体的程序:

class Program
{
static void Main(string[] args)
{
//创建一个产生随机数的对象
Random r = new Random();
//设置雷区的边长
int length = 10;
//创建一个索引数组,长度为雷区中元素的个数
int[] ary = new int[length * length];
//设置雷的个数
int count = 9;
//初始化索引数组,使索引数组中的所有元素都不一样
//存储的值应该是0-(边长的平方-1)
for (int i = 0; i < length * length; i++)
{
ary[i] = i;
}
//设置从索引数组中取值的范围
int size = length * length;
//创建一个地雷位置的数组
int[] locations = new int[count];
//给地雷位置数组赋值----设置每个地雷的位置
for (int j = 0; j < count; j++)
{
//产生一个随机数,随机数的范围就是从索引数组中取值的范围
int index = r.Next(size);
//使用索引取得一个值,就是最终地雷放的位置(一维)
int val = ary[index];
//将位置放入地雷位置数组中
locations[j] = val;
//那么范围应该-1
size--;
//将取过值得位置上的内容用后面的元素的值覆盖(将取过的值从数组中干掉)
for (int i = index + 1; i < size; i++)
{
ary[i - 1] = ary[i];
}
}
//创建雷区数组
int[,] mines = new int[length, length];
//给雷区中放置地雷
for (int i = 0; i < locations.Length; i++)
{
//将一维索引转变成二维索引
int x = locations[i] / length;
int y = locations[i] % length;
//放地雷
mines[x, y] = 9;
}
//计算雷区中没有雷的位置应该是几(计算每个位置周围有几个雷,这个位置就应该是几)
for (int i = 0; i < mines.GetLength(0); i++)
{
for (int j = 0; j < mines.GetLength(1); j++)
{
//如果这个位置是雷,就上去继续执行循环
if (mines[i,j]==9)
{
continue;
}
//调用Getminecount函数计算[i,j]位置的值
mines[i, j] = Getminecount(mines, i, j);
}
}
//将雷区数组打印出来
for (int i = 0; i < mines.GetLength(0); i++)
{
for (int j = 0; j < mines.GetLength(1); j++)
{
Console.Write("{0}\t", mines[i, j]);
}
Console.WriteLine();
}
}
//Getminecount函数计算[i,j]位置的值
private static int Getminecount(int[,] mines, int rowIndex, int columnIndex)
{
//设置一个count来计算[i,j]位置的值
int count = 0;
//左边的列索引等于此位置的列索引-1(相邻位置)
int leftcolumnIndex = columnIndex - 1;
//右边的列索引等于此位置的列索引+1(相邻位置)
int rightcolumnIndex = columnIndex + 1;
//上面的行索引等于此位置的行索引-1(相邻位置)
int toprowIndex = rowIndex - 1;
//下面的行索引等于此位置的行索引+1(相邻位置)
int bottomrowIndex = rowIndex + 1;
//左上--如果行索引和列索引都大于等于0
//如果左上方是雷,count+1
if (leftcolumnIndex>= 0 && toprowIndex>=0)
{
if (mines[toprowIndex,leftcolumnIndex]==9)
{
count++;
}
}
//正上--如果行索引大于等于0
//如果正上方是雷,count+1
if (toprowIndex>=0)
{
if (mines[toprowIndex,columnIndex]==9)
{
count++;
}
}
//右上---如果行索引大于等于0,列索引小于总列数
//如果右上方是雷,count+1
if (toprowIndex >= 0 && rightcolumnIndex<mines.GetLength(1))
{
if (mines[toprowIndex,rightcolumnIndex]==9)
{
count++;
}
}
//左下--如果列索引大于等于0,行索引小于总行数
//如果左下方是雷,count+1
if (leftcolumnIndex >= 0 && bottomrowIndex<mines.GetLength(0))
{
if (mines[bottomrowIndex,leftcolumnIndex]==9)
{
count++;
}
}
//正下---如果行索引小于总行数
//如果正下方是雷,count+1
if (bottomrowIndex<mines.GetLength(0))
{
if (mines[bottomrowIndex,columnIndex]==9)
{
count++;
}
}
//右下---如果行索引小于总行数,列索引小于总列数
//如果右下方是雷,count+1
if (bottomrowIndex < mines.GetLength(0) && rightcolumnIndex < mines.GetLength(1))
{
if (mines[bottomrowIndex,rightcolumnIndex]==9)
{
count++;
}
}
//正左---如果列索引大于等于0
//如果正左方是雷,count+1
if (leftcolumnIndex>=0)
{
if (mines[rowIndex,leftcolumnIndex]==9)
{
count++;
}
}
//正右---如果列索引小于总列数
//如果正方右是雷,count+1
if (rightcolumnIndex<mines.GetLength (1))
{
if (mines[rowIndex,rightcolumnIndex]==9)
{
count++;
}
}
return count;
}
}

输出结果:

我们写的这个控制台应用程序只是布雷的雏形,有了布雷的这种思想,并简单的实现,还有大量的工作需要做,将这个程序加工包装,才能成为一款真正的扫雷游戏。

再接再厉!!!

转载于:https://blog.51cto.com/7607889/1302219

记录:关于“扫雷”的布雷招相关推荐

  1. java扫雷布雷算法_扫雷的布雷算法

    也没有查过资料,不知道先人是否已经提出这样的算法,也不想考究. 只因我们java大作业要编"扫雷",所以将我个人设计的扫雷的布雷算法放在这里此算法不需要做什么判断,简单一点.闲话不 ...

  2. 【面试题记录】2020前端秋招笔试面试题目记录

    笔试题记录 1. 空元素 Empty Element (滴滴笔试) 空元素是HTML/SVG里的不可能存在子节点的元素. 个人理解就是:自闭和标签 HTML中的空元素: <br/> < ...

  3. 【原创整理】软件测试自我记录(目前携程+招银网络科技)

    1.如何分析一个水杯. 分别从:需求.功能度.界面.安全性.可靠性.兼容性.易用性.用户手册是否详细.疲劳测试.压力测试.震动测试来说. 2.为什么选择软件测试这一行业. 肯定不能说自己编程能力不行所 ...

  4. 记录:我的秋招求职之路 —— 杭州(Java开发)

    一.说在前面的话:本人双非二本软件工程出身,目标Java开发工程师(实习).曾经也想过会不会因为学校的情况连面试机会都没有,事实证明只要你敢投敢面,除了一些大厂要求比较高之外,其他的公司基本上是有机会 ...

  5. 校招|我的秋招记录——(自然语言处理-面经+感悟)

    作者:Haitons 链接:https://www.nowcoder.com/discuss/348316 来源:牛客网 回忆这东西若是有气味的话,那就是樟脑的香 ----谨以此文记录我的2019秋招 ...

  6. 21届秋招记录——银行篇

    转眼到了12月了,自己的秋招基本结束. 想记录一些自己在秋招过程中的经历.体会.信息,希望能够帮到大家~ 一.个人情况部分: 学历:211本+985硕,通信专业. 实习:xx银行省分行信息科技部实习, ...

  7. python扫雷 高级算法_扫雷游戏的布雷算法、策略与优化(附Python代码)

    1 布雷算法的应用 在扫雷游戏中,将雷均匀地分布在局面中依靠一种布雷算法.众所周知,在原始版本的Windows扫雷中,由于布雷算法的缺陷,使得其存在Board Cycle(局面循环).而标准扫雷游戏中 ...

  8. 【计算机视觉算法岗面经】“吐血”整理:2019秋招面经

    相关链接:[计算机视觉算法岗面经]"吐血"整理:2019秋招资料 //2018/09/28 当初开始面试时就想着,以后我一定要写一篇面经,现在是来还愿的时候了. 首先,嗯,非常感谢 ...

  9. 别人的【计算机视觉算法岗面经】“吐血”整理:2019秋招面经

    别人的[计算机视觉算法岗面经]"吐血"整理:2019秋招面经 相关链接:[计算机视觉算法岗面经]"吐血"整理:2019秋招资料 //2018/09/28 当初开 ...

最新文章

  1. 3模型大小_分布式训练中数据并行远远不够,「模型并行+数据并行」才是王道...
  2. #大学生活#锐捷客户端与VMWare
  3. OpenShift DIY:使用Gradle构建Spring Boot / Undertow应用程序
  4. rehl7安装mysql5.7_Linux RPM包安装总结
  5. 如何访问服务器表中信息,如何在 RADIUS 服务器的拨号接口上应用访问列表
  6. Linux中ssh远程登录服务、SSH免密登录
  7. 基本类型,指针,双指针作为函数参数
  8. 文华财经指标公式博易大师软件指标公式指南针多空资金指标,最精准买卖点提示指标wh6赢顺云随身行指标
  9. matlab仿真调速,直流调速系统的MATLAB仿真参考程序
  10. Java面向对象知识点总结
  11. CSDN公式插入——关于对数
  12. Linux下查找指定日期的文件
  13. 计算机工程ei是不是不检索了,EI检索的中文期刊_EI检索号查询_如何查询EI检索...
  14. AXI总线详解-AXI4读写操作时序及AXI4猝发地址及选择
  15. js 阻止移动端横屏工具方法
  16. 计算机毕业设计之java+ssm基于HTML5的网上跳蚤市场+二手交易网站
  17. 如影智能唐沐:别把智能家居做成极客玩具
  18. vue垂死挣扎系列(一)——vue-cli快速搭建
  19. 红绿灯c语言程序及仿真图,AT89C51单片机十字路口交通灯设计(仿真、keil源代码以及实物图)...
  20. 电子病历,到底是用BS还是CS

热门文章

  1. 当建立一个新的数据中心时,阿里云优惠活动位置只是战斗的一半
  2. < meter >标签 定义度量衡
  3. sony z2 android 6.0,索尼Z2/Z3已可升级Android6.0.1:国行一边哭去
  4. 【信奥赛一本通】2046:替换字母(详细代码)
  5. 0711 - 在 iPic 周岁时,说说这款让我骄傲的产品
  6. 从繁到简so easy,象形柱图尽显数据可视化直观、炫酷本色
  7. 前端踩坑之TinyMCE富文本编辑器表情插件报错解决
  8. 安装启用firewalld防火墙
  9. 【American English】美语口语中常见的 Gonna、wanna、gotta 含义及用法
  10. java代码混淆器proguard使用大法3种