Example #1
0
        def it_can_undo_last_move_or_push(self, forward_mover):
            src = index_1d(4, 2, forward_mover.board.width)
            dest = index_1d(3, 2, forward_mover.board.width)

            forward_mover.move(Direction.LEFT)
            forward_mover.undo()

            assert forward_mover.state.pusher_position(DEFAULT_PIECE_ID) == src
            assert forward_mover.board[src].has_pusher == True
            assert forward_mover.board[dest].has_pusher == False
Example #2
0
        def it_moves_pusher_in_requested_direction(self, forward_mover):
            src = index_1d(4, 2, forward_mover.board.width)
            dest = index_1d(3, 2, forward_mover.board.width)

            assert forward_mover.move(Direction.LEFT)
            assert forward_mover.state.pusher_position(DEFAULT_PIECE_ID) == dest
            assert not forward_mover.board[src].has_pusher
            assert forward_mover.board[dest].has_pusher
Example #3
0
        def it_doesnt_memoize_failed_moves_and_pushes(self, forward_mover):
            forward_mover.move(Direction.UP)
            with pytest.raises(IllegalMoveError):
                forward_mover.move(Direction.UP)
            assert len(forward_mover.last_performed_moves) == 0

            forward_mover.move(Direction.DOWN)
            with pytest.raises(IllegalMoveError):
                forward_mover.move(Direction.RIGHT)
            assert len(forward_mover.last_performed_moves) == 0
Example #4
0
 def it_refuses_to_push_two_boxes(self, forward_mover):
     assert forward_mover.move(Direction.UP)
     assert forward_mover.move(Direction.RIGHT)
     assert forward_mover.move(Direction.DOWN)
     forward_mover.selected_pusher = DEFAULT_PIECE_ID + 1
     assert forward_mover.move(Direction.LEFT)
     assert forward_mover.move(Direction.LEFT)
     assert forward_mover.move(Direction.LEFT)
     with pytest.raises(IllegalMoveError):
         forward_mover.move(Direction.LEFT)
Example #5
0
        def it_pushes_box_in_front_of_pusher(self, forward_mover):
            assert forward_mover.move(Direction.DOWN)
            assert forward_mover.move(Direction.RIGHT)

            box_src = index_1d(5, 2, forward_mover.board.width)
            box_dest = index_1d(5, 1, forward_mover.board.width)
            pusher_src = index_1d(5, 3, forward_mover.board.width)
            pusher_dest = box_src
            assert forward_mover.move(Direction.UP)

            assert forward_mover.state.box_position(
                DEFAULT_PIECE_ID + 1
            ) == box_dest
            assert forward_mover.state.pusher_position(
                DEFAULT_PIECE_ID
            ) == pusher_dest

            assert not forward_mover.board[box_src].has_box
            assert not forward_mover.board[pusher_src].has_pusher
            assert forward_mover.board[box_dest].has_box
            assert forward_mover.board[pusher_dest].has_pusher
Example #6
0
 def it_memoizes_last_move_or_push(self, forward_mover):
     forward_mover.move(Direction.DOWN)
     assert forward_mover.last_performed_moves == [
         AtomicMove(Direction.DOWN, False)
     ]
     forward_mover.move(Direction.RIGHT)
     assert forward_mover.last_performed_moves == [
         AtomicMove(Direction.RIGHT, False)
     ]
     forward_mover.move(Direction.UP)
     assert forward_mover.last_performed_moves == [
         AtomicMove(Direction.UP, True)
     ]
Example #7
0
 def it_refuses_to_push_box_into_obstacle(self, forward_mover):
     with pytest.raises(IllegalMoveError):
         forward_mover.move(Direction.RIGHT)
Example #8
0
 def it_refuses_to_move_pusher_into_obstacles(self, forward_mover):
     assert forward_mover.move(Direction.UP)
     with pytest.raises(IllegalMoveError):
         forward_mover.move(Direction.UP)