|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité régulier
![]() Lyceen Inscription : novembre 2012 Messages : 28 ![]() |
Bonsoir,
Dans le cadre d'un projet scolaire, nous avons essayer, grace au module Socket et Tkinter, de faire deplacer un pion sur map, mais cela en reseau En gros, notre serveur affiche notre map et notre pion, pendant que le client s'occupe de le faire bouger. Seulement, lorsque le pion a fait 5 cm sur la map client, il n'a meme pas fait 2mm sur la map serveur. Le pion se deplace beaucoup moins vite sur le serveur que sur le client. Serveur : Code :
Code :
Autre chose, je commence dans le reseau, et meme dans la programmation, auriez vous des conseils pour organiser notre code, car j'ai comme l'impression qu'on a coder ca tres mal. Bonne soiree |
||||
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Bonjour,
Vous comprenez bien que si c'est lent c'est que le code est occupé à autre chose, ici principalement dans la partie réseau. Pour plus de 'réactivité' vous devez séparer GUI et réseau et cela passe (entre autre) par un thread. Le souci c'est que sous Tkinter vous ne pouvez/devez pas toucher aux éléments graphique à partir d'un thread. Une solution est de passer par le module queue: Un exemple rapide sans trop toucher a votre partie réseau. Code :
@+
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Lyceen Inscription : novembre 2012 Messages : 28 ![]() |
Merci, je vais regarder tout ca.
Une autre chose, je n'arrive pas a comprendre pourquoi lorsque je lance mon client, le pion du serv part vers le haut sans meme appui de la touche Up (J'avais deja ca avant) Autre chose, le pion va certe, beaucoup plus vite, mais il ne va toujours pas aussi vite que celui du client, il n'y aura pas moyen de les mettres a vitesse egale ? |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Bonjour,
Vous n'avez pas donner du code fonctionnel pour le moment (def up (event:None): ) : Pouvez vous donner le code que vous utilisez ? Cela vas aider pour la suite. Sinon pour votre déplacement c'est que votre variable doit sans doute être à 'UP' dans le code que vous utilisez : A voir avec du code fonctionnel pour vous. @+
__________________
Merci d'utiliser le forum pour les questions techniques. |
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Petite modification de votre client par rapport au serveur : A vous de trouver pourquoi 'UP' n'est pas envoyé dans ce cas
Code :
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#6 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Attention aux noms des objets : def up(event=None): / up = False etc...
Code :
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#7 | |||
|
Invité régulier
![]() Lyceen Inscription : novembre 2012 Messages : 28 ![]() |
Citation:
|
|||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Citation:
Côté serveur, çà attend 50ms la réception d'une nouvelle connextion puis encore 50ms secondes la réception d'un message. Enfin, çà poste un .move à faire dans 10ms: si côté serveur les appels à .move se font toutes les 100ms, çà se déplace 10 fois moins vite. Le gros soucis est que le serveur "attend" un changement de direction. Comme le déplacement sur les clients et le serveur sont "asynchrones", je ne vois pas comment ce qui sera affiché côté "serveur" pourra être "fidèle" à ce qui se passe côté clients. Il serait plus "simple" de faire que les clients expédient la position "courante" à intervalles réguliers et que le "serveur" fasse des ".move" à partir de là. Séparer réseau et interface graphique permet de construire et tester chaque partie (réseau, graphique) indépendamment l'une de l'autre. Il n'est pas indispensable de mettre la partie réseau dans un thread séparé. Mais comme vous ne savez pas trop où vous voulez aller, le coût est raisonnable. - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#9 | ||
|
Expert Confirmé
![]() Patrice BLANGARINTechnicien Help Desk, maintenance, réseau, système et + Inscription : juin 2006 Messages : 2 613 ![]() |
Bonsoir wiztricks,
Citation:
Cela impliquerais qu'il n'y est de move sur le client 'que' par rapport aux coordonnées reçues et affiner le timing réseau / que les temps d'attentes soit égaux des deux cotés. Citation:
Cela implique que les temps d'attentes soit égaux des deux cotés. @+
__________________
Merci d'utiliser le forum pour les questions techniques. |
||
|
|
00
|
|
|
#10 | ||
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Salut PauseKawa,
Citation:
Pour l'instant, pas grand chose pour décider. J'ai l'impression que le serveur aura pour fonction de "broadcaster" les changements de position des "clients" - un peu comme un "chat" -. A côté de ces "broadcasts", il faudrait réaliser: ajout d'un jouer, une gestion des jeux, des commandes de type request/response. Si c'est le cas, le choix de la techno. réseau utilisée sera sans doute à revoir. Ceci dit, c'est un projet "scolaire". On peut espérer que les enseignants l'encadrent un peu pour limiter les fonctionnalités plutôt que de laisser les élèves partir dans tous les sens et en sortir "frustrés": faire un jeu réseau avec un display graphique sans plan ni bibliothèques qui machent un peu le boulot et "cachent" les difficultés me semble "irresponsable". Citation:
Mais "techniquement", pousser la partie réseau dans un thread n'est pas indispensable. Avec les threads, réseau et interface graphique sont deux activités "asynchrones". Le asynchrone est nécessaire pour gérer les attentes et les timeouts côté réseau en gardant "fluide" l'interface graphique. Ceci dit une écriture réseau n'attend pas la lecture côté récepteur pour redonner la main à l'appelant du .send(sd, buffer). Et il n'est pas utile de "bloquer" forever lorsqu'il n'y a rien à lire: les messages non lus "attendront" d'être lus, dans la pile côté récepteur. L'interface graphique pouvant lire et écrire "sans délais" pas besoin d'avoir des activités "asynchrones". Coder cela demande une certaine expérience des "features" de la programmation avec les "sockets". Les threads "simplifient" grandement cela et "forcent" à séparer/tester indépendamment: ce qui est "mieux" même si on peut "techniquement" s'en passer. - W
__________________
Architectures Post-Modernes |
||
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Lyceen Inscription : novembre 2012 Messages : 28 ![]() |
Je suis un peu perdu x) Il y a pas mal de vocabulaire que je ne connais pas.
Autre chose, le projet n'est pas encadree par les profs, et c'est ca qui est mal fait. En gros, eux ils font leurs cours d'informatique et science du numerique, et nous on fait notre projet avec les connaissances apprises. Concretement, vous nous conseillez de nous y prendre comment au final ? |
|
|
00
|
|
|
#12 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 697 ![]() |
Commencez par décrire en français les fonctionnalités de votre jeu sur une ou deux pages. Puis essayez de voir comment les réaliser (toujours en français).
Citation:
Une fois que vous aurez décrit le quoi/comment (en français) il sera peut être intéressant d'aller en discuter avec vos profs pour voir s'ils peuvent vous aider un peu. - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com