Bonjour,

j'ai un projet de fac et on est censé faire un genre de "plague inversé", on a un virus qui se répend et le joueur va devoir essayer de le stopper en gérant le personnel médical, le vaccin etc (un seriousgame un peu)

On nous a donné cette interface graphique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
package display;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.lang.IllegalArgumentException;
import java.util.ArrayList;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
 
/** Fenêtre pour l'affichage d'objets de type Affichable et l'interaction souris avec ces objets. L'affichage peut se faire sur un fond coloré ou sur une image. */
public class GUIEpidemie extends JFrame implements MouseListener{
 
	private int offset = 12;
	private Graphic p;
	private Color fond = null;
	private BufferedImage img = null;
	private ArrayList<Affichable> elements;
	private ArrayList<MouseEvent> clics;
	private JTextField jtf;
 
	/** Crée une JFrame permettant d'afficher sur la couleur de fond spécifiée des Affichable ayant des coordonnées dans [0..largeur,0..hauteur]. */
	public GUIEpidemie(String titre, int largeur, int hauteur, Color fond){
		super(titre);
		this.elements = new ArrayList<Affichable>();
		this.clics = new ArrayList<MouseEvent>();
		this.fond = fond;
		this.setLayout(new BorderLayout());
		this.p = new Graphic();
		this.p.addMouseListener(this);
		this.getContentPane().add(this.p,BorderLayout.CENTER);
		jtf = new JTextField(20);
		this.getContentPane().add(jtf,BorderLayout.SOUTH);
		this.setSize(largeur,hauteur);
		this.setResizable(false);
		this.setLocation((java.awt.Toolkit.getDefaultToolkit().getScreenSize().width-this.getWidth())/2,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().height-this.getHeight())/2);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
 
	/** Crée une JFrame permettant d'afficher des Affichable sur l'image de fond spécifiée. 
          * @throws IOException si le fichier image spécifié n'existe pas ou n'est pas une image lisible. */
	public GUIEpidemie(String titre, String fichierImage) throws IOException{
		super(titre);
		this.elements = new ArrayList<Affichable>();
		this.clics = new ArrayList<MouseEvent>();
		this.fond = fond;
		this.img = ImageIO.read(new File(fichierImage));
		this.setLayout(new BorderLayout());
		this.p = new Graphic();
		this.p.addMouseListener(this);
		this.getContentPane().add(this.p,BorderLayout.CENTER);
		jtf = new JTextField(20);
		this.getContentPane().add(jtf,BorderLayout.SOUTH);
		this.setSize(img.getWidth(),img.getHeight());
		this.setResizable(false);
		this.setLocation((java.awt.Toolkit.getDefaultToolkit().getScreenSize().width-this.getWidth())/2,(java.awt.Toolkit.getDefaultToolkit().getScreenSize().height-this.getHeight())/2);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
 
	/** Ajoute un Affichable à l'interface et rafraichit l'affichage. */
	public void addAffichable(Affichable a){
		this.elements.add(a);
		this.p.repaint();
	}
 
	/** Retire un Affichable de l'interface et rafraichit l'affichage. */
	public boolean removeAffichable(Affichable a){
		if(this.elements.remove(a)){
			this.p.repaint();
			return true;
		}
		else return false;
	}
 
	public void mouseClicked(MouseEvent e){
		this.clics.add(e);
	}
 
	public void mouseEntered(MouseEvent e){}
 
	public void mouseExited(MouseEvent e){}
 
	public void mousePressed(MouseEvent e){}
 
	public void mouseReleased(MouseEvent e){}
 
	/** Retourne un MouseEvent correspondant au dernier clic de l'utilisateur, ou null s'il n'y a plus de clic à renvoyer. */
	public MouseEvent getClic(){
		if(this.clics.isEmpty()) return null;
		else return this.clics.remove(0);
	}
 
	private class Graphic extends JPanel{
		public void paint(Graphics gr){
			if(GUIEpidemie.this.fond != null){
				gr.setColor(GUIEpidemie.this.fond);
				gr.fillRect(0,0,this.getWidth(),this.getHeight());
			}
			if(GUIEpidemie.this.img != null){
				gr.drawImage(GUIEpidemie.this.img,0,0,this);
			}
			for(Affichable a:GUIEpidemie.this.elements){
				gr.setColor(a.getColor());
				((Graphics2D) gr).fill(a.getShape());
				gr.setColor(Color.BLACK);
				gr.setFont(gr.getFont().deriveFont(Font.BOLD));
				Point p = a.getStringPosition();
				String[] s = a.getString().split("\n");
				for(int i=0;i<s.length;i++) gr.drawString(s[i],p.x,p.y+(i+1)*GUIEpidemie.this.offset);
			}
		}
	}
 
	/** Affiche le message m dans une boite de dialogue. */
	public void displayMessage(String m){
		JOptionPane.showMessageDialog(this,m);
	}
 
	/** Affiche le texte s dans la zone de texte en bas de la fenêtre. */
	public void setBottomFieldText(String s){
		this.jtf.setText(s);
	}	
 
}
et Affichable.java qui va avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
package display;
 
public interface Affichable{
 
