This repository was archived by the owner on Jan 22, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJeu.java
More file actions
178 lines (166 loc) · 4.83 KB
/
Jeu.java
File metadata and controls
178 lines (166 loc) · 4.83 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
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
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
import javax.swing.Timer;
public class Jeu extends JPanel implements ActionListener{
static final long serialVersionUID=235512;
private int l,h,vitesse;
/**
* largeur terrain
*/
private int lT=12;
/**
* hauteur terrain
*/
private int hT=8;
private Objet[][] terrain;
Perso[] persos;
/**
* vitesse verticale des persos
*/
private int vitesseGravity=8;
private Partie container;
private Bouton jeuMenu,jeuQuit;
private BufferedImage arrierePlan,fond;
private Graphics buffer;
/**
* timer regulant les vitesses
*/
private Timer timer= new Timer(25,this);
/**
* Demarre une partie (le moment ou les joueurs jouent)
* @param choixJoueurs tableau des types choisis par les joueurs
* @param l largeur
* @param h hauteur
* @param container conteneur global
*/
public Jeu(int[] choixJoueurs,int l,int h,Partie container){
vitesse=5; //vitesse du terrain
this.container=container;
arrierePlan = new BufferedImage(l, h, BufferedImage.TYPE_INT_RGB);
buffer = arrierePlan.getGraphics();
setLayout(null);
this.l = l;
this.h = h;
//charge le fond
try {
fond= ImageIO.read(new File("images/fond1.jpg"));
}catch(IOException e) {
System.out.println("Fond1 introuvable !");
System.exit(0);
}
//Cree les Persos necessaires
persos= new Perso[choixJoueurs.length];
for(int i=0;i<choixJoueurs.length;i++){
boolean grav=(i==0||i==2)?true:false;
int y=(i==0||i==1)?500:300;
persos[i]=new Perso(choixJoueurs[i]+1,"test",200,y,grav);
}
//Cree le terrain
terrain=new Objet[hT][lT];
Terrain.initTerrain(terrain);
//Cree les boutons
jeuQuit = new Bouton("quitter-mini", l-94,10);
jeuQuit.addActionListener(this);
jeuMenu = new Bouton("menu-mini", 74,10);
jeuMenu.addActionListener(this);
add(jeuQuit);
add(jeuMenu);
timer.start();
}
/**
* fait bouger les persos en fonction du terrain
*/
private void gestionVitesse(){
for(int k=0;k<persos.length;k++){ //pour chaque perso
if(persos[k].alive){
boolean contactYH = false;
boolean contactYB = false;
boolean contactXD = false;
for(int i=1; i<terrain.length; i++)
for(int j=0; j<terrain[i].length; j++)
if(terrain[i][j].type!='O'){ //on teste pas les cases vides
if(persos[k].CollisionHaut(terrain[i][j]))
contactYH = true;
if(persos[k].CollisionBas(terrain[i][j]))
contactYB = true;
if(persos[k].CollisionDroite(terrain[i][j]))
contactXD = true;
}
if ((contactYH && !persos[k].gravity)||(contactYB && persos[k].gravity)){
persos[k].vitesseY=0;
persos[k].land();
}else{
persos[k].vitesseY=(persos[k].gravity)? vitesseGravity : -vitesseGravity;
persos[k].fly();
}if(contactXD){
persos[k].vitesseX=-vitesse; //se fait emporter par le terrain
}else
persos[k].vitesseX=persos[k].vitessePropre;
persos[k].move();
}
persos[k].checkAlive(new Rectangle(0,96+64,l,h-2*96));
}
}
/**
* arrete le jeu quand tous les joueurs sont morts
*/
private void gestionFin(){
boolean fini=true;
for(int k=0;k<persos.length;k++) //pour chaque perso
if(persos[k].alive)
fini=false;
if(fini){
stop();
}
}
/**
* arrete proprement la partie et tous les timers lies
*/
public void stop(){
timer.stop();
for(int i=0;i<persos.length;i++)
persos[i].timer.stop();
container.setContentPane(new Score(persos,l,h,container));
container.setVisible(true);
}
@Override
public void paintComponent(Graphics g){
buffer.drawImage(fond, 0,0, this);
for(int j=0;j<terrain[0].length;j++) //chaque colonne
for(int i=1;i<terrain.length;i++)//les lignes sans faire la 1ere
buffer.drawImage(terrain[i][j].image, terrain[i][j].x, terrain[i][j].y, this);
for(int i=0;i<persos.length;i++)
if(persos[i].alive)
buffer.drawImage(persos[i].image, persos[i].x, persos[i].y, this);
g.drawImage(arrierePlan, 0,0, this);
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==timer){
for(int j=0;j<terrain[0].length;j++) //chaque colonne
for(int i=1;i<terrain.length;i++){//les lignes sans faire la 1ere
terrain[i][j].vitesseX=-vitesse;
terrain[i][j].move();
}
Terrain.gestionTerrain(terrain);
gestionVitesse();
gestionFin();
repaint();
//GoTo close
}else if(e.getSource()==jeuQuit)
System.exit (0);
//GoTo Menu principal
else if(e.getSource()==jeuMenu){
stop();
container.setContentPane(new Menu(0,l,h,container));
container.setVisible(true);
}
}
}