module special.puzzle_2
#
Short summary#
module ensae_teaching_cs.special.puzzle_2
Fonctions, classes pour résoudre un puzzle à 8 pièces disposé de façon non conventionnelle. Voir Résolution d’un autre puzzle.
Classes#
class |
truncated documentation |
---|---|
Définition d’une classe puzzle, elle contient simplement une liste de 9 pièces dont les positions sont: |
|
Définition d’un bord ou côté d’une pièce, il possède deux couleurs. |
|
Définition d’une pièce du puzzle, celle-ci inclut : |
Functions#
function |
truncated documentation |
---|---|
Affiche les pièces sur l’écran, en plus petit pour celles qui ne sont pas encore placées. |
|
Affiche la pièce en tenant compte de sa position et de son orientation. |
|
Simulation graphique. Illuste la résolution du puzzle |
Methods#
method |
truncated documentation |
---|---|
On définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir … |
|
On définit la pièce: |
|
Ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type |
|
Cette méthode est appelée lorsqu’on exécute l’instruction print avec un objet de type |
|
Définition ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type |
|
Retourne l’ensemble des angles possibles pour une pièce donnée. |
|
Retourne le bord connaissant l’orientation de la pièce, le bord demandé est celui correspondant à : |
|
Dit si deux bords sont compatibles, ils ont les mêmes couleurs mais inversées. |
|
Retourne les positions voisins de la position i. Retourne toujours quatre voisins, 0 si la case est hors-jeu. … |
|
Charge l’image pour une simulation graphique. |
|
Charge les images pour une simulation graphique. |
|
Retourne la prochaine pièce à placer sur le puzzle, dans un premier temps, on peut prend la première qui vient, … |
|
Retourne le nombre de places vides. |
|
Recherche la piece associée à la position pi. |
|
Retourne en fonction de la position (1 à 8) de la pièce sa position sur l’écran, soit deux coordonnées. |
|
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, … |
|
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 à 8 pièces disposé de façon non conventionnelle. Voir Résolution d’un autre puzzle.
- class ensae_teaching_cs.special.puzzle_2.Puzzle2#
Bases :
object
Définition d’une classe puzzle, elle contient simplement une liste de 9 pièces dont les positions sont:
5 6 1 2 4 3 7 8
et les orientations choisies dans l’ensemble
{ 0, 90, 180, 270 }
Voir Résolution d’un autre puzzle.
On définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir :
8 images appelées
piece21.png
, …,piece28.png
un fichier
definition_puzzle_girafe.txt
contenant la définition de chacun des 4 bords de chacune des 9 pièces :
GBYR BRYG BGYR YRGB YBRG BGYR BYGR RYBG
- __init__()#
On définit le puzzle à partir des informations contenues dans le répertoire data de ce module qui doit contenir :
8 images appelées
piece21.png
, …,piece28.png
un fichier
definition_puzzle_girafe.txt
contenant la définition de chacun des 4 bords de chacune des 9 pièces :
GBYR BRYG BGYR YRGB YBRG BGYR BYGR RYBG
- __str__()#
Ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type
Puzzle2
.
- angle_possible(p, display=False)#
Retourne l’ensemble des angles possibles pour une pièce donnée.
- ensemble_voisin(i)#
Retourne les positions voisins de la position i. Retourne toujours quatre voisins, 0 si la case est hors-jeu.
5 6 1 2 4 3 7 8
- ::
1
- 0 3
2
- load_images(pygame)#
Charge les images pour une simulation graphique.
- Paramètres:
pygame – module pygame
- 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.
- nb_place()#
Retourne le nombre de places vides.
- piece_position(pi)#
Recherche la piece associée à la position pi.
- pixel(position)#
Retourne en fonction de la position (1 à 8) de la pièce sa position sur l’écran, soit deux coordonnées.
- Renvoie:
tuple(x,y)
5 6 1 2 4 3 7 8
- 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.
- voisin_possible(piece, p, a)#
Détermine si la pièce self peut être voisine avec la pièce p tournée de l’angle a.
- class ensae_teaching_cs.special.puzzle_2.Puzzle2Bord(definition)#
Bases :
object
Définition d’un bord ou côté d’une pièce, il possède deux couleurs.
- Paramètres:
definition – chaîne de caractères
definition est une chaîne de 2 caractères qui définit un bord, exemple :
RG
for rouge vert (red, green)
Les quatre couleurs sont R (red, rouge), Y (yellow, jaune), G (green, vert), B (blue, bleu).
- __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 :
RG
for rouge vert (red, green)
Les quatre couleurs sont R (red, rouge), Y (yellow, jaune), G (green, vert), B (blue, bleu).
- __str__()#
Cette méthode est appelée lorsqu’on exécute l’instruction print avec un objet de type
Puzzle2Bord
.
- compatible(bord)#
Dit si deux bords sont compatibles, ils ont les mêmes couleurs mais inversées.
- class ensae_teaching_cs.special.puzzle_2.Puzzle2Piece(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
On définit la pièce:
- Paramètres:
name – nom de l’image représentant la pièce
definition – chaîne de 4 caractères indiquant les quatre couleurs au quatre angles
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
A 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
- __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 4 caractères indiquant les quatre couleurs au quatre angles
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
A 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
- __str__()#
Définition ce qu’on doit afficher lorsqu’on exécute l’instruction print avec un objet de type
Puzzle2Piece
.
- 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
- ensae_teaching_cs.special.puzzle_2.display_puzzle_2(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.
- ensae_teaching_cs.special.puzzle_2.display_puzzle_2_piece(self, screen, position, pygame)#
Affiche la pièce en tenant compte de sa position et de son orientation.
- ensae_teaching_cs.special.puzzle_2.pygame_simulation(pygame, first_click=False, folder=None, size=(700, 700), 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:
La simulation ressemble à ceci :
Pour lancer la simulation :
from ensae_teaching_cs.special.puzzle_2 import pygame_simulation import pygame pygame_simulation(pygame)
Voir Résolution d’un puzzle.