	public java.awt.Shape getShape();
	public java.awt.Color getColor();
	public String getString();
	public java.awt.Point getStringPosition();
}
donc j'ai mon main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
import display.*;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.IOException;
import java.lang.IllegalArgumentException;
import java.util.ArrayList;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.File;
 
public class projet {
 
    //@param args
 
    public static void main(String[] args){
        //création du tableau de vaccins :
        Affichable p;
        //Ville[] tableau = new Ville[6];
        //Vaccin[] lestock = new Vaccin [100];
 
        //random ensuite un chiffre, qui correspond à une ville, pour savoir comment seront distribués les stocks etc (il faut remplir la classe après)
 
        Ville villetest = new Ville()
        Color fond = new Color (0.0f, 0.0f, 0.0f);
         GUIEpidemie a = new GUIEpidemie("Titre", 180, 300, fond);
        //GUIEpidemie a = new GUIEpidemie ("teste", 640, 480, fond);
 
        try {
            GUIEpidemie b = new GUIEpidemie ("test2", "carte.jpg");
            a.addAffichable(p);
        } catch (IOException e) {
            System.out.println("ERROR");
        }
        //a.displayMessage(r);
 
        System.out.println("Lel");
    }
}
 
// DEBUT BOUCLE JEU
 
}
et par exemple j'aimerais faire apparaître des carrés qui symboliseront les villes, donc j'ai implémenté Affichable dans ma classe :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import display.*;
import java.awt.*;
 
public class Ville implements Affichable {
 
	String nom;
	int population;
	int x;
	int y;
	int taille;
	public Ville(String pNom, int pPopulation, int px, int py, int pTaille){
		this.nom = pNom;
		this.population = pPopulation;
		this.x = px;
		this.y = py;
		this.taille = pTaille;
	}
	public java.awt.Shape getShape(){
		Rectangle bounds = new Rectangle(0, 0, -1, -1);
		return bounds;
 
	}
	public java.awt.Color getColor(){
		Color couleur = new Color(0, 0, 255);
		return couleur;
	}
	public String getString(){
		return this.nom;
	}
	public java.awt.Point getStringPosition(){
		Point position = new Point (this.x, this.y);
		return position;
	}
 
	public void Afficher(){
 
	}
}
Sauf que voilà dans "Afficher()" je bloque je sais pas du tout comment m'y prendre?

je croisq u'il faut utiliser addAffichable() qui est dans GUIEpidemie.java (le 1er code là) mais ce qui me trouble c'est le fichier qu'il faut mettre en paramèe, il doit être de type "Affichable"

vous avez une idée de comment il faudrait que je fasse ma classe Afficher() pour qu'elle affiche un point sur la carte que j'affiche dans mon main ?