Bonjour à tous, je suis actuellement en train d'implémenter un jeu de puissance 4 en java, jouable par TCP. Mon IHM est en javaFX.
Le jeu fonctionne très bien sur un seul poste, mais l'implémentation du réseau me pose de gros problemes.
En effet, le mode TCP implique l'utilisation de boucle while(flux non pres) pour attendre la réponse du client ou du serveur.
J'ai ainsi un code qui ressemble au suivant :
L'instructionCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 content: [ Group { onMousePressed: function (e) { println("Evenement souris"); var maDonnee: String = null; var x = p4Board.convertPointToCoord(e.x); var y = p4Board.convertPointToCoord(e.y); println("Pose le pion"); p4Board.poserPion(x, y, Couleur.JAUNE); println("Envoie position"); p4Client.envoiePosition("{x}", "{y}"); println("Attente reponse server"); maDonnee = p4Client.attenteDonneesServer(); if(TCPCommand.ENVOIE_POSITION.equals(maDonnee)) { var position:String = p4Client.recoitDonnees(); var positionSplit:String[] = position.split(":"); var coordX: String = positionSplit[0]; var coordY: String = positionSplit[1]; p4Board.poserPion(Integer.parseInt(coordX), Integer.parseInt(coordY), Couleur.JAUNE); } } content: [ p4Board, btnStartClient ]
attend une réponse du server, elle est donc bloquante tant que le server n'a pas répondu. Or, bien que j'ai exécuté l'instructionCode:maDonnee = p4Client.attenteDonneesServer();
avant (qui passe la couleur d'un cercle présent dans la Scene a jaune lors d'un click de souris), le cercle ne passe à jaune que lorsque j'ai obtenu une réponse du server, c'est a dire lorsque ma boucle while s'est débloquée et que l'on est sorti du Bloc onMousepressed. Ceci induit un décalage d'un coup, entre le click souris et l'affichage à l'écran, le coup ne s'affichant que lo'rsque l'opposant à joué. Je ne comprends pas pourquoi il faut attendre la sorti du Block pour modifier la Scene, et je ne vois pas du tout comment résoudre ce problème. Avez vous des solutions ?Code:p4Board.poserPion(x, y, Couleur.JAUNE);
Merci d'avance :)