在矩阵 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
我正在为我的 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