gpt4 book ai didi

C++ 扫雷器 AjacentMines

转载 作者:行者123 更新时间:2023-11-28 05:47:22 32 4
gpt4 key购买 nike

我和我的兄弟正在制作扫雷游戏。我们几乎已经制作了所有东西,但是我们在查找旁边有多少地雷时遇到了问题。我的兄弟试图用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com