迭代矩阵元素并在Smalltalk中返回true时停止

时间:2014-10-02 07:03:22

标签: loops matrix smalltalk

我有一项任务是在Smalltalk中创建一个简单的游戏,这是一种我很不熟悉的语言。游戏是Marble Solitaire,它包含一个7x7的矩阵,每个角落都有2x2的正方形。

我有一个方法可以检查每个元素是否有有效的移动,我想在矩阵中的每个元素上调用该方法。一旦找到有效的移动,该方法将返回true并且迭代过程可以停止并且玩家可以继续玩。

Matrix创建的代码看起来像这样。

pegs := Matrix
            new: n
            tabulate: [:i :j | self newCellAt: i at: j] 

1 个答案:

答案 0 :(得分:2)

从架构的角度来看,我建议为元素创建一个类,让我们说BoardPiece并为它定义#hasValidMove方法。然后你可以这样做:

elements anySatisfy: #hasValidMove

否则你可以用矩阵做同样的事情:

pegs anySatisfy: [ :peg | self validMoveAvailableFor: peg ]

假设#validMoveAvailableFor接受矩阵中的值,并且如果它有有效的移动则返回true。

请注意elements anySatisfy: #hasValidMoveelements anySatisfy: [ :el | el hasValidMove ]

完全相同