1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
|
public static void main(String[] args) {
...
int nRangees = nColonnes = 4;
int grosseurTableau = nRangees*nColonnes/2;
Carte [] tabCarte = genererCarte.genereCartes(grosseurTableau);
PanneauDeCartes panneau;
panneau = new PanneauDeCartes(nRangees, nColonnes, tabCarte,
delaiAffichageInitial, delaiAffichageMauvaisePaire);
boite.add(panneau);
...
}
public abstract class GenerateurDeCartes { ... }
public class GenerateurDeCartesCouleur extends GenerateurDeCartes {
/**Propriété private de type tableau de Color qui représente les couleurs disponibles
*/
private Color[] couleur;
private Carte [] carteTabRetour;
private Carte [] carteTab;
/**constructeur prenant en paramètre le nom du thème,
* et un tableau de Color contenant tous les couleurs possibles pour ce thème.
*/
public GenerateurDeCartesCouleur(String nom, Color [] couleur) {
super(nom);
this.couleur = new Color[couleur.length];
for(int i = 0; i < couleur.length; ++i){
this.couleur[i] = couleur[i];
}
}
/**méthode qui retournera une référence de type Carte
* à une carte choisie aléatoirement parmi celles du thème
*/
@Override
public Carte genereUneCarte() {
Random random = new Random();
int n = couleur.length;
Color c = couleur[random.nextInt(n)];
Carte uneCarte = new CarteCouleur(true, c);
return uneCarte;
}
/**méthode qui générera un tableau de n cartes selon le thème,
* si possible toutes différentes, en faisant des appels répétés à genereUneCarte.
*/
@Override
public Carte[] genereCartes(int n) {
//n = moitié du tableau
carteTab = new Carte[n];
if(n <= couleur.length){
for(int i =0; i < n; ++i){
carteTab[i] = genereUneCarte();
for(int j = 0; j < i; ++j){
if (carteTab[i].rectoIdentique(carteTab[j])){
--i;
break;
}
}
}
}
else{
for(int i =0; i < n; ++i){
carteTab[i] = genereUneCarte();
}
}
carteTabRetour = new Carte[2*n];
completerPanneau();
return carteTabRetour;
} // end genereCartes
protected void completerPanneau() {
int count = carteTab.length;
carteTabRetour = new Carte[count*2];
Carte[] temp = new Carte[count*2];
for (int i=0;i<count;i++) temp[i]=carteTab[i];
for (int i=count;i<count*2;i++)temp[i]=carteTab[i-count];
count = count*2;
int change = carteTabRetour.length;
do{
Random random = new Random();
int randomInt = random.nextInt(count);
if (temp[randomInt]!=null) {
carteTabRetour[randomInt]=temp[randomInt];
temp[randomInt]=null;
change--;
}
}while (change>0);
}
}
public class PanneauDeCartes extends JPanel implements MouseListener{
... attribut défini
/**constructeur prenant en paramètre le nombre de rangées, le nombre de colonnes, un tableau de Carte et
* le delai d'affichage initial ou toutes les cartes du panneau sont montrées pendant un temps delaiAffichageInitial avant d'être cachées
* et le delai d'affichage mauvaise paire quand les deux cartes consécutives ainsi dévoilées (la première et la deuxième) sont différentes,
* alors elles demeurent montrées pendant un temps delaiAffichageMauvaisePaire au cours duquel les clicks sur les cartes ne font rien.
*/
public PanneauDeCartes(int nRangees, int nColonnes, Carte[] cartes,
int delaiAffichageInitial, int delaiAffichageMauvaisePaire){
GridLayout layout = new GridLayout(nRangees, nColonnes);
layout.setHgap(10);
layout.setVgap(10);
setLayout(layout);
/**ajouter MouseListener à chaque carte et ajouter les cartes sur le panneau
*/
for(int i = 0; i < cartes.length; ++i){
cartes[i].addMouseListener(this);
add(cartes[i]);
}
retourneinitial(delaiAffichageInitial, cartes);
delai = delaiAffichageMauvaisePaire;
nbreCarte = cartes.length/2;
}
... @Override pour lesmouseAction..
/**Méthode pour cacher toutes les cartes du panneau qui sont montrées pendant un temps delai Affichage Initial après ce delai
* @param delaiInitial le delai d'affichage initial ou toutes les cartes du panneau sont montrées pendant un temps delaiAffichageInitial avant d'être cachées
*/
public void retourneinitial(int delaiInitial , Carte[] cartes){
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("panneaulength dans timer " + cartes.length);
for(int i = 0; i < cartes.length; ++i){
cartes[i].cache();
}
timer.stop();
}
};
timer = new Timer(delaiInitial,al);
timer.start();
timer.setRepeats(false);
}
/**Méthode pour retourner les 2 cartes différentes qui sont montrées pendant un temps delai Affichage mauvaise paire après ce delai
*/
public void retourneMauvaisePaire(int delai){
ActionListener al = new ActionListener() {
public void actionPerformed(ActionEvent e) {
carteClicquee.retourne();
premierCarteClicquee.retourne();
premierCarteClicquee = null;
enabled = true;
timer.stop();
}
};
timer = new Timer(delai,al);
timer.start();
timer.setRepeats(false);
}//end mauvaise paire
}//end PanneauDeCartes |
Partager