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);
|
||||
|
||||
this.frmArene = new Arene(this);
|
||||
this.frmArene = new Arene(this, "serveur");
|
||||
this.frmArene.setVisible(true);
|
||||
|
||||
this.leJeu = new JeuServeur(this);
|
||||
|
|
@ -65,7 +65,7 @@ public class Controle implements AsyncResponse {
|
|||
this.leJeu = new JeuClient(this);
|
||||
this.leJeu.connexion(connection);
|
||||
|
||||
this.frmArene = new Arene(this);
|
||||
this.frmArene = new Arene(this, "client");
|
||||
this.frmChoixJoueur = new ChoixJoueur(this);
|
||||
this.frmChoixJoueur.setVisible(true);
|
||||
}else {
|
||||
|
|
@ -106,6 +106,10 @@ public class Controle implements AsyncResponse {
|
|||
case "ajout joueurs":
|
||||
leJeu.envoi((Connection)info, this.frmArene.getJpnJeu());
|
||||
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":
|
||||
this.frmArene.setJpnJeu((JPanel)info);
|
||||
break;
|
||||
case "modif tchat":
|
||||
frmArene.setMessage((String)info);
|
||||
}
|
||||
}
|
||||
|
||||
public void evenementArene(String ordre, Object info) {
|
||||
switch(ordre) {
|
||||
case "tchat":
|
||||
public void evenementArene(Object info) {
|
||||
if(info instanceof String) {
|
||||
((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 hauteurPerso = 44;
|
||||
int hauteurMessage = 8;
|
||||
|
||||
int droite = 0;
|
||||
int gauche = 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,8 @@ public class JeuClient extends Jeu {
|
|||
mursOk = true;
|
||||
}else if(info instanceof JPanel && mursOk) {
|
||||
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]);
|
||||
System.out.println(info);
|
||||
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
|
||||
* 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 {
|
||||
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));
|
||||
|
||||
}
|
||||
|
|
@ -115,7 +114,7 @@ public class Joueur extends Objet {
|
|||
URL ressource = getClass().getClassLoader().getResource(chemin);
|
||||
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.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...)
|
||||
*/
|
||||
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
|
||||
*/
|
||||
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 JTextArea txtChat;
|
||||
private Controle controle;
|
||||
private boolean isServer;
|
||||
private int touche;
|
||||
|
||||
/**
|
||||
* Launch the application.
|
||||
|
|
@ -40,7 +42,8 @@ public class Arene extends JFrame {
|
|||
/**
|
||||
* Create the frame.
|
||||
*/
|
||||
public Arene(Controle controle) {
|
||||
public Arene(Controle controle, String typeJeu) {
|
||||
this.controle = controle;
|
||||
setTitle("Arene");
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
this.getContentPane().setPreferredSize(new Dimension(800, 729));
|
||||
|
|
@ -48,11 +51,44 @@ public class Arene extends JFrame {
|
|||
this.setResizable(false);
|
||||
setBounds(100, 100, 808, 757);
|
||||
contentPane = new JPanel();
|
||||
|
||||
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
|
||||
|
||||
setContentPane(contentPane);
|
||||
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("");
|
||||
String chemin = GLOBAL.cheminFonds + "fondarene.jpg";
|
||||
URL ressourceURL = getClass().getClassLoader().getResource(chemin);
|
||||
|
|
@ -82,6 +118,7 @@ public class Arene extends JFrame {
|
|||
lblNewLabel.setBounds(0, 0, 792, 590);
|
||||
contentPane.add(lblNewLabel);
|
||||
|
||||
if(!isServer) {
|
||||
txtSaisie = new JTextField();
|
||||
txtSaisie.setBounds(0, 591, 800, 30);
|
||||
contentPane.add(txtSaisie);
|
||||
|
|
@ -91,10 +128,13 @@ public class Arene extends JFrame {
|
|||
@Override
|
||||
public void keyPressed(KeyEvent e) {
|
||||
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();
|
||||
scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
|
||||
|
|
@ -132,12 +172,14 @@ public class Arene extends JFrame {
|
|||
this.jpnJeu.repaint();
|
||||
}
|
||||
public String getMessage() {
|
||||
return this.txtSaisie.getText();
|
||||
return this.txtChat.getText();
|
||||
}
|
||||
public void setMessage(String msg) {
|
||||
this.txtChat.setText(msg);
|
||||
this.txtChat.setCaretPosition(this.txtChat.getDocument().getLength());
|
||||
}
|
||||
public void ajoutTchat(String Staline) {
|
||||
this.txtChat.setText(this.txtChat.getText() + Staline + "\r\n");
|
||||
this.txtChat.setCaretPosition(this.txtChat.getDocument().getLength());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue