问题标签 [minesweeper]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
659 浏览

java - Java 递归问题:扫雷

几天前我刚开始学习 Java,并开始编写扫雷游戏。问题是,当我尝试级联周围的块并显示块时,无论是空白还是带有取决于相邻炸弹数量的数字,我的递归失败并给我一个堆栈溢出错误。我的代码如下:

我已经盯着这个看了好几个小时了,我真的无法理解为什么它不会停止循环。我最初的游戏板持有“。” 在未显示的位置中,如果为 0,则棋盘将保留一个空格。我尝试检查答案键是否当场为 0,如果是,实际的棋盘是否仍为“。” 在现场,我可以设置一个空格。出于某种原因,revealCell 被一遍又一遍地调用,我真的想不通。我做错了什么吗?

旁注:如果 i 和 j 为 -1,我必须将它们设置为 0,因为我的代码允许用户输入 0,0 作为有效坐标。

谢谢你的帮助,如果答案就在我面前,我很抱歉......

0 投票
1 回答
115 浏览

java - 在同一个方法中调用一个方法?

我正在尝试为一个项目制作 MineSweeper,但我被困在某个部分。下面的explode 方法工作正常,但似乎我无法在方法中调用该方法。在不发布所有代码的情况下,我想看看是否有人知道这是否是 Java 中已知的非法事物和/或如何绕过它。

它没有给我一个编译错误,但是当我运行游戏时它会抛出一个错误。

0 投票
1 回答
2843 浏览

c++ - 检查二维数组中的相邻索引

我必须写扫雷。我想出了一种方法来检查相邻索引以计算当前索引周围有多少炸弹而不会超出范围。但它又长又丑,而且很可能效率低下。对于每个可能超出范围的唯一单元格,它们只是一堆条件语句。我的问题是,有没有更短的方法来做到这一点?并且实施一维环绕阵列会使其更容易/更难吗?

0 投票
1 回答
3888 浏览

c - 分段错误/Dev C 崩溃

嘿伙计们,所以我正在尝试做功课,我整天都找不到程序中的致命错误。让我解释一下:首先,你给出行数,然后是数组的单元格(只有“。”是免费的空格和“*”代表地雷,都在一行中,没有空格)然后发生崩溃。

0 投票
1 回答
2054 浏览

c - C中递归函数的扫雷问题

我正在尝试用 C 语言为编程类创建游戏扫雷的终端版本。我只是项目的一部分,我遇到了一个我似乎无法解决的问题。我正在尝试创建一个函数,当某个位置时,它会发现正方形,然后递归调用自身以发现任何不包含地雷的相邻正方形。该功能似乎有效,只是它有时会隐藏一个未被任何地雷包围的正方形。

这是该问题的一个示例,在这种情况下,似乎只有当地雷数量非常低时才会出现问题 4:

在此处输入图像描述

这是我的源代码,如果不是最好的,请原谅我刚刚学习 C。

问题应该出在我的显示功能上,即第 251 到 324 行。

0 投票
1 回答
97 浏览

c - 在 C 中返回多个二维数组位置的函数不起作用

我是 c 新手,正在尝试创建扫雷游戏。我认为我的代码在数据类型转换方面存在一些问题,但我不明白为什么。检查了这个链接

如何在 C 中将 unsigned int 转换或转换为 int?

并尝试在我的代码中实现信息。

我正在尝试实现一个函数,该函数返回具有地雷的 ax,y 协调二维数组的相邻位置的数量。

0 投票
1 回答
850 浏览

java - 如何用Java制作一个扫描仪来检查第一个字母是否是AV之间的字符以及第二个字符是否是1-20之间的数字?

如何制作一个扫描仪来检查第一个字母是否是 AV 之间的字符以及第二个字符是否是 1-20 之间的数字?一些示例是:“.B4”、“H10.”、“**V1”、“L19*”、“M12”或“N14”。

我对Java很陌生。还在学校学。我已经学了大约半年了。

现在我有一个学校作业。它是关于创建一个基于文本的扫雷游戏。我成功地打印了电路板并放置了地雷。但现在我坚持要获得正确的输入。

  • 如果您在 * B4 或 B4* 之类的扫描仪中使用“*”,它应该标记一个正方形。
  • 如果您使用“。” 在扫描仪中,如 .B4 或 B4。它应该取消标记一个正方形。
  • 如果你输入 B4 它应该打开。

但我不能以一种简洁的方式完成这项工作。我试图制作它的子字符串来检查每个字符是否都是正确的,但在我这样做之后,我的代码有点混乱,它没有按预期工作。

我试过这样:“示例 3:验证元音:使用 java.util.Scanner 验证输入”只是我使用了我的板长度的变量。因此,如果董事会是 10 乘 10,它不会比 J10 走得更远。但这对我也不起作用。

所以我希望你能帮我解决这个问题。

0 投票
11 回答
6988 浏览

algorithm - 来自 Google Code Jam(2014)资格赛的扫雷大师

这是来自 Google Code Jam 资格赛的问题(现在已经结束)。如何解决这个问题呢?

