Bonjour, Bonsoir !
Comme beaucoup je viens vous exposer mon problème en espérant avoir une aide de votre part.
Je suis en train de finaliser un projet en JAVA dans le cadre de mon enseignement de spécialité au lycée. Mon groupe a décidé de réalisé un petit jeu. En quatre mois, on a bien avancé : la majeure partie est terminée. Seulement, nous sommes confrontés à un problème.
Nous souhaitons ajouter deux boutons "JOUER" et "QUITTER" à notre jeu. Le bouton Jouer servirait à lancer le jeu et Quitter à quitter le jeu.
C'est chose faite. Mais le problème est que lorsqu'on clique sur "JOUER", le jeu ne se lance pas. La fenêtre ne réagi plus et se ferme au bout de quelques secondes. Le bouton QUITTER fonctionne, lui, très bien.
En espérant que quelqu'un ait une idée, je vous ajoute à la suite le code complet du jeu. N'hésitez pas à demander des précisions.
Méthode Main :
Méthode "Play", fenêtre principale du jeu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Main { public static void main(String[] args){ new Play(); } }
Méthode "Panel", panneau dessinant les personnages et le fond (images à modifier pour que vous puissiez y avoir accès) :
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 import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Play extends JFrame implements KeyListener, ActionListener{ private JButton play = new JButton("JOUER"); private JButton quit = new JButton("QUITTER"); private JPanel container = new JPanel(); private JLabel label = new JLabel ("mon label"); private Panel panPersos = new Panel(); private boolean stop = false; JLabel labelInfo = new JLabel(); int debut = 0; int etatPartie = 0; int xSP=panPersos.getPosXSP(); int ySP=panPersos.getPosYSP(); int xVolt=panPersos.getPosXVolt(); int yVolt=panPersos.getPosYVolt(); public Play(){ //paramètres fenêtre this.setTitle("PICSRUN"); this.setSize(620, 550); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(true); this.addKeyListener(this); container.setBackground(Color.white); container.setLayout(new BorderLayout()); container.add(panPersos, BorderLayout.CENTER); container.add(label, BorderLayout.NORTH); this.setContentPane(container); this.setVisible(true); play.addActionListener(this); quit.addActionListener(this); JPanel south = new JPanel(); south.add(play); south.add(quit); container.add(south, BorderLayout.SOUTH); //gameloop(); } public void gameloop(){ startup(); while(!stop) { update(); draw(); pause(); } shutdown(); } private void startup() { etatPartie = 0; stop=false; } private void update() { // mets à jour la position du panneau{ xVolt=panPersos.getPosXVolt(); yVolt=panPersos.getPosYVolt(); xVolt=xVolt+1; panPersos.setPosXVolt(xVolt); panPersos.setPosYVolt(yVolt); if(etatPartie==1){ xSP=panPersos.getPosXSP(); ySP=panPersos.getPosYSP(); xSP=xSP+7; panPersos.setPosXSP(xSP); panPersos.setPosYSP(ySP); etatPartie=2; } if (xSP >= 600){ labelInfo.setText("Tu as gagné !"); stop = true; } else if(xVolt >= 600){ labelInfo.setText("Dommage, tu as perdu..."); stop = true; } } private void draw() { // redessinner le panneau panPersos.repaint(); } private void pause() { // attendre le temps nécessaire try { Thread.sleep(10); //la pause en millième de s. } catch (InterruptedException e){ e.printStackTrace(); } } private void shutdown() { // une fois la ligne dépassée arrêter le jeu + afficher temps/nb clic System.exit(0); } public void keyPressed(KeyEvent e){ if(etatPartie==0){ if(e.getKeyCode() == e.VK_LEFT|| e.getKeyCode() == e.VK_RIGHT){ etatPartie=1; } } else if (etatPartie==1) { if(e.getKeyCode() == e.VK_LEFT || e.getKeyCode() == e.VK_RIGHT){ etatPartie=2; } } } @Override public void keyReleased(KeyEvent e) { //sert à ne pas avancer quand reste appuyé sur la touche if(etatPartie==1 || etatPartie==2){ if(e.getKeyCode() == e.VK_LEFT || e.getKeyCode() == e.VK_RIGHT){ etatPartie=0; } } } @Override public void keyTyped(KeyEvent e) { //chercher à quoi ça sert } @Override public void actionPerformed(ActionEvent a) { if(a.getSource() == play) { gameloop(); } if(a.getSource() == quit) { System.exit(0); } } }
Note :
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 import java.awt.Graphics; import java.awt.Image; import java.io.File; import javax.imageio.ImageIO; import javax.swing.JPanel; public class Panel extends JPanel { private int posXSP = 10; private int posYSP = 130; private int posXVolt = 10; private int posYVolt = 250; private int backgroundX = 0; private int backgroundY = 0; public void paintComponent(Graphics g){ super.paintComponent(g); try{ Image img = ImageIO.read(new File("C:/Users/Adeline/Desktop/Background.jpg")); g.drawImage(img, backgroundX, backgroundY, this); } catch (Exception e){ e.printStackTrace(); } try { Image img = ImageIO.read(new File("C:/Users/Adeline/Documents/ISN/volt2.png")); g.drawImage(img, posXVolt, posYVolt, this); } catch (Exception e){ e.printStackTrace(); } try { Image img = ImageIO.read(new File("C:/Users/Adeline/Documents/ISN/SPAnim2.gif")); g.drawImage(img, posXSP, posYSP, this); } catch (Exception e){ e.printStackTrace(); } } public int getPosXVolt() { return posXVolt; } public void setPosXVolt(int posXVolt) { this.posXVolt = posXVolt; } public int getPosYVolt() { return posYVolt; } public void setPosYVolt(int posYVolt) { this.posYVolt = posYVolt; } public int getPosXSP() { return posXSP; } public void setPosXSP(int posXSP) { this.posXSP = posXSP; } public int getPosYSP() { return posYSP; } public void setPosYSP(int posYSP) { this.posYSP = posYSP; } }
- SP (Super-Patate) & Volt désignent les personnages du jeu.
L'utilisation de Thread réglerait-elle mon problème ? Si oui, comment l'utiliser ?
Merci d'avance !
Bonne soirée
Partager