1

所以我正在开发一个扫雷游戏并分配地雷,但我必须检查现在地雷在哪里,以便生成数字。问题是,当我验证列和行时,我需要程序不要离开游戏领域。

这是我的代码现在的样子:

Public Sub avisinhos(ByVal line, ByVal column)
    If mat(line, column) = 0 Then
        mat(line, column) = -1
        numbandeiras = numbandeiras + 1
    End If
    For auxlinha = -1 To 1
        For auxcolumn = -1 To 1

        Next
    Next
End Sub

如何创建一个 IF 函数来验证我没有脱离游戏领域?最好的问候,乔奥。

4

2 回答 2

1

伪代码

int linestart = -1;
int lineend = 1;
int colstart = -1;
int colend = 1;

Assuming a 10 x 10 grid (zero based)

if line < 2 linestart = 0
if line > 8 lineend = 0
if column < 2 colstart = 0
if column > 8 colend = 0

For auxlinha = linestart To lineend
   For auxcolumn = colstart To colend
     // check
   Next     
Next 

就个人而言,虽然我不会为循环而烦恼,但它们几乎没有添加

HasMineAbove = (line > 1) 和 (gamefield[line -1,column] = MinePresentValue

将是我的方法,一举两得。

更不用说当 auxlinha 和 auxcolumn 都为零时的巨大潜在混乱......

于 2012-05-01T17:26:27.703 回答
1

我不确定你的代码到底在说什么。这有点神秘,因为您使用的是缩写和所有小写名称。您可能想尝试骆驼拼写并更完整地拼出单词,智能感知是您的朋友。=)

但抛开编码风格不谈,如果您尝试遍历有限范围的值,您可以使用模数运算符 (%) 来限制值。例如,如果您需要将值保持在 0-7 之间,并且最终的值为 12,则只需将 8 的模数循环回到值为 4 的范围内:

12 % 8 = 4
9  % 8 = 1
15 % 8 = 7
24 % 8 = 0

我意识到这并不能回答您的具体问题,但它是一种方便的技术,可能会很有用。

于 2012-05-01T17:52:20.010 回答