Bonjour à tous.

J'aurais besoin d'un petit coup de pouce. Pour mon cours de programmation, nous avons du créer un petit projet. Et j'ai décidé de créer un "Tron". Cependant, j'ai eu quelques problèmes que j'ai pu régler à l'aide d'un code trouvé sur internet. J'ai retravaillé dessus pour ameliorer certaines choses et ici, il est fini. Cependant, je galere encore pas mal sur la comprehension du code. Du coup, voici mes questions

- Pour le deplacement des joueurs, pourquoi doit-on mettre un moins ou un plus avant le égal ?(ex : centrey1-=moveAmount; )

- Pour les touches faisant déplacer les joueurs, pourquoi doit-on lui faire vérifier que c'est le sens inverse ? (ex: if (e.getKeyCode() == KeyEvent.VK_UP) {
if (currentDirection2 != 2){
currentDirection2 = 0;
}
}

- Dans la méthode "init" de la classe "core", a quoi servent les lignes de "w.setFont(new Font("Arial",Font.PLAIN,20));" à "w.setCursor(w.getToolkit().createCustomCursor(new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),"null")); " ?

- Globalement, j'ai énormément de mal avec la classe "screenManager"

- Quand je lance le jeu par le menu, les touches ne fonctionnent pas, mais quand je lance via une des classes joueur, il n'y as pas de problèmes. D'où vient le bug.

Alors voila, si quelqu'un pouvait m'aider sur ces points, ce serai vraiment tres sympa. Je vous laisse maintenant le code pour que vous puissiez y regarder.

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
 
import javax.swing.* ;
import java.awt.* ;
import java.awt.event.*;
 
public class Menu  extends JFrame implements ActionListener{
    private JFrame jfbase ;
    private JFrame jfnbplayeur ;
    private MenuJoueur mj;
 
    public Menu(){
        jfbase = new JFrame ("Menu du jeu");
 
        JPanel jp =new JPanel();
        jp.setBackground(Color.BLACK);
        jp.setPreferredSize(new Dimension (280,320));
        JButton jbstart = new JButton("Start");
        jbstart.addActionListener(this);
        jp.add(jbstart);
        JButton jbexit = new JButton("Exit");
        jbexit.addActionListener(this);
        jp.add(jbexit);
 
 
        jfbase.setContentPane(jp);//change le panneau de contenu
        jfbase.pack();//réglage de la taille par le contenu
        jfbase.setVisible(true);
    }
 
    public void actionPerformed(ActionEvent ae){
        JButton jb = (JButton)ae.getSource();
        if(jb.getText().equals("Start")){
            mj = new MenuJoueur();
            jfbase.dispose(); 
        }
        else if(jb.getText().equals("Exit")){
            System.exit(0);
        }
    }
}
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
 
import javax.swing.* ;
import java.awt.* ;
import java.awt.event.*;
 
public class MenuJoueur extends JFrame implements ActionListener{
    private JFrame jfbase ;
    private JFrame jfnbplayeur ;
    private Menu mn;
    private Joueur2 j2;
    private Joueur3 j3;
    private Joueur4 j4;
 
    public MenuJoueur(){
        jfnbplayeur = new JFrame ("Nombre de joueur");
 
        JPanel jp =new JPanel();
        jp.setPreferredSize(new Dimension (165,130));
        JButton jbdeux =new JButton("Deux Joueur");
        jbdeux.addActionListener(this);
        jp.add(jbdeux);
        JButton jbtrois =new JButton("Trois joueurs");
        jbtrois.addActionListener(this);
        jp.add(jbtrois);
        JButton jbquatre =new JButton("Quatre joueurs");
        jbquatre.addActionListener(this);
        jp.add(jbquatre);
        JButton jbannuler =new JButton("Annuler");
        jbannuler.addActionListener(this);
        jp.add(jbannuler);
 
        jfnbplayeur.setContentPane(jp);//change le panneau de contenu
        jfnbplayeur.pack();//réglage de la taille par le contenu
        jfnbplayeur.setVisible(true);
    }
 
    public void actionPerformed(ActionEvent ae){
        JButton jb = (JButton)ae.getSource();
        if(jb.getText().equals("Deux Joueur")){
            new Joueur2().run();
            jfbase.dispose();
        }
        else if(jb.getText().equals("Trois joueurs")){
            new Joueur3().run();
            jfbase.dispose();
        }
        else if(jb.getText().equals("Quatre joueurs")){
            new Joueur4().run();
            jfbase.dispose();
        }
        else if(jb.getText().equals("Annuler")){
            mn = new Menu() ;
            jfbase.dispose();
        }
    }
}
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
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
 
