class SlidePuzzle(object):
def __init__(self, state = None):
if state == None: state = [[1,2,3],[4,'N',5],[6,7,8]]
self.puzzle_state = list(state)
def isValidMove(self, move):
x,y = self.getBlank()
if move == 'up':
return y != 0
elif move == 'down':
return y != 2
elif move == 'left':
return x != 0
elif move == 'right':
return x != 2
else:
print "Invalid Move"
return 0
def getValidMoves(self):
validMoves = ['up', 'down', 'left', 'right']
if not self.isValidMove('down'):
validMoves.remove('down')
if not self.isValidMove('up'):
validMoves.remove('up')
if not self.isValidMove('right'):
validMoves.remove('right')
if not self.isValidMove('left'):
validMoves.remove('left')
return validMoves
def generateChildren(self):
return [SlidePuzzle(self.puzzle_state).move(m) for m in self.getValidMoves()]
これらのコマンドを実行すると、次のようになります。
- p = SlidePuzzle()
- print p
- p.move('up')
- print p
- print p.generateChildren()
- print p
これが出力です。すべてのソースを含めたわけではありませんが、ご覧のとおり、移動機能は必要に応じて機能します。私が理解していないのは、generateChildren関数が新しいスライドパズルオブジェクトを作成していないように見えるだけでなく、呼び出し元のオブジェクトのパズルの状態も混乱させている理由です。
- [1, 2, 3]
- [4, 'N', 5]
- [6, 7, 8]
- [1, 'N', 3]
- [4, 2, 5]
- [6, 7, 8]
- [None, None, None]
- [1, 2, 3]
- [4, 'N', 5]
- [6, 7, 8]