Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- with sequential_io;
- with text_io; use text_io;
- with p_esiut;
- package p_twistb is
- ------------------------------------------------------------------------------------------------
- -- EXPLICATIONS SUR LES CHOIX DE MODELISATION DES ELEMENTS DU JEU TWIST
- ------------------------------------------------------------------------------------------------
- -- PIECES :
- -- * Les couleurs des pièces ou des fiches sont définies par le type énuméré T_Coul
- -- * Chaque pièce est décrite par une structure (TR_Piece), composée de :
- -- - sa couleur (T_Coul)
- -- - une matrice 4x4 décrivant l'orientation de la pièce à un instant t : chaque case de
- -- la matrice est décrite par sa nature (type T_Nature) dont la valeur exprime si elle
- -- contient un élément plein, un élément troué ou rien
- -- - un booléen iniquant si la pièce est placée sur la grille
- -- * les 8 pièces sont décrites dans un fichier binaire de TR_Piece("fpieces")
- -- * Une pièce est numérotée (cf. T_NumPiece)
- -- * Les pièces sont enregistrées dans un vecteur de TR_Piece, indicé par les numéros de pièces
- -- DEFIS :
- -- * Les défis sont décrits dans un fichier texte organisé en lignes ("defis.txt")
- -- GRILLE :
- -- * La grille de jeu est définie par un tableau de 4 lignes et 8 colonnes dont les éléments
- -- sont des structures composées d'un numéro de pièce et d'une couleur de fiche
- -- TRANSFORMATIONS GEOMETRIQUES :
- -- * Les transformations applicables à une pièce sont décrites par le type énuméré T_Transfo
- ------------------------------------------------------------------------------------------------
- -- MODELISATION DES ELEMENTS DU JEU TWIST
- ------------------------------------------------------------------------------------------------
- -- couleur d'une pièce ou d'une fiche (noir n'est pas une couleur de pièce ou de fiche)
- type T_Coul is (noir, rouge, vert, jaune, bleu);
- package p_coul_io is new enumeration_io(T_Coul);use p_coul_io;
- -- nature d'une case de la matrice où sont placés les éléments d'une pièce
- type T_nature is (plein, troue, vide);
- -- matrice 4x4 décrivant l'emplacement des différents éléments d'une pièce
- type TV_Matrice is array (1..4,1..4) of T_Nature;
- -- pièce
- type TR_Piece is record
- coul : T_Coul range rouge..bleu;
- mat : TV_Matrice;
- place : boolean;-- vrai si la pièce est placée sur la grille
- end record;
- type TV_Mat_pos is array(1..4) of boolean;
- -- instanciation de sequential_io pour le fichier définissant les pièces
- package p_piece_io is new sequential_io(TR_Piece); use p_piece_io;
- package p_int_io is new text_io.integer_io(integer);use p_int_io;
- -- numéro des pièces
- subtype T_NumPiece is integer range 0..8;
- -- type pour vecteur des 8 pièces
- type TV_Piece is array (1..8) of TR_Piece;
- -- dimensions de la grille de jeu
- subtype T_Col is character range 'A'..'H';
- subtype T_Lig is integer range 1..4;
- -- case de la grille
- type TR_Case is record
- piece : T_NumPiece ; -- si num = 0, pas de pièce
- fiche : T_coul ; -- si coul = noir, pas de fiche
- end record;
- -- type pour la grille de jeu (vecteur de case à 2 dimensions)
- type TV_Grille is array(T_lig, T_col) of TR_case;
- -- transformations : aucune, retournement horizontal/vertical, rotation 90° droite/ 90° gauche
- type T_Transfo is (sansT, reth, retv, rotg, rotd);
- procedure InitGrille(G : out TV_Grille) ;
- --{} => {toutes les cases de la grille V sont vides (ni pièce, ni fiche)}
- procedure InitJeu(f : in out text_io.file_type; numdefi : in positive; G : out TV_Grille) ;
- --{f ouvert} => {toutes les cases de la grille G sont initialisées en prenant en compte
- procedure CreeVectPiece (f : in out p_piece_io.file_type; VP : out TV_Piece);
- --{f ouvert} => {VP contient les pièces du jeu initialisées à partir de f}
- ----------------------------------------------
- -- Positionnement des pièces sur la grille
- ----------------------------------------------
- procedure init_TV_Mat(Col,Lig : out TV_Mat_pos);
- -- déterminer le nombre de lignes et de colonnes non vides de une matrice de pièce
- procedure dimensions(M : in TV_Matrice; nblig, nbcol : out positive) ;
- --{} => {nblig et nbcol indiquent le nombre de lignes et de colonnes utiles dans la matrice M}
- procedure init_mat(M : out TV_Matrice);
- -- appliquer une transformation géométrique à une pièce
- procedure Trans_H(VP : in out TV_Piece; nump : in T_NumPiece);
- --{} => {Transformation de la matrice horizontalement}
- procedure Rot_D(VP : in out TV_Piece; nump : in T_NumPiece);
- --{} => {Rotation de la matrice de VP(nump) a droite}
- procedure AppliquerTransfo(VP : in out TV_Piece; nump : in T_NumPiece; tr : in T_Transfo);
- --{} => {la matrice de la pièce nump a été transformée suite à application de tr}
- function Addchar(char : in T_Col; int : in integer)return character ;
- -- enregistrer le placement d'une pièce dans la grille de jeu
- procedure Placer (G : in out TV_Grille; VP : in out TV_Piece; nump : in T_NumPiece;
- lg : in T_Lig; col : in T_Col; possible : out boolean);
- --{(lg,col) = coordonnées de la grille où placer le coin haut gauche de la pièce nump}
- -- => {possible = faux si le placement est impossible;
- -- possible = vrai si le placement est possible, G et VP ont été mis à jour}
- -- enregistrer le retrait d'une pièce de la grille de jeu
- procedure Retirer(G : in out TV_Grille; VP : in out TV_Piece; nump : in T_NumPiece);
- --{nump = numéro de la pièce à retirer de la grille G} => {G et VP ont été mis à jour}
- ----------------------------------------------
- -- Gestion de la fin d'une partie
- ----------------------------------------------
- function PartieGagne (VP : in TV_Piece) return boolean;
- --{} => {résultat = vrai si tous les éléments de VP ont été placés}
- procedure Saisir_Piece(nump : out T_NumPiece);
- --{} => {Nump = le numeros valide d'une piece}
- end p_twistb;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement