Tchat graphique
Thèmes :
Programmation
Réseau
Interface graphique
Difficultés :
Connaissances théoriques : Facile à moyen
Difficulté algorithmique : Facile
Niveau de programmation : Moyen à avancé (pas de véritable difficulté en dehors d'apprendre à créer des socket (v. cours de réseau) et à utiliser les fonctions élémentaires de la bibliothèque graphique Tkinter)
Le but du projet est de réaliser un logiciel de dessin à la souris collaboratif entre deux ordinateurs. Le logiciel ouvrira une fenêtre graphique sur chacun des deux ordinateurs ainsi qu'une connexion entre les deux ordinateurs. Chacun des deux utilisateurs pourra dessiner à la souris dans la fenêtre et tout dessin de l'un sera recopié sur la fenêtre de l'autre en temps réel.
Réalisation logicielle :
Connexion réseau : il s'agit donc d'écrire deux procédures, l'une client et l'autre serveur qui ouvre une socket entre les deux ordinateurs sur un canal fixé à l'avance (v. le cours de réseau) (on supposera connues leurs adresses IP)
Pour la partie graphique : on pourra utiliser la bibliothèque Python de son choix (par exemple, Tkinter) pour ouvrir un Canvas (une fenêtre graphique), sur laquelle on surveillera les mouvements de la souris en écrivant une procédure réagissant aux événements reçus :
À l'enfoncement du bouton: on enregistrera la position de la souris dans deux variables denier_x et dernier_y
Tant que le bouton est enfoncé : on tracera une ligne droite depuis (dernier_x,dernier_y) vers la position courante de la souris, puis on mettra à jour (dernier_x,dernier_y).
Transmission réseau : pour chaque segment de droite tracé, on enverra les coordonnées des extrémités à l'autre ordinateur par la socket ouverte au début de l’exécution sous la forme d'une chaîne de caractères “x1 y1 x2 y2” où x1, y1, x2, y2 sont les coordonnées entières des extrémités du segment
Réception réseau : pour chaque chaîne reçue de l'autre ordinateur, on tracera le segment correspondant dans la fenêtre.
On pourra naturellement ajouter des fonctionnalités comme le choix de la couleur (qu'il faudra à transmettre), l'épaisseur du trait, un bouton d'effacement de l'écran, une fonction d'annulation (plus dur car il faut mémoriser ce qu'il y a à effacer, ou plutôt comment redessiner l'image avant l'annulation de la dernière commande!)
Écrire le programme demandé
Proposer des variations