module special.puzzle_girafe#

Inheritance diagram of ensae_teaching_cs.special.puzzle_girafe

Short summary#

module ensae_teaching_cs.special.puzzle_girafe

Fonctions, classes pour résoudre un puzzle à 9 pièces disposé en carré 3x3. Voir Résolution d’un puzzle.

source on GitHub

Classes#

class

truncated documentation

PuzzleGirafe

définition d’une classe puzzle, elle contient simplement une liste de 9 pièces dont les positions sont

PuzzleGirafeBord

Définition d’un bord ou côté d’une pièce, il possède :

PuzzleGirafePiece

Définition d’une pièce du puzzle, celle-ci inclut :

Functions#

function

truncated documentation

display_puzzle_girafe

affiche les pièces sur l’écran, en plus petit pour celles qui ne sont pas encore placées

display_puzzle_girafe_piece

affiche la pièce en tenant compte de sa position et de son orientation

pygame_simulation

Simulation graphique. Illuste la résolution du puzzle

Methods#

method

truncated documentation

__init__

on définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir …

__init__

__init__

on définit la pièce

__str__

ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafe.

__str__

Cette méthode est appelée lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafeBord. …

__str__

définition ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafePiece. …

angle_possible

retourne l’ensemble des angles possibles pour une pièce donnée

bord_angle

retourne le bord connaissant l’orientation de la pièce, le bord demandé est celui correspondant à :

compatible

dit si deux bords sont compatibles, c’est à dire de la même couleur et de partie différente

ensemble_voisin

retourne les positions voisins de la position i

load_image

charge l’image pour une simulation graphique

load_images

charge les images pour une simulation graphique

meilleure_piece

retourne la prochaine pièce à placer sur le puzzle, dans un premier temps, on peut prend la première qui vient, …

nb_place

retourne le nombre de places vides

piece_position

recherche la piece associée à la position pi

pixel

retourne en fonction de la position (1 à 9) de la pièce sa position sur l’écran, soit deux coordonnées

solution

Résoud le puzzle de façon récursive : on pose une pièce puis on résoud le puzzle restant (une pièce en moins, une …

voisin_possible

détermine si la pièce self peut être voisine avec la pièce p tournée de l’angle a

Documentation#

Fonctions, classes pour résoudre un puzzle à 9 pièces disposé en carré 3x3. Voir Résolution d’un puzzle.

source on GitHub

class ensae_teaching_cs.special.puzzle_girafe.PuzzleGirafe#

Bases : object

définition d’une classe puzzle, elle contient simplement une liste de 9 pièces dont les positions sont

1 2 3
4 5 6
7 8 9

et les orientations choisies dans l’ensemble { 0,90,180,270 }

Voir Résolution d’un puzzle.

source on GitHub

on définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir :

  • 9 images appelées piece1.png, …, piece0.png

  • un fichier definition_puzzle_girafe.txt contenant la définition de chacun des 4 bords de chacune des 9 pièces:

    HOBBBVHM
    HOBBBVHM
    HBBMBVHO
    HMBBBVHB
    BMBOHBHV
    HVBMBOHM
    BMBVHBHO
    HVHMBBBO
    BMHOHVBB
    

source on GitHub

__init__()#

on définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir :

  • 9 images appelées piece1.png, …, piece0.png

  • un fichier definition_puzzle_girafe.txt contenant la définition de chacun des 4 bords de chacune des 9 pièces:

    HOBBBVHM
    HOBBBVHM
    HBBMBVHO
    HMBBBVHB
    BMBOHBHV
    HVBMBOHM
    BMBVHBHO
    HVHMBBBO
    BMHOHVBB
    

source on GitHub

__str__()#

ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafe.

source on GitHub

angle_possible(p, display=False)#

retourne l’ensemble des angles possibles pour une pièce donnée

source on GitHub

ensemble_voisin(i)#

retourne les positions voisins de la position i

source on GitHub

load_images(pygame)#

charge les images pour une simulation graphique

Paramètres:

pygame – module pygame

source on GitHub

meilleure_piece(free, pos)#

retourne la prochaine pièce à placer sur le puzzle, dans un premier temps, on peut prend la première qui vient, ensuite, on peut essayer un choix plus judicieux

source on GitHub

nb_place()#

retourne le nombre de places vides

source on GitHub

piece_position(pi)#

recherche la piece associée à la position pi

source on GitHub

pixel(position)#

retourne en fonction de la position (1 à 9) de la pièce sa position sur l’écran, soit deux coordonnées

Renvoie:

tuple (x,y)

source on GitHub

solution(pos=1, screen=None, pygame=None, images=None, delay=200)#

Résoud le puzzle de façon récursive : on pose une pièce puis on résoud le puzzle restant (une pièce en moins, une case en moins).

Paramètres:
  • pos – niveau de récursivité

  • screen – image pygame

  • pygame – module pygame

  • images – stores images in this list if not None

  • delay – delay between two tries

L’affichage pygame est optionnel.

source on GitHub

class ensae_teaching_cs.special.puzzle_girafe.PuzzleGirafeBord(definition)#

Bases : object

Définition d’un bord ou côté d’une pièce, il possède :

  • partie : une partie de la girafe (haut ou bas)

  • une couleur : la couleur de cette partie, (orange, violet, bleu clair, bleu foncé)

source on GitHub

Paramètres:

definition – chaîne de caractères

definition est une chaîne de 2 caractères qui définit un bord, exemple :

  • HO pour haut orange

  • BB pour bas bleu

  • BV pour bas violet

  • HM pour haut mauve

source on GitHub

__init__(definition)#
Paramètres:

definition – chaîne de caractères

definition est une chaîne de 2 caractères qui définit un bord, exemple :

  • HO pour haut orange

  • BB pour bas bleu

  • BV pour bas violet

  • HM pour haut mauve

source on GitHub

__str__()#

Cette méthode est appelée lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafeBord.

source on GitHub

compatible(bord)#

dit si deux bords sont compatibles, c’est à dire de la même couleur et de partie différente

source on GitHub

class ensae_teaching_cs.special.puzzle_girafe.PuzzleGirafePiece(name, definition, position, numero)#

Bases : object

Définition d’une pièce du puzzle, celle-ci inclut :

  • bord : cette liste contient quatre objets de type Bord, cette liste ne changera plus

  • position : c’est la position de la pièce dans le puzzle, ce qui nous intéresse, c’est la position finale de la pièce dans le puzzle, cette information va donc bouger au fur et à mesure que nous allons essayer de résoudre le puzzle

  • orientation : de même que pour la position, une pièce peut être tournée sans changer de position, c’est le résultat final qui nous intèresse

pour l’affichage, on ajoute deux informations :

  • name : le nom de l’image de la pièce

  • image : c’est la représentation de l’image dans la mèmoire de l’ordinateur pour le module pygame

source on GitHub

on définit la pièce

Paramètres:
  • name – nom de l’image représentant la pièce

  • definition – chaîne de 8 caractères, c’est une suite de 4 x 2 caractères définissant chaque bord, voir la classe bord pour leur signification

  • position – c’est la position initiale de la pièce, on suppose que l’orientation est nulle pour commencer

  • numero – numéro de la pièce

à partir de ces informations, on construit :

  • image : c’est la représentation en mémoire de l’image de la pièce

  • bord : c’est une liste qui définit les 4 bords de la pièce

  • orientation : c’est l’orientation de la pièce, au début de la résolution, elle est nulle

source on GitHub

__init__(name, definition, position, numero)#

on définit la pièce

Paramètres:
  • name – nom de l’image représentant la pièce

  • definition – chaîne de 8 caractères, c’est une suite de 4 x 2 caractères définissant chaque bord, voir la classe bord pour leur signification

  • position – c’est la position initiale de la pièce, on suppose que l’orientation est nulle pour commencer

  • numero – numéro de la pièce

à partir de ces informations, on construit :

  • image : c’est la représentation en mémoire de l’image de la pièce

  • bord : c’est une liste qui définit les 4 bords de la pièce

  • orientation : c’est l’orientation de la pièce, au début de la résolution, elle est nulle

source on GitHub

__str__()#

définition ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type PuzzleGirafePiece.

source on GitHub

bord_angle(angle, orientation=None)#

retourne le bord connaissant l’orientation de la pièce, le bord demandé est celui correspondant à :

  • 0 bord droit

  • 90 bord haut

  • 180 bord gauche

  • 270 bord bas

source on GitHub

load_image(pygame)#

charge l’image pour une simulation graphique

Paramètres:

pygame – module pygame

source on GitHub

voisin_possible(p, a)#

détermine si la pièce self peut être voisine avec la pièce p tournée de l’angle a

source on GitHub

ensae_teaching_cs.special.puzzle_girafe.display_puzzle_girafe(self, screen, petite=False, pygame=None)#

affiche les pièces sur l’écran, en plus petit pour celles qui ne sont pas encore placées

source on GitHub

ensae_teaching_cs.special.puzzle_girafe.display_puzzle_girafe_piece(self, screen, position, pygame)#

affiche la pièce en tenant compte de sa position et de son orientation

source on GitHub

ensae_teaching_cs.special.puzzle_girafe.pygame_simulation(pygame, first_click=False, folder=None, size=(750, 750), fLOG=<function fLOG>, delay=200, flags=0)#

Simulation graphique. Illuste la résolution du puzzle

Paramètres:
  • pygame – module pygame

  • first_click – attend la pression d’un clic de souris avant de commencer

  • folder – répertoire où stocker les images de la simulation

  • size – taille de l’écran

  • delay – delay between two tries

  • flags – see pygame.display.set_mode

  • fLOG – logging function

Renvoie:

PuzzleGirafe

La simulation ressemble à ceci :

Pour lancer la simulation:

from ensae_teaching_cs.special.puzzle_girafe import pygame_simulation
import pygame
pygame_simulation(pygame)

Voir Résolution d’un puzzle.

source on GitHub