我正在为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中做到这一点的任何想法
答案 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
我省去了角落和边缘,如果声明,您只需添加另一个希望此举即可!