Example #1
0
def _valid_ray(orig, dest, board):
    """
    :param orig: origin
    :param dest: destination
    :return: true if a nothing is on the way between the origin and the destination
    """
    (d0, d1, _) = dest
    base = utilities.get_base_vector(utilities.get_rel_vector(orig, dest))
    tmp = utilities.add_vector(orig, base)
    (t0, t1, _) = tmp

    while t0 is not d0 or t1 is not d1:
        print(tmp)
        for i in range(0, 6):
            if board.get_piece((t0, t1, i)):
                return False

            if not _is_other_color(board.get_piece(orig),
                                   board.get_piece((t0, t1, i))):
                return False

        tmp = utilities.add_vector(tmp, base)
        (t0, t1, _) = tmp

    return True
Example #2
0
    def move_atk_board(self, orig, dest):
        """
        moves an attack board on a pin and all pieces on top of it to the new pin
        updates the usable fields
        """
        if orig not in self.atkBoards:
            return

        if dest not in self.atkBoards:
            # get bottom-left field on king's side
            if orig[0] == "Q":
                field = self.pins[int(orig[2])]
            else:
                field = utilities.add_vector(self.pins[int(orig[2])],
                                             (4, 0, 0))

            vector = self._get_rel_atk_board_vector(orig, dest)

            all_origins = (field, utilities.add_vector(field, (0, 1, 0)),
                           utilities.add_vector(field, (1, 0, 0)),
                           utilities.add_vector(field, (1, 1, 0)))

            for o in all_origins:
                self.set_piece(utilities.add_vector(o, vector),
                               self.get_piece(o))
                self.set_piece(o, None)

            self.atkBoards.remove(orig)
            self.atkBoards.append(dest)
Example #3
0
    def move_atk_board(self, orig, dest):
        """
        moves an attack board on a pin and all pieces on top of it to the new pin
        updates the usable fields
        """
        if orig not in self.atkBoards:
            return

        if dest not in self.atkBoards:
            # get bottom-left field on king's side
            if orig[0] == "Q":
                field = self.pins[int(orig[2])]
            else:
                field = utilities.add_vector(self.pins[int(orig[2])], (4, 0, 0))

            vector = self._get_rel_atk_board_vector(orig, dest)

            all_origins = (field,
                           utilities.add_vector(field, (0, 1, 0)),
                           utilities.add_vector(field, (1, 0, 0)),
                           utilities.add_vector(field, (1, 1, 0))
                           )

            for o in all_origins:
                self.set_piece(utilities.add_vector(o, vector), self.get_piece(o))
                self.set_piece(o, None)

            self.atkBoards.remove(orig)
            self.atkBoards.append(dest)
Example #4
0
def _valid_ray(orig, dest, board):
    """
    :param orig: origin
    :param dest: destination
    :return: true if a nothing is on the way between the origin and the destination
    """
    (d0, d1, _) = dest
    base = utilities.get_base_vector(utilities.get_rel_vector(orig, dest))
    tmp = utilities.add_vector(orig, base)
    (t0, t1, _) = tmp

    while t0 is not d0 or t1 is not d1:
        print(tmp)
        for i in range(0, 6):
            if board.get_piece((t0, t1, i)):
                return False

            if not _is_other_color(board.get_piece(orig), board.get_piece((t0, t1, i))):
                return False

        tmp = utilities.add_vector(tmp, base)
        (t0, t1, _) = tmp

    return True