注意:如果您有与答案中讨论的方法不同的方法,请分享它,以便我们扩展我们对解决此问题的不同方法的了解。

问题陈述:

Minesweeper 是一种在 1980 年代流行的电脑游戏,并且仍然包含在某些版本的 Microsoft Windows 操作系统中。这个问题有类似的想法,但它并不假设你玩过扫雷。

在这个问题中,你是在相同单元格的网格上玩游戏。每个单元格的内容最初是隐藏的。在网格的 M 个不同单元格中隐藏着 M 个地雷。没有其他细胞含有地雷。您可以单击任何单元格以显示它。如果显示的单元格包含地雷,则游戏结束,您输了。否则,显示的单元格将包含一个介于 0 和 8 之间的数字,包括 0 和 8,这对应于包含地雷的相邻单元格的数量。如果两个单元共享一个角或一个边,则它们是邻居。此外,如果显示单元格包含 0,则显示单元格的所有邻居也会自动递归显示。当所有不包含地雷的单元格都被揭露时,游戏结束,你赢了。

例如,板的初始配置可能如下所示('*' 表示地雷,'c' 是第一个单击的单元格):

被点击的单元格附近没有地雷,所以当它被显示时,它变为0,并且它的8个相邻单元格也被显示出来。这个过程继续,产生以下板:

此时,仍有未显示的不包含地雷的单元格(用“.”字符表示),因此玩家必须再次单击才能继续游戏。

你想尽快赢得比赛。没有什么比一键获胜更快的了。考虑到棋盘的大小(R x C)和隐藏地雷的数量 M,是否有可能(但不太可能)一键获胜?您可以选择单击的位置。如果可能,请按照输出部分中的说明打印任何有效的矿井配置和单击的坐标。否则,打印“不可能”。

我尝试过的解决方案:

因此对于解决方案,您需要确保每个非矿节点与其他非矿节点在一个 3x3 矩阵中,如果该节点位于网格的边缘,则为 3x2 或 2x2 矩阵;让我们称之为 0Matrix。所以 0Matrix 中的任何节点都有所有非我的邻居。

首先,检查是否需要更少的地雷,或者更少的空节点

例如,假设我们有一个需要 8 个干净节点的 4x4 网格,步骤如下:

另一个例子:需要 11 个清晰节点的 4x4 网格;输出:

另一个例子:需要 14 个清晰节点的 4x4 网格;输出:

现在这里我们有一个完全填充的网格,如果我们单击 (0, 0),可以一键解决。

我的解决方案适用于大多数情况,但它没有通过提交(我确实检查了整个 225 个案例的输出文件),所以我猜它有一些问题,我很确定有更好的解决方案。

0 投票
1 回答
513 浏览

master - Google Code jam 2014 资格赛中 MineSweeperMaster 的任何其他解决方案?

以下是我的解决方案,但它只能解决问题。我希望我能看到一些好的解决方案,这些解决方案使用一些动态编程或其他算法(蛮力除外)来尝试将 0 单元格放入板上。

以下是我的算法的步骤:

1) m = 0:都是自由空间。打印 ”。” 在所有单元格中,然后用“c”覆盖任何单元格。

2) 仍然 = 1:同样的想法,. 在所有单元格中打印“*”,然后用“c”覆盖任何单元格。

3)如果r==1,或者c==1:解在前m个单元格中放“*”,在最后一个单元格中放“c”,其他单元格是“.”

(交换案例4)和5的位置)。感谢@TheComputerGuy 的评论。) 4)在其他情况下,如果剩余为 2、3、5、7,则“不可能”。别的:

5) if r==2, or c==2: if m % 2==0, then have solution: in first m/2 columns or rows are "*", and "c" in the last cell,其他单元格是 ”。” 如果 m % 2 == 1,“不可能”。

6)从(0,0)逐行,从左到右,从上到下填充地雷。需要考虑特殊情况:set rs = m / c; cs = m % c 6.1) 如果 rs < r - 2 且 cs < c - 1,则填好,最后一个单元格放“c”,其他单元格为“.”

6.2) 如果 rs < r -3,并且 cs == c -1,则将一个地雷移动到下一行的开头。(这个案例)

6.3) 如果 rs == r - 3 和 cs == c -1,则将两个地雷移动到两行的开头

6.4) 如果 rs >= r - 2, 并且保持 % 2 == 0 然后将前两行的第一个保持/2 列留空并用地雷填充其他单元格:

6.5) 如果 rs >= r - 2,并且保持 %2 == 1,则将前两行的第一个(保持 -3)/2 列留空,将第 3 行的前三列留空,并填充其他有地雷的牢房:

现在可以覆盖所有条件。

我是这个系统的新手。如果你真的喜欢我的解决方案,希望能得到一些积分。并欢迎发布您的解决方案。太感谢了!

0 投票
1 回答
358 浏览

python - 扫雷的麻烦

现在我正在尝试在 Python 中将 2D 数组(列表列表)放入我的扫雷程序中。但是,当我运行它时,它给了我第 38 行错误

代码:

这是输出:

我不知道如何解决这个问题

我真的很感激这方面的帮助