示例#1
0
    def getPositionVoisine(position, direction):
        """
        Obtient une position voisine
            @param position
                la position sur le damier
            @param direction
                direction de mouvement en diagonale sur le damier vers: Haut à
                Gauche, Haut à Droite, Bas à Gauche, Bas à Droite
            @return
                la position voisine ou -1 si on est en bordure du damier
        """
        # si le numéro de ligne est pair
        result = {
            Direction.HAUT_GAUCHE: position - PositionsDamier.colonnes,
            Direction.HAUT_DROITE: position - PositionsDamier.colonnes + 1,
            Direction.BAS_GAUCHE: position + PositionsDamier.colonnes,
            Direction.BAS_DROITE: position + PositionsDamier.colonnes + 1,
        }[direction]

        # si le numéro de ligne est impair, une correction est necessaire
        numeroLigne = PositionsDamier.getNumeroLigne(position)
        if (Outils.estImpair(numeroLigne)):
            result = result - 1

        # si la position est en déhors du damier, retourner -1
        if (PositionsDamier.estPositionInvalide(result)):
            return -1

        # calculer le numéro de la ligne voisine
        numeroLigneVoisine = PositionsDamier.getNumeroLigne(result)
        offsetLigne = numeroLigneVoisine - numeroLigne

        # la ligne de la position voisine valide se trouve une ligne
        # plus haut (offsetLigne = -1)
        # ou plus bas (offsetLigne = 1)
        # en bordure du damier (offsetLigne = +/- 2)
        if ((offsetLigne != 1) and (offsetLigne != -1)):
            result = -1
        return result