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
|
public class CreationGrille extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
// ça je touche pas, je ne sais pas tout ce que tu cherches à faire, et tu
// verras les erreurs dedans plus tard (j'en vois 2 au moins)
GenerateurCarte generateurCarte = new GenerateurCarte();// mon generateur de
// carte qui va me
// permettre de
// generer la carte
JoueurHumain joueurHumain = new JoueurHumain("joueur1");
JoueurHumain joueurHumain2 = new JoueurHumain("joueur2");
ArrayList<ModelJoueur> joueurs = new ArrayList<ModelJoueur>();
HashMap<TypesTerrains, Image> images = new HashMap<TypesTerrains,Image>();
TypesTerrains grilleType[][] = new TypesTerrains[5][5];
// je sais pas ou tu appelles initialisation, mais il pourrait être appelé
// dans le constructeur
public CreationGrille(GrilleJeu grilleJeu) {
int xMax = grilleJeu.getAbcisseMax();
int yMax = grilleJeu.getOrdonneeMax();
images.put(TypesTerrains.MER, lireImage("images/bleu.jpg"));
images.put(TypesTerrains.PLAINE,lireImage("images/vert.jpg"));
grilleType = new TypesTerrains[xMax][yMax];
for (int i = 0; i < xMax; i++) {
for (int j = 0; j < yMax; j++) {
grilleType[i][j] = grilleJeu.getGrille()[i][j].getTerrain().getTerrainsJeu();
}
}
}
public void initialisation(GrilleJeu grilleJeu) {
}
// jusque là j'ai pas touché
// maintenant pour dessiner dans un panel, il faut au moins redéfinir paint
// :
public void paint(Graphics g,GrilleJeu grilleJeu) {
super.paint(g);
// et appeler le code qui dessiner ce qu'on veut...
grilleGraphique(g, grilleJeu);
}
private Image lireImage(String string) {
try {
return ImageIO.read(new File(string));
} catch (IOException e1) {
e1.printStackTrace();
return null;
}
}
public void grilleGraphique(Graphics g, GrilleJeu grilleJeu) {
CaseTerrain[][] caseTerrains = grilleJeu.getGrille();
int width = getWidth();
int height = getHeight();
int largeur = width / grilleJeu.getAbcisseMax();
int hauteur = height / grilleJeu.getOrdonneeMax();
// la y'a un truc bizarre : les abscisses c'est en x, et les ordonnées
// en y d'habitudes, mais bon je touche pas, peut être que c'est inversé
// dans grille.
for (int i = 0; i < grilleJeu.getAbcisseMax(); i++) {
for (int j = 0; j < grilleJeu.getOrdonneeMax(); j++) {
int x = j * largeur;
int y = i * hauteur;
//caseGraphique(g, caseTerrains, i, j, largeur, hauteur);
g.drawImage(images.get(grilleType[i][j]), x,
y, largeur, hauteur, this);
}
}
g.setColor(Color.BLACK); // par exemple pour dessiner la grille en blanc
for (int i = 0; i <= width; i += largeur) {
g.drawLine(i, 0, i, height);
}
for (int i = 0; i <= height; i+=hauteur) {
g.drawLine(0, i, width, i);
}
}
/*private void caseGraphique(Graphics g, CaseTerrain[][] caseTerrains, int i,
int j, int largeur, int hauteur) {
int x = j * largeur;
int y = i * hauteur;
* pour les images : aller dans la classe TypeGraphique et ajouter au
* case corespondant image = 'image coresponant au type';
g.drawImage(images.get(grilleType[i][j]), x,
y, largeur, hauteur, this);
}*/
// en ensuite vient l'aspect clic (on pourrait faire mieux, mais ça va te
// suffire)
public void addImageClicker(final ImageClicker imageClicker, final GrilleJeu grilleJeu) {
// en encapsule le faux listener dans le vrai listener de souris (ici un
// MouseAdapter, une implémentation de MouseListener qui ne t'oblige pas
// à implémenter toutes ses méthodes (parce qu'elles le sont déjà)
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// comme je l'ai dit, on calcule la hauteur et la largeur de la
// m^me manière qu'on la fait pour dessiner
int width = getWidth();
int height = getHeight();
int largeur = width / grilleJeu.getAbcisseMax();
int hauteur = height / grilleJeu.getOrdonneeMax();
// on détermine la colonne et la ligne dans la grille
int colonne = e.getX() / largeur;
int ligne = e.getY() / hauteur;
// on transmet les informations au faux listener, de manière à
// ce qu'on puisse réagir avec quand on l'utilise
imageClicker.click(grilleJeu.getGrille()[colonne][ligne]);
imageClicker.click(grilleJeu, colonne, ligne);
}
});
}
public static abstract class ImageClicker {
public ImageClicker() {
}
// tu n'est pas obligé de mettre les 2, la première peux suffire à tout
// faire
// la seconde peut simplifier certains traitements qui ne concernent que
// la case seule
// si tu ne mets qu'une seule méthode, au lieu d'une classe abstraite,
// ImageClicker peut être une interface
public void click(GrilleJeu source, int colonne, int ligne) {
}
public void click(CaseTerrain caseTerrain) {
}
}
} |
Partager