在矩阵 TI-84 中查找邻居

Find neighbors in matrix TI-84

我正在为我的 TI-84 Plus 在 TI-Basic 中制作扫雷的准系统游戏。我坚持在地雷周围添加数字。我用数字 9 表示炸弹,因为 TI-Basic 不允许矩阵中的其他数据类型。 例如我有矩阵

0 0 0 0 0 0 0 9 0
0 9 0 0 0 0 0 0 0
0 0 0 0 0 9 0 0 0
0 0 9 0 9 0 0 0 0
0 0 0 0 9 0 0 0 0
9 0 0 0 0 0 0 0 0
0 9 0 0 0 0 0 0 0
0 0 0 0 0 9 0 0 0
0 0 0 0 0 0 0 0 9

我想将其更改为

1 1 1 0 0 0 1 9 1
1 9 1 0 1 1 2 1 1
1 2 2 0 2 9 1 0 0
0 1 9 3 9 3 1 0 0
1 2 0 3 9 2 0 0 0
9 2 1 1 1 1 0 0 0
2 9 1 0 1 1 1 0 0
1 1 1 0 1 9 1 1 1
0 0 0 0 1 1 1 1 9

抱歉,如果我遗漏了任何数字,那是我手动完成的。

关于如何在 TI-Basic 中执行此操作的任何想法

有一种非常简单的方法,但速度可能不会很快。首先,使用双 for 循环遍历矩阵中的每个单元格:

For(a, 1, 9

For(b, 1, 9

End

End

然后,当您检查邻居时,您必须考虑周围没有八个空格的角和边。

For(a, 1, 9

For(b, 1, 9

If a>1 and a <9 and b>1 and b<9

Then

End

End

End

现在,我们可以检查一下我们周围有多少个空格是 9。我们将使用一个计数器 "c" 来计算我们找到 9 的次数。这很乏味,但这是最简单的方法

0->c

For(a, 1, 9

For(b, 1, 9

If a>1 and a <9 and b>1 and b<9

Then

c + ([a](a-1, b-1)=9) + ([a](a-1, b)=9) + ([a](a-1, b+1)=9) + ([a](a, b-1)=9) + ([a](a, 
b+1)=9) + ([a](a+1, b-1)=9) + ([a](a+1, b)=9) + ([a](a+1, b+1)=9)->c

End

c->[a](a, b)

End

End

我没有考虑角落和边缘,您只需添加另一个 if 语句希望这对您有所帮助!

好吧,我知道这真的很老,但我想出了一个我从未分享过的解决方案。因此,如果有人正在查看此内容,这就是我所做的。首先,我用雷区的尺寸设置了一个矩阵。然后,我向矩阵添加了额外的几个维度,并用 -99 填充它。这是它在我原来的

上的工作方式
0 0 0 0 0 0 0 9 0
0 9 0 0 0 0 0 0 0
0 0 0 0 0 9 0 0 0
0 0 9 0 9 0 0 0 0
0 0 0 0 9 0 0 0 0     ->  
9 0 0 0 0 0 0 0 0
0 9 0 0 0 0 0 0 0
0 0 0 0 0 9 0 0 0
0 0 0 0 0 0 0 0 9
-99 -99 -99 -99 -99 -99 -99 -99  -99 -99 -99
-99  0   0   0   0   0   0   0   9   0   -99
-99  0   9   0   0   0   0   0   0   0   -99
-99  0   0   0   0   0   9   0   0   0   -99
-99  0   0   9   0   9   0   0   0   0   -99
-99  0   0   0   0   9   0   0   0   0   -99    
-99  9   0   0   0   0   0   0   0   0   -99
-99  0   9   0   0   0   0   0   0   0   -99
-99  0   0   0   0   0   9   0   0   0   -99
-99  0   0   0   0   0   0   0   0   9   -99
-99 -99 -99 -99 -99 -99 -99 -99  -99 -99 -99

然后,遍历内部 9x9 矩阵中的每个单元格(非负矩阵)。 然后,通过循环搜索该单元格周围的地雷。

For(I,2,10)
For(J,2,10)
For(K,-1,1)
If [M](I+K,J+L)>8 //A neighbor can't be greater than eight unless it's a mine.
Then
For(L,-1,1)   
[M](I+K,J+L)+1->[M](I+K,J+L)+1
End
End
End
End
End

这个循环遍历所有邻居,如果有一个是地雷,它会向那个单元格添加一个。 以这种方式完全忽略负数,并且您不必对角和边进行硬编码。

代码在我的 github 上可用:ti84sweeper