Phase 9 : ajout des personnages
This commit is contained in:
parent
33204404f6
commit
0a250955b2
8 changed files with 143 additions and 14 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
package controleur;
|
package controleur;
|
||||||
import modele.Jeu;
|
import modele.Jeu;
|
||||||
|
|
||||||
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
import controleur.GLOBAL;
|
import controleur.GLOBAL;
|
||||||
|
|
@ -94,6 +95,14 @@ public class Controle implements AsyncResponse {
|
||||||
break;
|
break;
|
||||||
case "ajout panel murs":
|
case "ajout panel murs":
|
||||||
leJeu.envoi((Connection)info, this.frmArene.jpnMurs());
|
leJeu.envoi((Connection)info, this.frmArene.jpnMurs());
|
||||||
|
break;
|
||||||
|
case "ajout jlabel jeu":
|
||||||
|
this.frmArene.ajoutLabelJeu((JLabel) info);
|
||||||
|
this.frmArene.jpnJeu.repaint();
|
||||||
|
break;
|
||||||
|
case "ajout joueurs":
|
||||||
|
leJeu.envoi((Connection)info, this.frmArene.getJpnJeu());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -101,6 +110,10 @@ public class Controle implements AsyncResponse {
|
||||||
switch(ordre) {
|
switch(ordre) {
|
||||||
case "mettre murs":
|
case "mettre murs":
|
||||||
this.frmArene.setJpnMurs((JPanel)info);
|
this.frmArene.setJpnMurs((JPanel)info);
|
||||||
|
break;
|
||||||
|
case "modif panel jeu":
|
||||||
|
this.frmArene.setJpnJeu((JPanel)info);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,4 +14,8 @@ public interface GLOBAL {
|
||||||
int tailleYArene = 590;
|
int tailleYArene = 590;
|
||||||
int largeurMur = 34;
|
int largeurMur = 34;
|
||||||
int hauteurMur = 35;
|
int hauteurMur = 35;
|
||||||
|
|
||||||
|
int largeurPerso = 39;
|
||||||
|
int hauteurPerso = 44;
|
||||||
|
int hauteurMessage = 8;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ import outils.connexion.Connection;
|
||||||
public class JeuClient extends Jeu {
|
public class JeuClient extends Jeu {
|
||||||
|
|
||||||
private Connection connection;
|
private Connection connection;
|
||||||
|
private boolean mursOk;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controleur
|
* Controleur
|
||||||
|
|
@ -28,8 +29,11 @@ public class JeuClient extends Jeu {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reception(Connection connection, Object info) {
|
public void reception(Connection connection, Object info) {
|
||||||
if(info instanceof JPanel) {
|
if(info instanceof JPanel && !mursOk) {
|
||||||
controle.evenementJeuClient("mettre murs", info);
|
controle.evenementJeuClient("mettre murs", info);
|
||||||
|
mursOk = true;
|
||||||
|
}else if(info instanceof JPanel && mursOk) {
|
||||||
|
this.controle.evenementJeuClient("modif panel jeu", info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@ package modele;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
|
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
|
||||||
import controleur.Controle;
|
import controleur.Controle;
|
||||||
import controleur.GLOBAL;
|
import controleur.GLOBAL;
|
||||||
import outils.connexion.Connection;
|
import outils.connexion.Connection;
|
||||||
|
|
@ -33,7 +35,7 @@ public class JeuServeur extends Jeu {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void connexion(Connection connection) {
|
public void connexion(Connection connection) {
|
||||||
this.lesJoueurs.put(connection, new Joueur());
|
this.lesJoueurs.put(connection, new Joueur(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -44,7 +46,8 @@ public class JeuServeur extends Jeu {
|
||||||
controle.evenementJeuServeur("ajout panel murs", connection);
|
controle.evenementJeuServeur("ajout panel murs", connection);
|
||||||
String pseudo = splitted[1];
|
String pseudo = splitted[1];
|
||||||
int numPerso = Integer.parseInt(splitted[2]);
|
int numPerso = Integer.parseInt(splitted[2]);
|
||||||
this.lesJoueurs.get(connection).initPerso(pseudo, numPerso);
|
System.out.println(info);
|
||||||
|
this.lesJoueurs.get(connection).initPerso(pseudo, numPerso, lesMurs, lesJoueurs.values());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -70,4 +73,14 @@ public class JeuServeur extends Jeu {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ajoutJLabelJeuArene(JLabel obj) {
|
||||||
|
controle.evenementJeuServeur("ajout jlabel jeu", obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void envoiJeuATous() {
|
||||||
|
for(Connection joueur : lesJoueurs.keySet()) {
|
||||||
|
controle.evenementJeuServeur("ajout joueurs", joueur);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,16 @@
|
||||||
package modele;
|
package modele;
|
||||||
|
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.SwingConstants;
|
||||||
|
|
||||||
|
import controleur.GLOBAL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gestion des joueurs
|
* Gestion des joueurs
|
||||||
*
|
*
|
||||||
|
|
@ -47,32 +59,67 @@ public class Joueur extends Objet {
|
||||||
*/
|
*/
|
||||||
private int orientation ;
|
private int orientation ;
|
||||||
|
|
||||||
|
private JLabel message;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructeur
|
* Constructeur
|
||||||
*/
|
*/
|
||||||
public Joueur() {
|
public Joueur(JeuServeur jeuServeur) {
|
||||||
|
this.jeuServeur = jeuServeur;
|
||||||
|
|
||||||
|
vie = MAXVIE;
|
||||||
|
etape = 1;
|
||||||
|
orientation = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialisation d'un joueur (pseudo et numéro, calcul de la 1ère position, affichage, création de la boule)
|
* Initialisation d'un joueur (pseudo et numéro, calcul de la 1ère position, affichage, création de la boule)
|
||||||
*/
|
*/
|
||||||
public void initPerso(String pseudo, int numPerso) {
|
public void initPerso(String pseudo, int numPerso, ArrayList<Mur> listeMurs, Collection<Joueur> joueurs) {
|
||||||
this.pseudo = pseudo;
|
this.pseudo = pseudo;
|
||||||
this.numPerso = numPerso;
|
this.numPerso = numPerso;
|
||||||
|
|
||||||
|
super.label = new JLabel();
|
||||||
|
this.message = new JLabel();
|
||||||
|
this.premierePosition(listeMurs, joueurs);
|
||||||
|
jeuServeur.ajoutJLabelJeuArene(label);
|
||||||
|
jeuServeur.ajoutJLabelJeuArene(message);
|
||||||
|
this.affiche("marche", this.etape);
|
||||||
|
|
||||||
|
this.message.setHorizontalAlignment(SwingConstants.CENTER);
|
||||||
|
this.message.setFont(new Font("Arial", Font.PLAIN, 8));
|
||||||
|
|
||||||
System.out.println("joueur "+pseudo+" - num perso "+numPerso+" créé");
|
System.out.println("joueur "+pseudo+" - num perso "+numPerso+" créé");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calcul de la première position aléatoire du joueur (sans chevaucher un autre joueur ou un mur)
|
* Calcul de la première position aléatoire du joueur (sans chevaucher un autre joueur ou un mur)
|
||||||
*/
|
*/
|
||||||
private void premierePosition() {
|
private void premierePosition(ArrayList<Mur> listeMurs, Collection<Joueur> joueurs) {
|
||||||
|
this.getJLabel().setBounds(0, 0, GLOBAL.largeurPerso, GLOBAL.hauteurPerso);
|
||||||
|
|
||||||
|
do {
|
||||||
|
posX = (int) Math.round(Math.random() * (GLOBAL.tailleXArene - GLOBAL.largeurPerso)) ;
|
||||||
|
posY = (int) Math.round(Math.random() * (GLOBAL.tailleYArene - GLOBAL.hauteurPerso - GLOBAL.hauteurMessage)) ;
|
||||||
|
System.out.println(posX + " " + posY);
|
||||||
|
} while(this.toucheJoueur(joueurs) || this.toucheMur(listeMurs));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Affiche le personnage et son message
|
* Affiche le personnage et son message
|
||||||
*/
|
*/
|
||||||
public void affiche() {
|
public void affiche(String etat, int etape) {
|
||||||
|
super.label.setBounds(posX, posY, GLOBAL.largeurPerso, GLOBAL.hauteurPerso);
|
||||||
|
String chemin = GLOBAL.cheminPersos + "perso" + this.numPerso + etat + etape + "d" + this.orientation + ".gif";
|
||||||
|
URL ressource = getClass().getClassLoader().getResource(chemin);
|
||||||
|
super.label.setIcon(new ImageIcon(ressource));
|
||||||
|
|
||||||
|
System.out.println(super.label.getBounds());
|
||||||
|
this.message.setBounds(posX-10, posY+GLOBAL.hauteurPerso, GLOBAL.largeurPerso+10, GLOBAL.hauteurMessage);
|
||||||
|
this.message.setText(pseudo + " : " + vie);
|
||||||
|
|
||||||
|
this.jeuServeur.envoiJeuATous();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -91,8 +138,13 @@ public class Joueur extends Objet {
|
||||||
* Contrôle si le joueur touche un des autres joueurs
|
* Contrôle si le joueur touche un des autres joueurs
|
||||||
* @return true si deux joueurs se touchent
|
* @return true si deux joueurs se touchent
|
||||||
*/
|
*/
|
||||||
private Boolean toucheJoueur() {
|
private Boolean toucheJoueur(Collection<Joueur> joueurs) {
|
||||||
return null;
|
for(Joueur player : joueurs) {
|
||||||
|
if (this != player && this.toucheObjet(player)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -111,8 +163,13 @@ public class Joueur extends Objet {
|
||||||
* Contrôle si le joueur touche un des murs
|
* Contrôle si le joueur touche un des murs
|
||||||
* @return true si un joueur touche un mur
|
* @return true si un joueur touche un mur
|
||||||
*/
|
*/
|
||||||
private Boolean toucheMur() {
|
private Boolean toucheMur(ArrayList<Mur> listeMurs) {
|
||||||
return null;
|
for(Mur mur : listeMurs) {
|
||||||
|
if(this.toucheObjet(mur)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,26 @@ public abstract class Objet {
|
||||||
* @param objet contient l'objet <EFBFBD> contr<EFBFBD>ler
|
* @param objet contient l'objet <EFBFBD> contr<EFBFBD>ler
|
||||||
* @return true si les 2 objets se touchent
|
* @return true si les 2 objets se touchent
|
||||||
*/
|
*/
|
||||||
public Boolean toucheObjet (Objet objet) {
|
public Boolean toucheObjet(Objet objet) {
|
||||||
return null;
|
int posXObj = objet.posX;
|
||||||
|
int posYObj = objet.posY;
|
||||||
|
int widthObj = objet.getJLabel().getWidth();
|
||||||
|
int heightObj = objet.getJLabel().getHeight();
|
||||||
|
|
||||||
|
int width = this.getJLabel().getWidth();
|
||||||
|
int height = this.getJLabel().getHeight();
|
||||||
|
|
||||||
|
if (this.posX + width > posXObj &&
|
||||||
|
this.posX < posXObj + widthObj &&
|
||||||
|
this.posY + height > posYObj &&
|
||||||
|
this.posY < posYObj + heightObj) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public JLabel getJLabel() {
|
public JLabel getJLabel() {
|
||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@ public class Arene extends JFrame {
|
||||||
private JPanel contentPane;
|
private JPanel contentPane;
|
||||||
private JTextField textField;
|
private JTextField textField;
|
||||||
private JPanel jpnMur;
|
private JPanel jpnMur;
|
||||||
|
public JPanel jpnJeu;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launch the application.
|
* Launch the application.
|
||||||
|
|
@ -58,6 +59,12 @@ public class Arene extends JFrame {
|
||||||
System.out.println("❌ Image non trouvée !");
|
System.out.println("❌ Image non trouvée !");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jpnJeu = new JPanel();
|
||||||
|
jpnJeu.setBounds(0, 0, 800, 590);
|
||||||
|
contentPane.add(jpnJeu);
|
||||||
|
jpnJeu.setOpaque(false);
|
||||||
|
jpnJeu.setLayout(null);
|
||||||
|
|
||||||
jpnMur = new JPanel();
|
jpnMur = new JPanel();
|
||||||
jpnMur.setOpaque(false);
|
jpnMur.setOpaque(false);
|
||||||
jpnMur.setBounds(0, 0, 800, 590);
|
jpnMur.setBounds(0, 0, 800, 590);
|
||||||
|
|
@ -95,4 +102,19 @@ public class Arene extends JFrame {
|
||||||
this.jpnMur.add(jpnMurs);
|
this.jpnMur.add(jpnMurs);
|
||||||
this.jpnMur.repaint();
|
this.jpnMur.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ajoutLabelJeu(JLabel object) {
|
||||||
|
this.jpnJeu.add(object);
|
||||||
|
this.jpnJeu.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
public JPanel getJpnJeu() {
|
||||||
|
return jpnJeu;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJpnJeu(JPanel jpnJeu) {
|
||||||
|
this.jpnJeu.removeAll();
|
||||||
|
this.jpnJeu.add(jpnJeu);
|
||||||
|
this.jpnJeu.repaint();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,7 @@ public class ChoixJoueur extends JFrame {
|
||||||
JOptionPane.showMessageDialog(null, "La saisie du pseudo est obligatoire !");
|
JOptionPane.showMessageDialog(null, "La saisie du pseudo est obligatoire !");
|
||||||
txtPseudo.requestFocus();
|
txtPseudo.requestFocus();
|
||||||
}else {
|
}else {
|
||||||
ctrl.evenementChoixJoueur(txtPseudo.getText(), nbPerso);
|
ctrl.evenementChoixJoueur(txtPseudo.getText(), persoNum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue