Phase 11 : déplacement des personnages

This commit is contained in:
Erwann PHILIPPE 2025-04-03 17:44:30 +02:00
parent 0abf597984
commit 80e4fd53fd
6 changed files with 145 additions and 25 deletions

View file

@ -41,7 +41,7 @@ public class Controle implements AsyncResponse {
// //
new ServeurSocket(this, GLOBAL.PORT); new ServeurSocket(this, GLOBAL.PORT);
this.frmArene = new Arene(this); this.frmArene = new Arene(this, "serveur");
this.frmArene.setVisible(true); this.frmArene.setVisible(true);
this.leJeu = new JeuServeur(this); this.leJeu = new JeuServeur(this);
@ -65,7 +65,7 @@ public class Controle implements AsyncResponse {
this.leJeu = new JeuClient(this); this.leJeu = new JeuClient(this);
this.leJeu.connexion(connection); this.leJeu.connexion(connection);
this.frmArene = new Arene(this); this.frmArene = new Arene(this, "client");
this.frmChoixJoueur = new ChoixJoueur(this); this.frmChoixJoueur = new ChoixJoueur(this);
this.frmChoixJoueur.setVisible(true); this.frmChoixJoueur.setVisible(true);
}else { }else {
@ -106,6 +106,10 @@ public class Controle implements AsyncResponse {
case "ajout joueurs": case "ajout joueurs":
leJeu.envoi((Connection)info, this.frmArene.getJpnJeu()); leJeu.envoi((Connection)info, this.frmArene.getJpnJeu());
break; break;
case "ajout phrase":
this.frmArene.ajoutTchat((String)info);
((JeuServeur)this.leJeu).envoi(this.frmArene.getMessage());
break;
} }
} }
@ -117,14 +121,16 @@ public class Controle implements AsyncResponse {
case "modif panel jeu": case "modif panel jeu":
this.frmArene.setJpnJeu((JPanel)info); this.frmArene.setJpnJeu((JPanel)info);
break; break;
case "modif tchat":
frmArene.setMessage((String)info);
} }
} }
public void evenementArene(String ordre, Object info) { public void evenementArene(Object info) {
switch(ordre) { if(info instanceof String) {
case "tchat":
((JeuClient)this.leJeu).envoi("tchat" + GLOBAL.separateur + info); ((JeuClient)this.leJeu).envoi("tchat" + GLOBAL.separateur + info);
break; }else if(info instanceof Integer) {
((JeuClient)this.leJeu).envoi("action" + GLOBAL.separateur + info);
} }
} }

View file

@ -18,4 +18,7 @@ public interface GLOBAL {
int largeurPerso = 39; int largeurPerso = 39;
int hauteurPerso = 44; int hauteurPerso = 44;
int hauteurMessage = 8; int hauteurMessage = 8;
int droite = 0;
int gauche = 1;
} }

View file

@ -34,6 +34,8 @@ public class JeuClient extends Jeu {
mursOk = true; mursOk = true;
}else if(info instanceof JPanel && mursOk) { }else if(info instanceof JPanel && mursOk) {
this.controle.evenementJeuClient("modif panel jeu", info); this.controle.evenementJeuClient("modif panel jeu", info);
}else if(info instanceof String) {
controle.evenementJeuClient("modif tchat", info);
} }
} }

View file

