bonjour a tous
voila je développe un petit jeu en réseau (jeu du yin-yang, pas très connu mais très intéressant)
j'en suis a envoyé mes coups par le réseau, cela marche très bien mais j'ai un probleme au niveau de l'affichage
chaque joueur fait a tour de rôle office de serveur et de client
un coup se passe de cette manière
1) j1 choisi un coup
2)execution du coup chez j1
des labels, des images sont censés changé sur ma vue
3) envoie du coup a l'autre joueur j2
lorsque l'autre joueur recoit le coup on l'execute, la vue est bien mis a jour chez lui
4)attente chez j1 de reception du coup de l'autre joueur
c'est la que ca doit bloquer, tant qu'on n'a pas recu le coup de l'autre joueur la vue ne se met pas a jour, du coup quand on recoit le coup il fait l'affichage du coup qu'on a envoyer puis l'affichage du coup qu'on vient de recevoir
ce que j'ai essayé pour l'instant:
-faire une pause dans le programme pour que la vue ai le temps de se mettre a jour: Thread.sleep(1000);:ne marche pas
-forcer l'affichage de la jframe
majframe.repaint;:marche pas
voila j'ai plus trop de solution
je vous met un peut de code si ca peut vous aider
merci d'avance pour vos réponse
execution graphique du coup:
envoie du coup a l'autre joueur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 leCoup.executer(); //on maj le label graphique en se servant de l'attribut imageicon du pion if (leCoup.getCasedepart().estvide()) { plateauG.get(getindice(leCoup.getCasedepart())).setIcon(ICtransp); } else { plateauG.get(getindice(leCoup.getCasedepart())).setIcon(leCoup.getCasedepart().getpion(leCoup.getCasedepart().getListpion().size()-1).getImage()); } plateauG.get(getindice(leCoup.getCasearrive())).setIcon(leCoup.getCasearrive().getpion(leCoup.getCasearrive().getListpion().size()-1).getImage()); if (leCoup.getCasedepart().getNumcase()==1) { pionsJ1.setText(String.valueOf(leCoup.getCasedepart().getListpion().size()) + " pions restant"); } else if (leCoup.getCasedepart().getNumcase()==2) { pionsJ2.setText(String.valueOf(leCoup.getCasedepart().getListpion().size()) + " pions restant"); } txt_historique.setText(txt_historique.getText() + "\n" +leJoueur.getNom()+" -> pion déplacé de la case "+leCoup.getCasedepart().getNumcase()+" à la case "+leCoup.getCasearrive().getNumcase()); leJoueur=autrejoueur(); labelJcourant.setText(leJoueur.getNom()+" A VOUS DE JOUER !");
attente du coup de l'autre joueur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 try { socket = new Socket(leJoueur.getAdresse(), 7776); // construction de flux objets à partir des flux de la socket output = new ObjectOutputStream(socket.getOutputStream()); output.writeObject(leCoup); } catch (Exception e) { JOptionPane.showMessageDialog(this, "la liaison est rompu"+e); //fermer la partie }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 labelJcourant.setText("en attente de "+ leJoueur.getNom()); //on fait une pause pour l'affichage des labels //Thread.sleep(10000); //this.repai //on attend le coup de l'autre joueur serverSocket = new ServerSocket(7776); //on considère que le joueur a 30s pour jouer //voir a mettre un timer de son coté serverSocket.setSoTimeout(30000); // se met en attente de connexion de la part d'un client distant socket = serverSocket.accept(); // connexion acceptée : récupère les flux objets pour communiquer // avec le client qui vient de se connecter input = new ObjectInputStream(socket.getInputStream()); // attente les données venant du client leCoup = (coup)input.readObject();
Partager