作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我和我的兄弟正在制作扫雷游戏。我们几乎已经制作了所有东西,但是我们在查找旁边有多少地雷时遇到了问题。我的兄弟试图用 if 和 else if 语句来做,但我认为最好使用循环。我做了一个循环,但我有一个问题。它计算左侧和右侧。我该如何解决它。这是我的代码:
int p_col = col - 1;
int p_row = row - 1;
for (int j = 0; j < 3; j++){
if (p_col + j >= 0){
if (p_row + j >= 0){
if (row + j <= height){
if (isTileMine(p_row + j, p_col))
miner++;
if (isTileMine(p_row + j, p_col + 1)){
//Teller ikke seg selv
if (p_row + j == p_row + 1){}
else{
miner++;
}
}
if (isTileMine(p_row + j, p_col + 2))
miner++;
}
}
}
}
最佳答案
这个算法有很多明显的错误,其中最重要的一点是,当当前位置位于比赛 field 的右边缘时,它可能会由于边界检查失败而导致未定义的行为。
你需要两个循环,而不是一个。
第一个循环从row-1到row+1
从 col-1 到 col+1 的内循环
这将遍历被检查单元格附近的所有单元格。
这也会循环遍历 (row, col),因此您只需在循环体中跳过它
在检查任何内容之前,在内循环中的首要任务是验证当前正在检查的坐标是否确实在运动场上。 row 和 col 都不是负数(因为循环将从 row-1 和 col-1 迭代,其中任何一个都可能为 0),并且不超过运动场的最大尺寸(因为 row 和 col 可以是坐标在右侧或底部边缘)。
当您在循环体中只调用一次 isTileMine()
而不是三个时,您就知道您的答案是正确的。
关于C++ 扫雷器 AjacentMines,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35963568/
我和我的兄弟正在制作扫雷游戏。我们几乎已经制作了所有东西,但是我们在查找旁边有多少地雷时遇到了问题。我的兄弟试图用 if 和 else if 语句来做,但我认为最好使用循环。我做了一个循环,但我有一个
我是一名优秀的程序员,十分优秀!