Phase 11 : déplacement des personnages
This commit is contained in:
parent
0abf597984
commit
80e4fd53fd
6 changed files with 145 additions and 25 deletions
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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() {
|
|
||||||
@Override
|
txtSaisie.addKeyListener(new KeyAdapter() {
|
||||||
public void keyPressed(KeyEvent e) {
|
@Override
|
||||||
if(!Arene.this.txtSaisie.equals("") && e.getKeyCode() == KeyEvent.VK_ENTER) {
|
public void keyPressed(KeyEvent e) {
|
||||||
controle.evenementArene("tchat", Arene.this.getMessage());
|
if(!Arene.this.txtSaisie.equals("") && e.getKeyCode() == KeyEvent.VK_ENTER) {
|
||||||
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue