-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFenetreJeu.java
More file actions
executable file
·147 lines (126 loc) · 5.09 KB
/
FenetreJeu.java
File metadata and controls
executable file
·147 lines (126 loc) · 5.09 KB
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
public class FenetreJeu extends JPanel implements MouseListener, MouseMotionListener {
private Jeu jeu;
private Bille bille;
private int tailleCase = 50;
private int hauteur, largeur;
private JFrame frame;
private double ancienX, ancienY;
public FenetreJeu(Jeu jeu) {
this.jeu = jeu;
this.bille = jeu.getBille(); // initialisation ici
this.hauteur = jeu.getTerrain().getHauteur();
this.largeur = jeu.getTerrain().getLargeur();
setBackground(Color.GRAY);
setPreferredSize(new Dimension(largeur * tailleCase, hauteur * tailleCase));
frame = new JFrame("Redux - Projet ORABI Zahra && NDIAYE Adama Fahbine");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(this);
frame.getContentPane().addMouseListener(this);
frame.getContentPane().addMouseMotionListener(this);
frame.pack();
frame.setVisible(true);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Terrain t = jeu.getTerrain();
for(int i = 0; i < hauteur; i++){
for(int j = 0; j < largeur; j++){
Case c = t.getCase(i,j);
Color couleur;
if(c instanceof CaseIntraversable){
couleur = Color.BLACK;
} else if(c instanceof Sortie){
couleur = Color.GREEN;
} else if(c instanceof Teleporte){
couleur = Color.ORANGE;
}else if(c instanceof Trou){
couleur = Color.RED;
}else if(c instanceof Cle){
couleur = Color.YELLOW;
}else if(c instanceof Porte){
Porte p = (Porte) c;
couleur = p.getCouleur();
}else {
couleur = Color.LIGHT_GRAY;
}
g.setColor(couleur);
g.fillRect(j * tailleCase, i * tailleCase, tailleCase, tailleCase);
// Bordures des cases
g.setColor(Color.DARK_GRAY);
g.drawRect(j * tailleCase, i * tailleCase, tailleCase, tailleCase);
}
}
// Bille
int x = (int) (bille.getX() * tailleCase);
int y = (int) (bille.getY() * tailleCase);
int rayonPixels = (int) (bille.getRayon() * tailleCase);
// Dessiner la bille (centre aux coordonnées, rayon ajusté)
g.setColor(Color.BLUE);
g.fillOval(x - rayonPixels, y - rayonPixels, rayonPixels * 2, rayonPixels * 2);
// Contour de la bille
g.setColor(Color.DARK_GRAY);
g.drawOval(x - rayonPixels, y - rayonPixels, rayonPixels * 2, rayonPixels * 2);
// Indicateur de direction (si la bille bouge)
double vitesse = bille.vitesseAbsolue();
if (vitesse > 0.01) {
g.setColor(Color.YELLOW);
int x2 = x + (int)(bille.getVx() * tailleCase * 5);
int y2 = y + (int)(bille.getVy() * tailleCase * 5);
g.drawLine(x, y, x2, y2);
}
// Info
g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.PLAIN, 12));
g.drawString("Cliquez et glissez pour deplacer la bille", 10, 20);
g.drawString(String.format("Vitesse: %.3f", bille.vitesseAbsolue()), 10, 40);
}
@Override
public void mousePressed(MouseEvent e){
Object o = jeu.getTerrain().getCase(e.getY()/tailleCase, e.getX()/tailleCase);
if(o instanceof CaseTraversable){
CaseTraversable ct = (CaseTraversable)o;
if(ct.getContenu() instanceof Bille){
bille.avancer = true;
ancienX = e.getX();
ancienY = e.getY();
}
}
}
@Override
public void mouseDragged(MouseEvent e){
if(!bille.avancer) return;
double sx = e.getX() - ancienX;
double sy = e.getY() - ancienY;
bille.setVitesse(bille.getVx() + 0.001*sx, bille.getVy() + 0.001*sy);
double v = bille.vitesseAbsolue();
if(v > 0.2){
bille.setVitesse(bille.getVx() * 0.2 / v, bille.getVy() * 0.2 / v);
}
ancienX = e.getX();
ancienY = e.getY();
}
@Override
public void mouseReleased(MouseEvent e){
bille.avancer = false;
}
@Override public void mouseEntered(MouseEvent e){}
@Override public void mouseExited(MouseEvent e){}
@Override public void mouseClicked(MouseEvent e){}
@Override public void mouseMoved(MouseEvent e){}
public void afficherVictoire(){
JOptionPane.showMessageDialog(frame,
"Bravo! Vous avez atteint la sortie!\n",
"Victoire!", JOptionPane.INFORMATION_MESSAGE);
}
public void afficherDefaite(){
JOptionPane.showMessageDialog(frame,
"Oh non! Vous êtes tomber dans un trou!\n",
"Défaite!", JOptionPane.INFORMATION_MESSAGE);
}
}