@ -48,6 +48,17 @@ public class JeuServeur extends Jeu {
int numPerso = Integer.parseInt(splitted[2]); int numPerso = Integer.parseInt(splitted[2]);
System.out.println(info); System.out.println(info);
this.lesJoueurs.get(connection).initPerso(pseudo, numPerso, lesMurs, lesJoueurs.values()); this.lesJoueurs.get(connection).initPerso(pseudo, numPerso, lesMurs, lesJoueurs.values());
String connexionMessage = "** " + pseudo + " vient de se connecter ! **";
this.controle.evenementJeuServeur("ajout phrase", connexionMessage);
break;
case "tchat":
String pseudo2 = this.lesJoueurs.get(connection).getSpeudo();
String STALINE = pseudo2 + " > " + splitted[1];
JeuServeur.this.controle.evenementJeuServeur("ajout phrase", STALINE);
break;
case "action":
Integer action = Integer.parseInt(splitted[1]);
this.lesJoueurs.get(connection).action(action, this.lesJoueurs.values(), this.lesMurs);
} }
} }
@ -59,7 +70,10 @@ public class JeuServeur extends Jeu {
* Envoi d'une information vers tous les clients * Envoi d'une information vers tous les clients
* fais appel plusieurs fois à l'envoi de la classe Jeu * fais appel plusieurs fois à l'envoi de la classe Jeu
*/ */
public void envoi() { public void envoi(Object info) {
for(Connection connection : this.lesJoueurs.keySet()) {
super.envoi(connection, info);
}
} }
/** /**

View file

@ -101,7 +101,6 @@ public class Joueur extends Objet {
do { do {
posX = (int) Math.round(Math.random() * (GLOBAL.tailleXArene - GLOBAL.largeurPerso)) ; posX = (int) Math.round(Math.random() * (GLOBAL.tailleXArene - GLOBAL.largeurPerso)) ;
posY = (int) Math.round(Math.random() * (GLOBAL.tailleYArene - GLOBAL.hauteurPerso - GLOBAL.hauteurMessage)) ; posY = (int) Math.round(Math.random() * (GLOBAL.tailleYArene - GLOBAL.hauteurPerso - GLOBAL.hauteurMessage)) ;
System.out.println(posX + " " + posY);
} while(this.toucheJoueur(joueurs) || this.toucheMur(listeMurs)); } while(this.toucheJoueur(joueurs) || this.toucheMur(listeMurs));
} }
@ -115,7 +114,7 @@ public class Joueur extends Objet {
URL ressource = getClass().getClassLoader().getResource(chemin); URL ressource = getClass().getClassLoader().getResource(chemin);
super.label.setIcon(new ImageIcon(ressource)); super.label.setIcon(new ImageIcon(ressource));
System.out.println(super.label.getBounds()); //System.out.println(super.label.getBounds());
this.message.setBounds(posX-10, posY+GLOBAL.hauteurPerso, GLOBAL.largeurPerso+10, GLOBAL.hauteurMessage); this.message.setBounds(posX-10, posY+GLOBAL.hauteurPerso, GLOBAL.largeurPerso+10, GLOBAL.hauteurMessage);
this.message.setText(pseudo + " : " + vie); this.message.setText(pseudo + " : " + vie);
@ -125,13 +124,67 @@ public class Joueur extends Objet {
/** /**
* Gère une action reçue et qu'il faut afficher (déplacement, tire de boule...) * Gère une action reçue et qu'il faut afficher (déplacement, tire de boule...)
*/ */
public void action() { public void action(int action, Collection joueurs, ArrayList<Mur> murs) {
switch(action) {
case 38:
// touche : flèche haut
deplace("bas", joueurs, murs);
break;
case 40:
// touche : flèche bas
deplace("haut", joueurs, murs);
break;
case 37:
//touche flèche gauche
deplace("droite", joueurs, murs);
break;
case 39:
//touche : flèche droite
deplace("gauche", joueurs, murs);
break;
}
} }
/** /**
* Gère le déplacement du personnage * Gère le déplacement du personnage
*/ */
private void deplace() { private void deplace(String cote, Collection joueurs, ArrayList<Mur> murs) {
int oldPosX = posX;
int oldPosY = posY;
switch(cote) {
case "haut":
posY += 10;
break;
case "bas":
posY -= 10;
break;
case "gauche":
posX += 10;
orientation = GLOBAL.gauche;
break;
case "droite":
posX -= 10;
orientation = GLOBAL.droite;
}
if(this.toucheJoueur(joueurs) || this.toucheMur(murs)) {
posY = oldPosY;
posX = oldPosX;
}
if(etape+1 > 4) {
etape = 1;
}else {
etape += 1;
}
// Condition si le personnage sort du cadre
if(posX > 770 || posX < 0 || posY > 545 || posY < 0) {
posY = oldPosY;
posX = oldPosX;
}
this.affiche("marche", this.etape);
} }
/** /**

View file

@ -32,6 +32,8 @@ public class Arene extends JFrame {
public JPanel jpnJeu; public JPanel jpnJeu;
public JTextArea txtChat; public JTextArea txtChat;
private Controle controle; private Controle controle;
private boolean isServer;
private int touche;
/** /**
* Launch the application. * Launch the application.
@ -40,7 +42,8 @@ public class Arene extends JFrame {
/** /**
* Create the frame. * Create the frame.
*/ */
public Arene(Controle controle) { public Arene(Controle controle, String typeJeu) {
this.controle = controle;
setTitle("Arene"); setTitle("Arene");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().setPreferredSize(new Dimension(800, 729)); this.getContentPane().setPreferredSize(new Dimension(800, 729));
@ -48,11 +51,44 @@ public class Arene extends JFrame {
this.setResizable(false); this.setResizable(false);
setBounds(100, 100, 808, 757); setBounds(100, 100, 808, 757);
contentPane = new JPanel(); contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane); setContentPane(contentPane);
contentPane.setLayout(null); contentPane.setLayout(null);
if(typeJeu.equals("client")) {
isServer = false;
}else {
isServer = true;
}
if(!isServer) {
contentPane.setFocusable(true);
contentPane.addKeyListener(new KeyAdapter() {
int touche = -1;
public void keyPressed(KeyEvent e) {
switch(e.getKeyCode()) {
case KeyEvent.VK_LEFT:
touche = e.getKeyCode();
break;
case KeyEvent.VK_RIGHT:
touche = e.getKeyCode();
break;
case KeyEvent.VK_UP:
touche = e.getKeyCode();
break;
case KeyEvent.VK_DOWN:
touche = e.getKeyCode();
break;
}
if(touche != -1) {
Arene.this.controle.evenementArene(touche);
}
}
});
}
JLabel lblNewLabel = new JLabel(""); JLabel lblNewLabel = new JLabel("");
String chemin = GLOBAL.cheminFonds + "fondarene.jpg"; String chemin = GLOBAL.cheminFonds + "fondarene.jpg";
URL ressourceURL = getClass().getClassLoader().getResource(chemin); URL ressourceURL = getClass().getClassLoader().getResource(chemin);
@ -82,19 +118,23 @@ public class Arene extends JFrame {
lblNewLabel.setBounds(0, 0, 792, 590); lblNewLabel.setBounds(0, 0, 792, 590);
contentPane.add(lblNewLabel); contentPane.add(lblNewLabel);
txtSaisie = new JTextField(); if(!isServer) {
txtSaisie.setBounds(0, 591, 800, 30); txtSaisie = new JTextField();
contentPane.add(txtSaisie); txtSaisie.setBounds(0, 591, 800, 30);
txtSaisie.setColumns(10); contentPane.add(txtSaisie);
txtSaisie.setColumns(10);
txtSaisie.addKeyListener(new KeyAdapter() { txtSaisie.addKeyListener(new KeyAdapter() {
@Override @Override
public void keyPressed(KeyEvent e) { public void keyPressed(KeyEvent e) {
if(!Arene.this.txtSaisie.equals("") && e.getKeyCode() == KeyEvent.VK_ENTER) { if(!Arene.this.txtSaisie.equals("") && e.getKeyCode() == KeyEvent.VK_ENTER) {
controle.evenementArene("tchat", Arene.this.getMessage()); controle.evenementArene(Arene.this.txtSaisie.getText());
Arene.this.txtSaisie.setText("");
}
Arene.this.contentPane.requestFocus();
} }
} });
}); }
JScrollPane scrollPane = new JScrollPane(); JScrollPane scrollPane = new JScrollPane();
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
@ -132,12 +172,14 @@ public class Arene extends JFrame {
this.jpnJeu.repaint(); this.jpnJeu.repaint();
} }
public String getMessage() { public String getMessage() {
return this.txtSaisie.getText(); return this.txtChat.getText();
} }
public void setMessage(String msg) { public void setMessage(String msg) {
this.txtChat.setText(msg); this.txtChat.setText(msg);
this.txtChat.setCaretPosition(this.txtChat.getDocument().getLength());
} }
public void ajoutTchat(String Staline) { public void ajoutTchat(String Staline) {
this.txtChat.setText(this.txtChat.getText() + Staline + "\r\n"); this.txtChat.setText(this.txtChat.getText() + Staline + "\r\n");
this.txtChat.setCaretPosition(this.txtChat.getDocument().getLength());
} }
} }