在矩阵TI-84中查找邻居

时间:2018-09-04 23:37:43

标签: matrix minesweeper ti-basic

我正在为TI-84 Plus在TI-Basic中进行Minesweeper的准系统游戏。我坚持在地雷周围增加数字。由于TI-Basic不允许在矩阵中使用其他数据类型,因此我将9表示炸弹。 例如我有矩阵

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中做到这一点的任何想法

2 个答案:

答案 0 :(得分:1)

好的,我知道这确实很老,但是我想出了一个我从未分享过的解决方案。所以,如果有人在看这个,这就是我所做的。首先,我建立了一个具有雷场尺寸的矩阵。然后,我向矩阵添加了额外的尺寸,并用-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

答案 1 :(得分:0)

有一个非常简单的方法,但是可能不会很快。不过,首先,请使用double 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

我省去了角落和边缘,如果声明,您只需添加另一个希望此举即可!