import java.util.ArrayList;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class Joueur2 extends Core implements KeyListener, ActionListener {
    //640*480
    // int centrex1 = 0;
    // int centrey1 = 240;
    // int centrex2 = 640;
    // int centrey2 = 240;
 
    //800*600
    //int centrex1 = 0;
    //int centrey1 = 300;
    //int centrex2 = 800;
    //int centrey2 = 300;
 
    //1280*1024
    // int centrex1 = 0;
    // int centrey1 = 510;
    // int centrex2 = 1280;
    // int centrey2 = 510;
 
    //1680*1050
    // int centrex1 = 0;
    // int centrey1 = 525;
    // int centrex2 = 1680;
    // int centrey2 = 525;
 
    //1920*1080
    int centrex1 = 0;
    int centrey1 = 540;
    int centrex2 = 1920;
    int centrey2 = 540;
 
    int currentDirection1 = 1; //va à droite
    int currentDirection2 = 3; //va à gauche
    int moveAmount = 5;
    ArrayList<Integer> pathx1 = new ArrayList();
    ArrayList<Integer> pathy1 = new ArrayList();
    ArrayList<Integer> pathx2 = new ArrayList();
    ArrayList<Integer> pathy2 = new ArrayList();
    private JFrame jffinpartie;
 
 
    public void init() {
        super.init();
 
        Window w = sm.getFullScreenWindow();
        w.addKeyListener(this);
    }
 
    public static void main(String[] args) {
        new Joueur2().run();
    }
 
    public void draw(Graphics2D g) {
        switch(currentDirection1){//deplacement J1
            case 0:
            if (centrey1>0){
                centrey1-=moveAmount;
            } else {
                centrey1 = sm.getHeight();
            }
            break;
            case 1:
            if (centrex1 < sm.getWidth()){
                centrex1+=moveAmount;
            } else {
                centrex1 = 0;
            }
            break;
            case 2:
            if (centrey1 < sm.getHeight()){
                centrey1+=moveAmount;
            } else {
                centrey1 = 0;
            }
            break;
            case 3:
            if (centrex1>0){
                centrex1-=moveAmount;
            } else {
                centrex1 = sm.getWidth();
            }
            break;
        }
        switch(currentDirection2){//deplacement J2
            case 0:
            if (centrey2>0){
                centrey2-=moveAmount;
            } else {
                centrey2 = sm.getHeight();
            }
            break;
            case 1:
            if (centrex2 < sm.getWidth()){
                centrex2+=moveAmount;
            } else {
                centrex2 = 0;
            }
            break;
            case 2:
            if (centrey2 < sm.getHeight()){
                centrey2+=moveAmount;
            } else {
                centrey2 = 0;
            }
            break;
            case 3:
            if (centrex2>0){
                centrex2=moveAmount;
            } else {
                centrex2 = sm.getWidth();
            }
            break;
        }
 
        if ((centrex1 == centrex2) && (centrey1 == centrey2) ){ //collision
                finPartie("Ex-aequo");
        }
 
        for (int x = 0;x<pathx1.size();x++){//verification condition victoire
            if (((centrex1 == pathx1.get(x)) && (centrey1 == pathy1.get(x))) //fin joueur1 (suicide)
            || ((centrex1 == pathx2.get(x)) && (centrey1 == pathy2.get(x)))) //fin joueur1 (se tue sur joueur2)
            {
                finPartie("victoire du joueur rouge");
            }
 
            if (((centrex2 == pathx2.get(x)) && (centrey2 == pathy2.get(x))) //fin joueur2 (suicide)
            || ((centrex2 == pathx1.get(x)) && (centrey2 == pathy1.get(x)))) //fin joueur2 (se tue sur joueur1)
            {
                finPartie("victoire du joueur bleu");
            }
        }
 
        pathx1.add(centrex1);
        pathy1.add(centrey1);
        pathx2.add(centrex2);
        pathy2.add(centrey2);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, sm.getWidth(), sm.getHeight());
        for (int x = 0;x<pathx1.size();x++){
            g.setColor(Color.blue);
            g.fillRect(pathx1.get(x), pathy1.get(x), 5, 5);
            g.setColor(Color.red);
            g.fillRect(pathx2.get(x), pathy2.get(x), 5, 5);
        }     
 
    }//fin draw
 
    public void finPartie(String s){//stoper partie
        this.stop();
        jffinpartie = new JFrame (s);
 
        JPanel jp =new JPanel();
        jp.setPreferredSize(new Dimension (400,70));
        JButton jbnewgame =new JButton("Nouvelle partie");
        jbnewgame.addActionListener(this);
        jp.add(jbnewgame);
        JButton jbendgame =new JButton("Menu");
        jbendgame.addActionListener(this);
        jp.add(jbendgame);
 
        jffinpartie.setContentPane(jp);//change le panneau de contenu
        jffinpartie.pack();//réglage de la taille par le contenu
        jffinpartie.setVisible(true);
 
    }
 
    public void actionPerformed(ActionEvent ae){
        JButton jb = (JButton)ae.getSource();
        if(jb.getText().equals("Nouvelle partie")){
            new Joueur2().run();
            jffinpartie.dispose();
        }
        else if(jb.getText().equals("Menu")){
            new Menu();
            jffinpartie.dispose();
        }
    }
 
    public void keyPressed(KeyEvent e) {//touche deplacement
                if (e.getKeyCode() == KeyEvent.VK_Z){
            if (currentDirection1 != 2){
                currentDirection1 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_S) {
            if (currentDirection1 != 0){
                currentDirection1 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_D) {
            if (currentDirection1 != 3){
                currentDirection1 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_Q) {
            if (currentDirection1 != 1){
                currentDirection1 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            if (currentDirection2 != 2){
                currentDirection2 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            if (currentDirection2 != 0){
                currentDirection2 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (currentDirection2 != 3){
                currentDirection2 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (currentDirection2 != 1){
                currentDirection2 = 3;
                }
        }
    }
 
    public void keyReleased(KeyEvent e) {
 
    }
 
    public void keyTyped(KeyEvent arg0) {
 
    }
}
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
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
 
import java.util.ArrayList;
import javax.swing.* ;
import java.awt.* ;
import java.awt.event.*;
 
public class Joueur3 extends Core implements KeyListener,ActionListener {
    //640*480
    // int centrex1 = 0;
    // int centrey1 = 240;
    // int centrex2 = 640;
    // int centrey2 = 240;
    // int centrex3 = 320;
    // int centrey3 = 0;
 
    //800*600
    //int centrex1 = 0;
    //int centrey1 = 300;
    //int centrex2 = 800;
    //int centrey2 = 300;
    //int centrex3 = 400;
    //int centrey3 = 0;
 
    //1280*1024
    // int centrex1 = 0;
    // int centrey1 = 510;
    // int centrex2 = 1280;
    // int centrey2 = 510;
    // int centrex3 = 640;
    // int centrey3 = 0;
 
    //1680*1050
    // int centrex1 = 0;
    // int centrey1 = 525;
    // int centrex2 = 1680;
    // int centrey2 = 525;
    // int centrex3 = 840;
    // int centrey3 = 0;
 
    //1920*1080
    int centrex1 = 0;
    int centrey1 = 540;
    int centrex2 = 1920;
    int centrey2 = 540;
    int centrex3 = 960;
    int centrey3 = 0;
 
    int currentDirection1 = 1; //va à droite
    int currentDirection2 = 3; //va à gauche
    int currentDirection3 = 2; //va en bas
    int vie1=1;
    int vie2=1;
    int vie3=1;
    int moveAmount = 5;
    ArrayList<Integer> pathx1 = new ArrayList();
    ArrayList<Integer> pathy1 = new ArrayList();
    ArrayList<Integer> pathx2 = new ArrayList();
    ArrayList<Integer> pathy2 = new ArrayList();
    ArrayList<Integer> pathx3 = new ArrayList();
    ArrayList<Integer> pathy3 = new ArrayList();
    private JFrame jffinpartie;
 
 
    public void init() {
        super.init();
 
        Window w = sm.getFullScreenWindow();
        w.addKeyListener(this);
    }
 
    public static void main(String[] args) {
        new Joueur3().run();
    }
 
    public void draw(Graphics2D g) {
        if (vie1==1){//deplacement J1
                switch(currentDirection1){
                case 0:
                    if (centrey1>0){
                    centrey1-=moveAmount;
                } else {
                    centrey1 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex1 < sm.getWidth()){
                    centrex1+=moveAmount;
                } else {
                    centrex1 = 0;
                }
                break;
                case 2:
                if (centrey1 < sm.getHeight()){
                    centrey1+=moveAmount;
                } else {
                    centrey1 = 0;
                }
                break;
                case 3:
                if (centrex1>0){
                    centrex1-=moveAmount;
                } else {
                    centrex1 = sm.getWidth();
                }
                break;
            }
        }
        if(vie1==0){}
 
        if(vie2==1){//deplacement J2
            switch(currentDirection2){
                case 0:
                if (centrey2>0){
                    centrey2-=moveAmount;
                } else {
                    centrey2 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex2 < sm.getWidth()){
                    centrex2+=moveAmount;
                } else {
                    centrex2 = 0;
                }
                break;
                case 2:
                if (centrey2 < sm.getHeight()){
                    centrey2+=moveAmount;
                } else {
                    centrey2 = 0;
                }
                break;
                case 3:
                if (centrex2>0){
                    centrex2-=moveAmount;
                } else {
                    centrex2 = sm.getWidth();
                }
                break;
            }
        }
        if(vie2==0){}
 
        if(vie3==1){//deplacement J3
            switch(currentDirection3){
                case 0:
                if (centrey3>0){
                    centrey3-=moveAmount;
                } else {
                    centrey3 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex3 < sm.getWidth()){
                    centrex3+=moveAmount;
                } else {
                    centrex3 = 0;
                }
                break;
                case 2:
                if (centrey3 < sm.getHeight()){
                    centrey3+=moveAmount;
                } else {
                    centrey3 = 0;
                }
                break;
                case 3:
                if (centrex3>0){
                    centrex3-=moveAmount;
                } else {
                    centrex3 = sm.getWidth();
                }
                break;
            }
        }
        if(vie3==0){}
 
 
        for (int x = 0;x<pathx1.size();x++){//verification condition de mort
            if (((centrex1 == pathx1.get(x)) && (centrey1 == pathy1.get(x))) //fin joueur1 (suicide)
            || ((centrex1 == pathx2.get(x)) && (centrey1 == pathy2.get(x))) //fin joueur1 (se tue sur 2)
            || ((centrex1 == pathx3.get(x)) && (centrey1 == pathy3.get(x)))) //fin joueur1 (se tue sur 3)
            {
                vie1=0;
            }
 
            if (((centrex2 == pathx2.get(x)) && (centrey2 == pathy2.get(x))) //fin joueur2 (suicide)
            || ((centrex2 == pathx1.get(x)) && (centrey2 == pathy1.get(x))) //fin joueur2 (se tue sur 1)
            || ((centrex2 == pathx3.get(x)) && (centrey2 == pathy3.get(x)))) //fin joueur2 (se tue sur 3)
            {
                vie2=0;
            }
 
            if(((centrex3 == pathx3.get(x)) && (centrey3 == pathy3.get(x))) //fin joueur3 (suicide)
            || ((centrex3 == pathx1.get(x)) && (centrey3 == pathy1.get(x))) //fin joueur3 (se tue sur 1)
            || ((centrex3 == pathx2.get(x)) && (centrey3 == pathy2.get(x)))) //fin joueur3 (se tue sur 2)
            {
                vie3=0;
            }
        }
 
        //verification condition de victoire
        if ((centrex1 == centrex2) && (centrey1 == centrey2)
        &&  (centrex1 == centrex3) && (centrey1 == centrey3)
        &&  (centrex2 == centrex3) && (centrey2 == centrey3)) 
        {
            finPartie("Ex-aequo");
        }
        else if((vie1==0) && (vie2==0)){
            finPartie("Victoire du joueur vert");
        }
        else if((vie2==0) && (vie3==0)){
            finPartie("Victoire du joueur bleu");
        }     
        else if((vie1==0) && (vie3==0)){
            finPartie("Victoire du joueur rouge");
        }    
 
 
 
 
        pathx1.add(centrex1);
        pathy1.add(centrey1);
        pathx2.add(centrex2);
        pathy2.add(centrey2);
        pathx3.add(centrex3);
        pathy3.add(centrey3);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, sm.getWidth(), sm.getHeight());
        for (int x = 0;x<pathx1.size();x++){
            g.setColor(Color.blue);
            g.fillRect(pathx1.get(x), pathy1.get(x), 5, 5);
            g.setColor(Color.red);
            g.fillRect(pathx2.get(x), pathy2.get(x), 5, 5);
            g.setColor(Color.green);
            g.fillRect(pathx3.get(x), pathy3.get(x), 5, 5);
        }     
 
    }//fin draw
 
    public void finPartie(String s){//stoper partie
        this.stop();
        jffinpartie = new JFrame (s);
 
        JPanel jp =new JPanel();
        jp.setPreferredSize(new Dimension (400,70));
        JButton jbnewgame =new JButton("Nouvelle partie");
        jbnewgame.addActionListener(this);
        jp.add(jbnewgame);
        JButton jbendgame =new JButton("Menu");
        jbendgame.addActionListener(this);
        jp.add(jbendgame);
 
        jffinpartie.setContentPane(jp);//change le panneau de contenu
        jffinpartie.pack();//réglage de la taille par le contenu
        jffinpartie.setVisible(true);
 
    }
 
    public void actionPerformed(ActionEvent ae){
        JButton jb = (JButton)ae.getSource();
        if(jb.getText().equals("Nouvelle partie")){
            new Joueur3().run();
            jffinpartie.dispose();
        }
        else if(jb.getText().equals("Menu")){
            new Menu();
            jffinpartie.dispose();
        }
 
    }
 
    public void keyPressed(KeyEvent e) {//touche deplacement
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            if (currentDirection2 != 2){
                currentDirection2 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            if (currentDirection2 != 0){
                currentDirection2 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (currentDirection2 != 3){
                currentDirection2 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (currentDirection2 != 1){
                currentDirection2 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_Z){
            if (currentDirection1 != 2){
                currentDirection1 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_S) {
            if (currentDirection1 != 0){
                currentDirection1 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_D) {
            if (currentDirection1 != 3){
                currentDirection1 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_Q) {
            if (currentDirection1 != 1){
                currentDirection1 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_O){
            if (currentDirection3 != 2){
                currentDirection3 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_L) {
            if (currentDirection3 != 0){
                currentDirection3 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_M) {
            if (currentDirection3 != 3){
                currentDirection3 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_K) {
            if (currentDirection3 != 1){
                currentDirection3 = 3;
                }
        }
    }
 
    public void keyReleased(KeyEvent e) {
 
    }
 
    public void keyTyped(KeyEvent arg0) {
 
    }
}
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
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
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
 
import java.util.ArrayList;
import javax.swing.* ;
import java.awt.* ;
import java.awt.event.*;
 
public class Joueur4 extends Core implements KeyListener,ActionListener {
    //640*480
    // int centrex1 = 0;
    // int centrey1 = 240;
    // int centrex2 = 640;
    // int centrey2 = 240;
    // int centrex3 = 320;
    // int centrey3 = 0;
    // int centrex4 = 320;
    // int centrey4 = 480;
 
    //800*600
    //int centrex1 = 0;
    //int centrey1 = 300;
    //int centrex2 = 800;
    //int centrey2 = 300;
    //int centrex3 = 400;
    //int centrey3 = 0;
    //int centrex4 = 400;
    //int centrey4 = 600;
 
    //1280*1024
    // int centrex1 = 0;
    // int centrey1 = 510;
    // int centrex2 = 1280;
    // int centrey2 = 510;
    // int centrex3 = 640;
    // int centrey3 = 0;
    // int centrex4 = 640;
    // int centrey4 = 1025;
 
    //1680*1050
    // int centrex1 = 0;
    // int centrey1 = 525;
    // int centrex2 = 1680;
    // int centrey2 = 525;
    // int centrex3 = 840;
    // int centrey3 = 0;
    // int centrex4 = 840;
    // int centrey4 = 1050;
 
    //1920*1080
    int centrex1 = 0;
    int centrey1 = 540;
    int centrex2 = 1920;
    int centrey2 = 540;
    int centrex3 = 960;
    int centrey3 = 0;
    int centrex4 = 960;
    int centrey4 = 1080;
 
    int currentDirection1 = 1; //va à droite
    int currentDirection2 = 3; //va à gauche
    int currentDirection3 = 2; //va en bas
    int currentDirection4 = 0; //va en haut
    int vie1=1;
    int vie2=1;
    int vie3=1;
    int vie4=1;
    int moveAmount = 5;
    ArrayList<Integer> pathx1 = new ArrayList();
    ArrayList<Integer> pathy1 = new ArrayList();
    ArrayList<Integer> pathx2 = new ArrayList();
    ArrayList<Integer> pathy2 = new ArrayList();
    ArrayList<Integer> pathx3 = new ArrayList();
    ArrayList<Integer> pathy3 = new ArrayList();
    ArrayList<Integer> pathx4 = new ArrayList();
    ArrayList<Integer> pathy4 = new ArrayList();
    private JFrame jffinpartie;
 
 
    public void init() {
        super.init();
 
        Window w = sm.getFullScreenWindow();
        w.addKeyListener(this);
    }
 
    public static void main(String[] args) {
        new Joueur4().run();
    }
 
    public void draw(Graphics2D g) {
        if (vie1==1){//deplacement J1
                switch(currentDirection1){
                case 0:
                if (centrey1>0){
                    centrey1-=moveAmount;
                } else {
                    centrey1 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex1 < sm.getWidth()){
                    centrex1+=moveAmount;
                } else {
                    centrex1 = 0;
                }
                break;
                case 2:
                if (centrey1 < sm.getHeight()){
                    centrey1+=moveAmount;
                } else {
                    centrey1 = 0;
                }
                break;
                case 3:
                if (centrex1>0){
                    centrex1-=moveAmount;
                } else {
                    centrex1 = sm.getWidth();
                }
                break;
            }
        }
        else if(vie1==0){}
 
        if(vie2==1){//deplacement J2
            switch(currentDirection2){
                case 0:
                if (centrey2>0){
                    centrey2-=moveAmount;
                } else {
                    centrey2 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex2 < sm.getWidth()){
                    centrex2+=moveAmount;
                } else {
                    centrex2 = 0;
                }
                break;
                case 2:
                if (centrey2 < sm.getHeight()){
                    centrey2+=moveAmount;
                } else {
                    centrey2 = 0;
                }
                break;
                case 3:
                if (centrex2>0){
                    centrex2-=moveAmount;
                } else {
                    centrex2 = sm.getWidth();
                }
                break;
            }
        }
        else if(vie2==0){}
 
        if(vie3==1){//deplacement J3
            switch(currentDirection3){
                case 0:
                if (centrey3>0){
                    centrey3-=moveAmount;
                } else {
                    centrey3 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex3 < sm.getWidth()){
                    centrex3+=moveAmount;
                } else {
                    centrex3 = 0;
                }
                break;
                case 2:
                if (centrey3 < sm.getHeight()){
                    centrey3+=moveAmount;
                } else {
                    centrey3 = 0;
                }
                break;
                case 3:
                if (centrex3>0){
                    centrex3-=moveAmount;
                } else {
                    centrex3 = sm.getWidth();
                }
                break;
            }
        }
        else if(vie3==0){}
 
        if(vie4==1){//deplacement J4
            switch(currentDirection4){
                case 0:
                if (centrey4>0){
                    centrey4-=moveAmount;
                } else {
                    centrey4 = sm.getHeight();
                }
                break;
                case 1:
                if (centrex4 < sm.getWidth()){
                    centrex4+=moveAmount;
                } else {
                    centrex4 = 0;
                }
                break;
                case 2:
                if (centrey4 < sm.getHeight()){
                    centrey4+=moveAmount;
                } else {
                    centrey4 = 0;
                }
                break;
                case 3:
                if (centrex4>0){
                    centrex4-=moveAmount;
                } else {
                    centrex4 = sm.getWidth();
                }
                break;
            }
        }
        else if(vie4==0){}   
 
        for (int x = 0;x<pathx1.size();x++){//verification condition de mort
            if (((centrex1 == pathx1.get(x)) && (centrey1 == pathy1.get(x))) //fin joueur1 (suicide)
            || ((centrex1 == pathx2.get(x)) && (centrey1 == pathy2.get(x))) //fin joueur1 (se tue sur 2)
            || ((centrex1 == pathx3.get(x)) && (centrey1 == pathy3.get(x))) //fin joueur1 (se tue sur 3)
            || ((centrex1 == pathx4.get(x)) && (centrey1 == pathy4.get(x)))) //fin joueur1 (se tue sur 4)
            {
                vie1=0;
            }
 
            if (((centrex2 == pathx2.get(x)) && (centrey2 == pathy2.get(x))) //fin joueur2 (suicide)
            || ((centrex2 == pathx1.get(x)) && (centrey2 == pathy1.get(x))) //fin joueur2 (se tue sur 1)
            || ((centrex2 == pathx3.get(x)) && (centrey2 == pathy3.get(x))) //fin joueur2 (se tue sur 3)
            || ((centrex2 == pathx4.get(x)) && (centrey2 == pathy4.get(x)))) //fin joueur2 (se tue sur 4)
            {
                vie2=0;
            }
 
            if (((centrex3 == pathx3.get(x)) && (centrey3 == pathy3.get(x))) //fin joueur3 (suicide)
            || ((centrex3 == pathx1.get(x)) && (centrey3 == pathy1.get(x))) //fin joueur3 (se tue sur 1)
            || ((centrex3 == pathx2.get(x)) && (centrey3 == pathy2.get(x))) //fin joueur3 (se tue sur 2)
            || ((centrex3 == pathx4.get(x)) && (centrey3 == pathy4.get(x)))) //fin joueur3 (se tue sur 4)
            {
                vie3=0;
            }
 
            if (((centrex4 == pathx4.get(x)) && (centrey4 == pathy4.get(x))) //fin joueur4 (suicide)
            || ((centrex4 == pathx1.get(x)) && (centrey4 == pathy1.get(x))) //fin joueur4 (se tue sur 1)
            || ((centrex4 == pathx2.get(x)) && (centrey4 == pathy2.get(x))) //fin joueur4 (se tue sur 2)
            || ((centrex4 == pathx3.get(x)) && (centrey4 == pathy3.get(x)))) //fin joueur4 (se tue sur 3)
            {
                vie4=0;
            }
        }
 
        //verification condition de victoire
        if ((centrex1 == centrex2) && (centrey1 == centrey2)
        &&  (centrex1 == centrex3) && (centrey1 == centrey3)
        &&  (centrex1 == centrex4) && (centrey1 == centrey4)
        &&  (centrex2 == centrex3) && (centrey2 == centrey3)
        &&  (centrex2 == centrex4) && (centrey2 == centrey4)
        &&  (centrex3 == centrex4) && (centrey3 == centrey4)) 
        {
            finPartie("Ex-aequo");
        }
        else if((vie1==0) && (vie2==0) && (vie3==0) && (vie4==0)){
            finPartie("Ex-aequo");
        }
        else if((vie2==0) && (vie3==0) && (vie4==0)){
            finPartie("Victoire du joueur bleu");
        }            
        else if((vie1==0) && (vie3==0) && (vie4==0)){
            finPartie("Victoire du joueur rouge");
        }            
        else if((vie1==0) && (vie2==0) && (vie4==0)){
            finPartie("Victoire du joueur vert");
        }        
        else if((vie1==0) && (vie2==0) && (vie3==0)){
            finPartie("Victoire du joueur jaune");
        }
 
 
        pathx1.add(centrex1);
        pathy1.add(centrey1);
        pathx2.add(centrex2);
        pathy2.add(centrey2);
        pathx3.add(centrex3);
        pathy3.add(centrey3);
        pathx4.add(centrex4);
        pathy4.add(centrey4);
        g.setColor(Color.BLACK);
        g.fillRect(0, 0, sm.getWidth(), sm.getHeight());
        for (int x = 0;x<pathx1.size();x++){
            g.setColor(Color.blue);
            g.fillRect(pathx1.get(x), pathy1.get(x), 5, 5);
            g.setColor(Color.red);
            g.fillRect(pathx2.get(x), pathy2.get(x), 5, 5);
            g.setColor(Color.green);
            g.fillRect(pathx3.get(x), pathy3.get(x), 5, 5);
            g.setColor(Color.yellow);
            g.fillRect(pathx4.get(x), pathy4.get(x), 5, 5);
        }     
 
    }//fin draw
 
    public void finPartie(String s){//stopper partie
        this.stop();
        jffinpartie = new JFrame (s);
 
        JPanel jp =new JPanel();
        jp.setPreferredSize(new Dimension (400,70));
        JButton jbnewgame =new JButton("Nouvelle partie");
        jbnewgame.addActionListener(this);
        jp.add(jbnewgame);
        JButton jbendgame =new JButton("Menu");
        jbendgame.addActionListener(this);
        jp.add(jbendgame);
 
        jffinpartie.setContentPane(jp);//change le panneau de contenu
        jffinpartie.pack();//réglage de la taille par le contenu
        jffinpartie.setVisible(true);
 
    }
 
    public void actionPerformed(ActionEvent ae){
        JButton jb = (JButton)ae.getSource();
        if(jb.getText().equals("Nouvelle partie")){
            new Joueur4().run();
            jffinpartie.dispose();
        }
        else if(jb.getText().equals("Menu")){
            new Menu();
            jffinpartie.dispose();
        }
 
    }
 
    public void keyPressed(KeyEvent e) {//touche deplacement
        if (e.getKeyCode() == KeyEvent.VK_UP) {
            if (currentDirection2 != 2){
                currentDirection2 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
            if (currentDirection2 != 0){
                currentDirection2 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
            if (currentDirection2 != 3){
                currentDirection2 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
            if (currentDirection2 != 1){
                currentDirection2 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_Z){
            if (currentDirection1 != 2){
                currentDirection1 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_S) {
            if (currentDirection1 != 0){
                currentDirection1 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_D) {
            if (currentDirection1 != 3){
                currentDirection1 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_Q) {
            if (currentDirection1 != 1){
                currentDirection1 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_O){
            if (currentDirection3 != 2){
                currentDirection3 = 0;
            }
        } else if (e.getKeyCode() == KeyEvent.VK_L) {
            if (currentDirection3 != 0){
                currentDirection3 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_M) {
            if (currentDirection3 != 3){
                currentDirection3 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_K) {
            if (currentDirection3 != 1){
                currentDirection3 = 3;
                }
        }
 
        if (e.getKeyCode() == KeyEvent.VK_NUMPAD8)
        {
            if (currentDirection4 != 2){
                currentDirection4 = 0;
            }
        } 
        else if (e.getKeyCode() == KeyEvent.VK_NUMPAD5) {
            if (currentDirection4 != 0){
                currentDirection4 = 2;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD6) {
            if (currentDirection4 != 3){
                currentDirection4 = 1;
                }
        } else if (e.getKeyCode() == KeyEvent.VK_NUMPAD4) {
            if (currentDirection4 != 1){
                currentDirection4 = 3;
                }
        }
    }
 
    public void keyReleased(KeyEvent e) {
 
    }
 
    public void keyTyped(KeyEvent arg0) {
 
    }
}
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
 
import java.awt.*;
import java.awt.image.BufferedImage;
 
public abstract class Core {
 
	private static final DisplayMode modes[] = 
		{
		new DisplayMode(1920,1080,32,0),
		new DisplayMode(1680,1050,32,0),
		new DisplayMode(1280,1024,32,0),
		new DisplayMode(800,600,32,0),
		new DisplayMode(800,600,24,0),
		new DisplayMode(800,600,16,0),
		new DisplayMode(640,480,32,0),
		new DisplayMode(640,480,24,0),
		new DisplayMode(640,480,16,0),
		};
	private boolean running;
	protected ScreenManager sm;
 
	public void stop(){
		running = false;
	}
 
	public void run(){
		try{
			init();
			gameLoop();
		}finally{
			sm.restoreScreen();
		}
	}
 
	public void init(){
		sm = new ScreenManager();
		DisplayMode dm = sm.findFirstCompatibaleMode(modes);
		sm.setFullScreen(dm);
		Window w = sm.getFullScreenWindow();
		w.setFont(new Font("Arial",Font.PLAIN,20));
		w.setBackground(Color.WHITE);
		w.setForeground(Color.RED);
		w.setCursor(w.getToolkit().createCustomCursor(new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),"null")); 
		running = true;
	}
 
	public void gameLoop(){
		long startTime = System.currentTimeMillis();
		long cumTime = startTime;
 
		while (running){
			long timePassed = System.currentTimeMillis()-cumTime;
			cumTime+= timePassed;
			update(timePassed);
			Graphics2D g = sm.getGraphics();
			draw(g);
			g.dispose();
			sm.update();
 
			try{
				Thread.sleep(20);
			}catch(Exception ex){}
		}
	}
 
	public void update(long timePassed){}
 
	public abstract void draw(Graphics2D g);
 
}
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
 
import java.awt.*;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
 
public class ScreenManager {
 
	private GraphicsDevice vc;
 
	public ScreenManager(){
		GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
		vc = e.getDefaultScreenDevice();
	}
 
	public DisplayMode[] getCompatibleDisplayModes(){
		return vc.getDisplayModes();
	}
 
	public DisplayMode findFirstCompatibaleMode(DisplayMode[] modes){//recupere taille de l'ecran
		DisplayMode goodModes[] = vc.getDisplayModes();
		for(int x = 0; x<modes.length;x++){
			for(int y = 0;y<goodModes.length;y++){
				if(displayModesMatch(modes[x],goodModes[y])){
					return modes[x];
				}
			}
		}
		return null;
	}
 
	public DisplayMode getCurrentDM(){
		return vc.getDisplayMode();
	}
 
	public boolean displayModesMatch(DisplayMode m1, DisplayMode m2){
		if(m1.getWidth() != m2.getWidth() || m1.getHeight() != m2.getHeight()){
			return false;
		}
		if(m1.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI && m2.getBitDepth() != DisplayMode.BIT_DEPTH_MULTI && m1.getBitDepth() != m2.getBitDepth()){
			return false;
		}
		if(m1.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN && m2.getRefreshRate() != DisplayMode.REFRESH_RATE_UNKNOWN && m1.getRefreshRate() != m2.getRefreshRate()){
			return false;
		}
		return true;
	}
 
	public void setFullScreen(DisplayMode dm){
		JFrame f = new JFrame();
		f.setUndecorated(true);
		f.setIgnoreRepaint(true);
		f.setResizable(false);
		vc.setFullScreenWindow(f);
 
		if(dm != null && vc.isDisplayChangeSupported()){
			try{
				vc.setDisplayMode(dm);
			}catch(Exception ex){}
			f.createBufferStrategy(2);
		}
	}
 
	public Graphics2D getGraphics(){
		Window w = vc.getFullScreenWindow();
		if(w != null){
			BufferStrategy bs = w.getBufferStrategy();
			return (Graphics2D)bs.getDrawGraphics();
		}
		else{
			return null;
		}
	}
 
	public void update(){
		Window w = vc.getFullScreenWindow();
		if(w != null){
			BufferStrategy bs = w.getBufferStrategy();
			if(!bs.contentsLost()){
				bs.show();
			}
		}
	}
 
	public Window getFullScreenWindow(){
		return vc.getFullScreenWindow();
	}
 
	public int getWidth(){
		Window w = vc.getFullScreenWindow();
		if(w != null){
			return w.getWidth();
		}else{
			return 0;
		}
	}
 
	public int getHeight(){
		Window w = vc.getFullScreenWindow();
		if(w != null){
			return w.getHeight();
		}else{
			return 0;
		}
	}
 
	public void restoreScreen(){
		Window w = vc.getFullScreenWindow();
		if(w != null){
			w.dispose();
		}
		vc.setFullScreenWindow(null);
	}
 
	public BufferedImage createCompatibaleimage(int w, int h, int t){
			Window win = vc.getFullScreenWindow();
			if(win != null){
				GraphicsConfiguration gc = win.getGraphicsConfiguration();
				return gc.createCompatibleImage(w,h,t);
			}else{
				return null;
			}
 
		}
 
}