Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. with sequential_io;
  2. with text_io; use text_io;
  3. with p_esiut;
  4. package p_twistb is
  5. ------------------------------------------------------------------------------------------------
  6. -- EXPLICATIONS SUR LES CHOIX DE MODELISATION DES ELEMENTS DU JEU TWIST
  7. ------------------------------------------------------------------------------------------------
  8. -- PIECES :
  9. -- * Les couleurs des pièces ou des fiches sont définies par le type énuméré T_Coul
  10. -- * Chaque pièce est décrite par une structure (TR_Piece), composée de :
  11. -- - sa couleur (T_Coul)
  12. -- - une matrice 4x4 décrivant l'orientation de la pièce à un instant t : chaque case de
  13. -- la matrice est décrite par sa nature (type T_Nature) dont la valeur exprime si elle
  14. -- contient un élément plein, un élément troué ou rien
  15. -- - un booléen iniquant si la pièce est placée sur la grille
  16. -- * les 8 pièces sont décrites dans un fichier binaire de TR_Piece("fpieces")
  17. -- * Une pièce est numérotée (cf. T_NumPiece)
  18. -- * Les pièces sont enregistrées dans un vecteur de TR_Piece, indicé par les numéros de pièces
  19. -- DEFIS :
  20. -- * Les défis sont décrits dans un fichier texte organisé en lignes ("defis.txt")
  21. -- GRILLE :
  22. -- * La grille de jeu est définie par un tableau de 4 lignes et 8 colonnes dont les éléments
  23. -- sont des structures composées d'un numéro de pièce et d'une couleur de fiche
  24. -- TRANSFORMATIONS GEOMETRIQUES :
  25. -- * Les transformations applicables à une pièce sont décrites par le type énuméré T_Transfo
  26. ------------------------------------------------------------------------------------------------
  27. -- MODELISATION DES ELEMENTS DU JEU TWIST
  28. ------------------------------------------------------------------------------------------------
  29. -- couleur d'une pièce ou d'une fiche (noir n'est pas une couleur de pièce ou de fiche)
  30. type T_Coul is (noir, rouge, vert, jaune, bleu);
  31.  
  32. package p_coul_io is new enumeration_io(T_Coul);use p_coul_io;
  33.  
  34. -- nature d'une case de la matrice où sont placés les éléments d'une pièce
  35. type T_nature is (plein, troue, vide);
  36.  
  37. -- matrice 4x4 décrivant l'emplacement des différents éléments d'une pièce
  38. type TV_Matrice is array (1..4,1..4) of T_Nature;
  39.  
  40. -- pièce
  41. type TR_Piece is record
  42. coul : T_Coul range rouge..bleu;
  43. mat : TV_Matrice;
  44. place : boolean;-- vrai si la pièce est placée sur la grille
  45. end record;
  46.  
  47. type TV_Mat_pos is array(1..4) of boolean;
  48.  
  49. -- instanciation de sequential_io pour le fichier définissant les pièces
  50. package p_piece_io is new sequential_io(TR_Piece); use p_piece_io;
  51.  
  52. package p_int_io is new text_io.integer_io(integer);use p_int_io;
  53.  
  54. -- numéro des pièces
  55. subtype T_NumPiece is integer range 0..8;
  56.  
  57. -- type pour vecteur des 8 pièces
  58. type TV_Piece is array (1..8) of TR_Piece;
  59.  
  60. -- dimensions de la grille de jeu
  61. subtype T_Col is character range 'A'..'H';
  62. subtype T_Lig is integer range 1..4;
  63.  
  64. -- case de la grille
  65. type TR_Case is record
  66. piece : T_NumPiece ; -- si num = 0, pas de pièce
  67. fiche : T_coul ; -- si coul = noir, pas de fiche
  68. end record;
  69.  
  70. -- type pour la grille de jeu (vecteur de case à 2 dimensions)
  71. type TV_Grille is array(T_lig, T_col) of TR_case;
  72.  
  73. -- transformations : aucune, retournement horizontal/vertical, rotation 90° droite/ 90° gauche
  74. type T_Transfo is (sansT, reth, retv, rotg, rotd);
  75.  
  76. procedure InitGrille(G : out TV_Grille) ;
  77. --{} => {toutes les cases de la grille V sont vides (ni pièce, ni fiche)}
  78.  
  79. procedure InitJeu(f : in out text_io.file_type; numdefi : in positive; G : out TV_Grille) ;
  80. --{f ouvert} => {toutes les cases de la grille G sont initialisées en prenant en compte
  81. procedure CreeVectPiece (f : in out p_piece_io.file_type; VP : out TV_Piece);
  82. --{f ouvert} => {VP contient les pièces du jeu initialisées à partir de f}
  83.  
  84. ----------------------------------------------
  85. -- Positionnement des pièces sur la grille
  86. ----------------------------------------------
  87. procedure init_TV_Mat(Col,Lig : out TV_Mat_pos);
  88. -- déterminer le nombre de lignes et de colonnes non vides de une matrice de pièce
  89. procedure dimensions(M : in TV_Matrice; nblig, nbcol : out positive) ;
  90. --{} => {nblig et nbcol indiquent le nombre de lignes et de colonnes utiles dans la matrice M}
  91.  
  92.  
  93.  
  94. procedure init_mat(M : out TV_Matrice);
  95. -- appliquer une transformation géométrique à une pièce
  96.  
  97. procedure Trans_H(VP : in out TV_Piece; nump : in T_NumPiece);
  98. --{} => {Transformation de la matrice horizontalement}
  99.  
  100. procedure Rot_D(VP : in out TV_Piece; nump : in T_NumPiece);
  101. --{} => {Rotation de la matrice de VP(nump) a droite}
  102.  
  103.  
  104. procedure AppliquerTransfo(VP : in out TV_Piece; nump : in T_NumPiece; tr : in T_Transfo);
  105. --{} => {la matrice de la pièce nump a été transformée suite à application de tr}
  106.  
  107.  
  108.  
  109. function Addchar(char : in T_Col; int : in integer)return character ;
  110.  
  111. -- enregistrer le placement d'une pièce dans la grille de jeu
  112. procedure Placer (G : in out TV_Grille; VP : in out TV_Piece; nump : in T_NumPiece;
  113. lg : in T_Lig; col : in T_Col; possible : out boolean);
  114. --{(lg,col) = coordonnées de la grille où placer le coin haut gauche de la pièce nump}
  115. -- => {possible = faux si le placement est impossible;
  116. -- possible = vrai si le placement est possible, G et VP ont été mis à jour}
  117. -- enregistrer le retrait d'une pièce de la grille de jeu
  118. procedure Retirer(G : in out TV_Grille; VP : in out TV_Piece; nump : in T_NumPiece);
  119. --{nump = numéro de la pièce à retirer de la grille G} => {G et VP ont été mis à jour}
  120. ----------------------------------------------
  121. -- Gestion de la fin d'une partie
  122. ----------------------------------------------
  123. function PartieGagne (VP : in TV_Piece) return boolean;
  124. --{} => {résultat = vrai si tous les éléments de VP ont été placés}
  125.  
  126. procedure Saisir_Piece(nump : out T_NumPiece);
  127. --{} => {Nump = le numeros valide d'une piece}
  128. end p_twistb;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement