【问题标题】:Find neighbors in matrix TI-84在矩阵 TI-84 中查找邻居
【发布时间】:2018-09-04 23:37:42
【问题描述】:

我正在 TI-Basic 中为我的 TI-84 Plus 制作一款简单的扫雷游戏。我坚持在地雷周围添加数字。我有代表炸弹的数字 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 中做到这一点

【问题讨论】:

    标签: matrix minesweeper ti-basic


    【解决方案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

    【讨论】:

      【解决方案2】:

      有一种非常简单的方法,但可能不会很快。首先,使用双 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 语句希望这有帮助!

      【讨论】:

      • 其实最好的办法就是用一个list作为栈,然后bactrack
      猜你喜欢
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多