我有一项任务是在Smalltalk中创建一个简单的游戏,这是一种我很不熟悉的语言。游戏是Marble Solitaire,它包含一个7x7的矩阵,每个角落都有2x2的正方形。
我有一个方法可以检查每个元素是否有有效的移动,我想在矩阵中的每个元素上调用该方法。一旦找到有效的移动,该方法将返回true并且迭代过程可以停止并且玩家可以继续玩。
Matrix创建的代码看起来像这样。
pegs := Matrix
new: n
tabulate: [:i :j | self newCellAt: i at: j]
答案 0 :(得分:2)
从架构的角度来看,我建议为元素创建一个类,让我们说BoardPiece
并为它定义#hasValidMove方法。然后你可以这样做:
elements anySatisfy: #hasValidMove
否则你可以用矩阵做同样的事情:
pegs anySatisfy: [ :peg | self validMoveAvailableFor: peg ]
假设#validMoveAvailableFor接受矩阵中的值,并且如果它有有效的移动则返回true。
请注意elements anySatisfy: #hasValidMove
与elements anySatisfy: [ :el | el hasValidMove ]