diff --git a/src/controleur/Controle.java b/src/controleur/Controle.java index 48315a0..d5e86b4 100644 --- a/src/controleur/Controle.java +++ b/src/controleur/Controle.java @@ -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); } } diff --git a/src/controleur/GLOBAL.java b/src/controleur/GLOBAL.java index 307beb5..d6c1c42 100644 --- a/src/controleur/GLOBAL.java +++ b/src/controleur/GLOBAL.java @@ -18,4 +18,7 @@ public interface GLOBAL { int largeurPerso = 39; int hauteurPerso = 44; int hauteurMessage = 8; + + int droite = 0; + int gauche = 1; } diff --git a/src/modele/JeuClient.java b/src/modele/JeuClient.java index 06674cd..819b3a7 100644 --- a/src/modele/JeuClient.java +++ b/src/modele/JeuClient.java @@ -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); } } diff --git a/src/modele/JeuServeur.java b/src/modele/JeuServeur.java index 57198ed..908c6c5 100644 --- a/src/modele/JeuServeur.java +++ b/src/modele/JeuServeur.java @@ -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); + } } /** diff --git a/src/modele/Joueur.java b/src/modele/Joueur.java index 3d11343..613f3a0 100644 --- a/src/modele/Joueur.java +++ b/src/modele/Joueur.java @@ -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 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 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); + } /** diff --git a/src/vue/Arene.java b/src/vue/Arene.java index 61ca466..8858315 100644 --- a/src/vue/Arene.java +++ b/src/vue/Arene.java @@ -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,19 +118,23 @@ public class Arene extends JFrame { lblNewLabel.setBounds(0, 0, 792, 590); contentPane.add(lblNewLabel); - txtSaisie = new JTextField(); - txtSaisie.setBounds(0, 591, 800, 30); - contentPane.add(txtSaisie); - txtSaisie.setColumns(10); - - txtSaisie.addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - if(!Arene.this.txtSaisie.equals("") && e.getKeyCode() == KeyEvent.VK_ENTER) { - controle.evenementArene("tchat", Arene.this.getMessage()); + if(!isServer) { + txtSaisie = new JTextField(); + txtSaisie.setBounds(0, 591, 800, 30); + contentPane.add(txtSaisie); + txtSaisie.setColumns(10); + + txtSaisie.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent e) { + 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(); 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()); } }