Esempio n. 1
0
def robot_coordonnees_pince_test():
    grille = Grille(10, 10)
    point_montage = PointMontage(5, 5)
    grille.add_point_montage(point_montage)

    robot = Robot()
    robot.point_montage = point_montage
    assert robot.coordonnees_pince() == robot.point_montage

    # simulation mouvement haut
    bras = Bras(5, 6)
    robot.bras.append(bras)
    grille.cases[6][5].append(bras)
    assert robot.coordonnees_pince() == bras
Esempio n. 2
0
    def to_matrix(self,
                  x1: int,
                  y1: int,
                  x2: int,
                  y2: int,
                  robot: Robot = None) -> List:
        """Renvoie la grille sous forme d'une matrice.

        0 pour un point de montage
        -1 pour un bras d'autre robots (avec ou sans etape)
        1 pour les bras du robot actuel (si lieu)
        100 pour le vide
        150 pour une etape

        :param robot: Le point de vue du robot actuel (notamment pour la rétractation)
        :type: Robot

        :param x1: coordonée x
        :param y1: coordonée y
        :type: int

        :param x2: coordonée x
        :param y2: coordonée y
        :type: int

        :return : La carte en deux dimenssions
        :rtype : List
        """
        assert x1 <= x2
        assert y1 <= y2

        map: List = []
        if robot is not None:
            pince = robot.coordonnees_pince()

        for y in range(y1, y2 + 1):
            map.append([])
            for x in range(x1, x2 + 1):
                if x < 0 or x >= self.longueur or y < 0 or y >= self.hauteur:
                    map[y - y1].append(-2)
                else:
                    if len(self.cases[y][x]) == 1:
                        if isinstance(self.cases[y][x][0], PointMontage):
                            # il s'agit d'un point de montage
                            map[y - y1].append(0)

                        elif isinstance(self.cases[y][x][0], Bras):
                            # le bras du robot ?
                            ok = False
                            if robot is not None \
                                    and (pince == self.cases[y][x][0] or
                                         (len(robot.bras) > 2 and self.cases[y][x][0] == robot.bras[-2]) or
                                         (len(robot.bras) == 1 and self.cases[y][x][0] == robot.point_montage)):
                                ok = True
                                # c'est une pince de robot, la dernière case d'un bras
                                map[y - y1].append(1)

                            if not ok:
                                # c'est le bras d'un robot
                                map[y - y1].append(-1)

                        elif isinstance(self.cases[y][x][0], Etape):
                            # il s'agit d'une étape
                            map[y - y1].append(150)

                    elif len(self.cases[y][x]) == 2:
                        ok = False
                        if robot is not None \
                                and (pince == self.cases[y][x][0] or
                                  (len(robot.bras) > 2 and self.cases[y][x][0] == robot.bras[-2]) or
                                  (len(robot.bras) == 1 and self.cases[y][x][0] == robot.point_montage)):
                            ok = True
                            #c'est une pince de robot, la dernière case d'un bras
                            map[y - y1].append(1)
                        if not ok:
                            #c'est un bras de robot
                            map[y - y1].append(-1)
                    else:
                        #c'est une case vide
                        map[y - y1].append(100)
        return map