+ def move_yxyx(self, start_yxyx, direction):
+ mover = getattr(self, 'move__' + direction)
+ start_yx = self.undouble_yxyx(*start_yxyx)
+ target_yx = mover(start_yx)
+ return self.double_yx(target_yx)
+
+ def double_yx(self, absolute_yx):
+ big_y = absolute_yx.y // self.size.y
+ little_y = absolute_yx.y % self.size.y
+ big_x = absolute_yx.x // self.size.x
+ little_x = absolute_yx.x % self.size.x
+ return YX(big_y, big_x), YX(little_y, little_x)
+
+ def undouble_yxyx(self, big_yx, little_yx):
+ y = big_yx.y * self.size.y + little_yx.y
+ x = big_yx.x * self.size.x + little_yx.x
+ return YX(y, x)
+
+ def basic_circle_out_move(self, position, direction):
+ mover = getattr(self, 'move__' + direction)
+ return mover(position)
+