Bonsoir,

Je suis actuellement en train de créer un programme pour un projet en terminale, mais j'obtient l'erreur du titre.
Pour expliquer la situation, j'ai l'interface suivante:
Nom : Colonisation interface finale.jpg
Affichages : 174
Taille : 169,5 Ko
C'est un jeu dont le principe est le suivant: Le joueur commence à la case tout en haut à gauche, dans l'image la case bleue donc; lorsque que le joueur clique sur un bouton d'une certaine couleur, alors, toutes les cases situées de façon adjacente à la case du joueur qui seront de cette même couleur deviendront des cases "conquises".
J'utilise la méthode ci-dessous afin de récupérer la couleur d'un pixel de la case situé au dessus de la case du joueur:
(xph1 = coordonnée x de la case du joueur/xph2 coordonnée y de la case du joueur)
(xh1= coordonnée x de la case au dessus de celle du joueur/xh1= coordonnée y de la case au dessus de celle du joueur)
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
    public static void pColorh(BufferedImage image, Graphics g, int xph1, int xph2) {
  	     int xh1=xph1, xh2=xph2-25;
  	     System.out.println("xph1  "+xph1);
  	     System.out.println("xph2  "+xph2);
  	     System.out.println("xh1  "+xh1);
  	     System.out.println("xh2  "+xh2);
 
		 if (xh2 >=0) {
			 Color cph = new Color(image.getRGB(xh1, xh2));
			 int pr3=cph.getRed();
			 int pg3=cph.getGreen();
			 int pb3=cph.getBlue();
			 int cph1 = new Color(pr3,pg3,pb3).getRGB();
 
			 while (cph1 ==cppd) {
				 Point Ph = new Point(xh1,xh2);
				 Color cphh = new Color(image.getRGB(xh1,xh2));
				 int pr33=cphh.getRed();
				 int pg33=cphh.getGreen();
				 int pb33=cphh.getBlue();
				 int cph11 = new Color(pr33,pg33,pb33).getRGB();
 
				 if (cph11 != cppd) {
					 break;
				 }
			 		g.setColor(new Color(pr3,pg3,pb3));
			 		g.fillRect(xph1, xph2, 24, 24);
			 		g.fillRect(xh1, xh2, 24, 24);
					cases.addPoints(Ph);
			 		xph2-=25;
			 		xh2-=25;
			 		cph1=cph11;
			 }
		 }
   }
Ainsi si la couleur de la case du haut est la même que celle du joueur, alors cette nouvelle case sera conquise. Ce code est répété en boucle tant que les cases suivantes en haut ont la même couleur.
Dans cette méthode, j'ajoute les coordonnées du point de la nouvelle case conquise à une liste de point à l'aide de la méthode "addPoints".
J'utilise la méthode détaillée ci-dessus dans cette autre méthode:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
    public static void pColor(BufferedImage image, Graphics g, Graphics2D g2) {
 
	if (cases.getPoints().size() == 0) {
		pColorh(image,g,1,1);
	} else {
        for(int i=0; i<cases.getPoints().size(); i++) {
        	pColorh(image,g,cases.getPoints().get(i).x,cases.getPoints().get(i).y); 
        }
	}
Seulement, lorsque la méthode "pColorh" est utilisée, le code bloque à la ligne:
" Color cphh = new Color(image.getRGB(xh1,xh2));"

Il me semble que le message d'erreur s'affiche quand une coordonnée est négative, seulement j'ai ajouté "if (xh2 >=0) " qui normalement n'effectuait pas le code lorsque la coordonnée est négative.
J'ai affiché dans la console les valeurs des variables qui sont utilisés dans la méthode et dans un de mes essais, j'ai obtenu ceci:
"xph1 =1
xph2 =51
xh1 =1
xh2 =26"
Ce qui me semble cohérent, or j'obtient le message suivant au complet:
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
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
	at sun.awt.image.IntegerInterleavedRaster.getDataElements(Unknown Source)
	at java.awt.image.BufferedImage.getRGB(Unknown Source)
	at ListenerVertC.pColorh(ListenerVertC.java:162)
	at ListenerVertC.pColor(ListenerVertC.java:240)
	at ListenerVertC.<init>(ListenerVertC.java:28)
	at Fenetre$ListenerVert.actionPerformed(Fenetre.java:67)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$500(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.awt.EventQueue$4.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Merci d'avance.
(Désolé pour le pavé, je pense avoir besoin d'expliquer en détail)