Conception et de veloppement en Java d'un logiciel de poker en re seau

Dimension: px
Commencer à balayer dès la page:

Download "Conception et de veloppement en Java d'un logiciel de poker en re seau"

Transcription

1 Xavier GUIHOT Conception et de veloppement en Java d'un logiciel de poker en re seau Rapport d'initiative IDEE Tuteur : Fabrice FRANCES Juin Janvier 2014 ISAE - ENSICA

2

3 Table des matières Partie I. L'Architecture du logiciel Architecture globale : Architecture client : Architecture serveur : Architecture multi-clients - serveur : La base de données : Partie II. Le côté client La connexion et l'inscription : a. La connexion : b. L'inscription : c. La gestion de l'absence de liaison internet lors de la connexion : Le menu : La table : La fenêtre des statistiques et d'options : Les raccourcis clavier : Les boutons de décision en avance : Lutte contre l'addiction : Empêcher l'envoie de la même action plusieurs fois : Partie III. Le Serveur et la gestion des clients et du jeu Le jeu de cartes : Le calcul de la combinaison : Actualisation de la partie : Le tirage au sort : L'affichage des blindes : Ecoute des actions des joueurs : Recherche du joueur et de l'étape suivants : Fin d'une main : a. Fin d'une main par élimination de tous les adversaires : b. Fin d'une main par l'abattage : Les pourcentages à tapis : a. Les probabilités de gagner avant le turn et avant la river : b. Les probabilités de gagner avant le flop avec deux joueurs all-in : c. Les probabilités de gagner avant le flop avec plus de deux joueurs all-in : Partie IV. Développement logiciel

4 1. Faciliter le développement : Mise à jour automatique : Mise à niveau sur les différents systèmes d'exploitation : Gestion de la perte de connexion : L'obfuscation : Utilisation d'un serveur dédié : L'administration du serveur : Partie V. La personnalisation des composants Java Swing JButton personnalisé : JTextField personnalisé : JProgressBar personnalisée : Une JTable personnalisée : Une JScrollBar personnalisée : Une JCheckBox personnalisée : Le chat : Ajouter une icône à une fenêtre : Ajouter des info-bulles : Centrer un String : Conclusion Quantité de travail effectué : Difficultés rencontrées :

5 Etant passionné par le poker dont la popularité a décollé ces dernières années avec la légalisation autorisant les sites de poker avec argent réel, me spécialisant dans l'informatique, et souhaitant me diriger vers du développement logiciel, j ai pris l'initiative de développer en Java un logiciel de poker en réseau. Les objectifs fixés au début du projet consistaient en l'élaboration d'un logiciel de poker en réseau, utilisable en Java sur ordinateur et en Android sur Smartphone. L'utilisateur pourrait alors jouer en partie libre ou en tournois. En partie libre, il aurait accès à des tables de différents niveaux de cave 1. Le joueur aurait de plus accès à différents tournois se déroulant à intervalles réguliers. Une autre partie du projet reposait sur le développement d'une intelligence artificielle de poker. Le tout devant être ergonomique et sans disfonctionnements. 1 Cave : nombre minimum de jetons qu un joueur doit utiliser pour s'asseoir à une table. 5

6 Partie I. L'Architecture du logiciel 1. Architecture globale : Quatre programmes ont été créés pour assurer l'ensemble des fonctionnalités. On peut voir dans le diagramme de classes ci-dessous l'architecture globale du système et l'ensemble des liaisons entre classes (flèches noires) et entre programmes via des liaisons TCP/IP (flèches bleues). Ce diagramme de classes a été réalisé avec le logiciel Bouml très pratique de par sa génération plus ou moins automatique de diagrammes de classes à partir de code source Java. Le logiciel de poker étant construit autour d'une architecture client-serveur, il est composé de deux parties principales : le côté client et le côté serveur. Le côté client est le logiciel que le client va utiliser sur son ordinateur, lui permettant de jouer par le biais d'une interface graphique utilisant Java Swing. Le côté serveur est le logiciel situé sur un serveur dédié tournant en continue et s'occupant de l'ensemble des joueurs connectés et du bon fonctionnement des parties de poker. En plus de ces deux principaux programmes, ont été créés un outil d'administration du serveur et un "lanceur" permettant les mises à jour automatiques. 6

7 7

8 8

9 Figure 1 : Diagramme de classe de l'ensemble du projet. 9

10 2. Architecture client : L'utilisateur devra télécharger le dossier compressé WinABarriere.zip et le décompresser pour pouvoir lancer l'exécutable WinABarriere/WinABarriere.jar. Figure 2 : Architecture du client. Ce dossier contient le répertoire Sources/, contenant lui-même l'exécutable Client.jar et le répertoire Images/. Images/ contient l'ensemble des images utilisées par les interfaces graphiques, et Client.jar est l'exécutable contenant la partie client. WinABarriere.jar est un "lanceur" qui va permettre de vérifier si des mises à jour doivent être faites avant de lancer Client.jar. WinABarriere/ contient également un Readme.txt contenant les informations utiles à l'utilisateur, SeSouvenirDeMoi.txt où sont sauvegardés les identifiants du joueurs pour accélérer ses prochaines connexions, et Version.txt où est indiquée la version courante du logiciel que possède l'utilisateur. 10

11 3. Architecture serveur : Au niveau du serveur dédié, sont présents la base de données (BDD) au format.txt sous la forme d'un Object Java sérialisé, un Readme.txt indiquant en détail comment utiliser le serveur, un fichier JournalServeur.txt dans lequel sont sauvegardées l'ensemble des informations concernant l'état du serveur et du jeu, le dossier compressé Sources2.zip qui sera automatiquement envoyé aux utilisateurs ayant une version du logiciel périmée, et enfin l'exécutable ServerPoker.jar qui est lancé avec la ligne de commande : nohup Java -jar ServerPoker.jar &. Figure 3 : Architecture du serveur. 11

12 4. Architecture multi-clients - serveur : Au démarrage du côté serveur du logiciel, plusieurs sockets sont ouverts pour écouter les clients. Sur la figure ci-dessous, est représenté le code créant le socket écoutant les clients : Figure 4 : Ouverture du socket côté serveur écoutant les clients. L'un des sockets sur lequel le serveur écoute est celui écoutant les connections des clients dans le thread SasDeConnexion sur le port Lorsqu'un client ouvre le logiciel, un socket est créé le liant au serveur. Le serveur, dans le thread SasDeConnexion va accepter la connexion du socket client en créant un thread ClientVoulantSeConnecter. Une fois le client connecté, il est détourné vers un socket écoutant le port du serveur s'occupant des interactions entre le serveur et le client pour tout ce qui concerne les informations du menu et des statistiques du joueur. L'outil d'administration du serveur possède également une liaison avec le serveur via le port Figure 5 : Les différents ports d'écoute. Enfin, chaque table de poker est un serveur écoutant sur son propre port : 12

13 Figure 6 : Le tableau des serveurs des tables, le port utilisé étant le dernier paramètre du constructeur. Du serveur vers le client ne sont transférés via les Sockets que des objets sérialisés et quelques Strings. Ainsi on peut citer l'envoie de divers objets tels que celui contenant les informations d'une table ou encore celui contenant les informations que le client verra dans son menu. Du client vers le serveur, seules des requêtes sous forme de Strings très courts sont envoyées. En effet, le client ne fait que demander des informations alors que le serveur répond à ces questions de manière plus lourde. 13

14 5. La base de données : Au départ, la base de données a été développée avec PostgresSQL. Cependant, pour des raisons de facilité et de place mémoire sur le serveur dédié, la base de données a été remplacée par un objet Java sérialisé sauvegardé dans un fichier.txt. Au lancement du serveur, la base de données BDD.txt est lue et transformée en un objet Java. Pendant l'ensemble des phases du jeu, la base de données, c est-à-dire l'objet Java sérialisé, va être modifiée. On pourra par exemple ajouter les gains d'une main au joueur gagnant, créer un nouveau joueur Ainsi toute la gestion de la base de données se passe dans le code. Pour être sûr que la base de données soit utilisable au redémarrage du serveur, il faut la sauvegarder régulièrement. Pour cela, un timer, nommé TimerTrenteSecondes, sauvegarde toutes les 30 secondes l'objet Java sérialisé représentant la base de données dans le fichier BDD.txt. La base de données est de plus sauvegardée quotidiennement. Pour ce faire, elle est automatiquement envoyée à ma messagerie personnelle tous les jours à minuit. L'objet sérialisé BDD comprend une variable représentant le nombre total de mains jouées par les joueurs ainsi que la liste de tous les joueurs inscrits : Figure 7 : L'objet BDD sérialisé représentant la base de données. Un joueur est représenté dans la base de données par l'objet sérialisé JoueurBDD. Les variables représentant un joueur dans JoueurBDD sont son pseudo, son mot de passe, son adresse mail, sa date de naissance, son bankroll 2, son nombre de mains jouées, ses nombres de jours gagnants et perdants, sa date d'inscription, ses options (couleur de fond, raccourcis clavier, ) et trois tableaux contenant l'historique de son bankroll sur une semaine, sur un mois et sur six mois (tableaux d'entiers de longueurs autour de 150). Au niveau utilisation mémoire, on arrive ainsi pour chaque joueur à un peu moins de 3Ko. 2 Bankroll : Nombre total de jetons que possède le joueur sur le logiciel. 14

15 Figure 8 : L'objet sérialisé utilisé par l'objet BDD, représentant un joueur. 15

16 Figure 9 : Récupération de la base de données au démarrage du serveur. La classe ActionBDD contient un ensemble de méthodes statiques permettant d'interagir avec la base de données. Le timer TimerTrenteSecondes possède la méthode sauverbdd() qui permet l'enregistrement de la base de données modifiée lors des 30 dernières secondes dans le fichier BDD.txt. Figure 10 : Sauvegarde de la base de données. 16

17 Partie II. Le côté client 1. La connexion et l'inscription : a. La connexion : A l'exécution du client, une connexion avec le serveur est créée par l'intermédiaire d'un socket TCP Java. Lorsque l'ensemble des champs demandés sont renseignés, et que le client demande à se connecter, une requête est envoyée au serveur avec l'ensemble des informations de connexion. Si les informations correspondent à celles d'un joueur existant dans la base de données, si le client n'est pas déjà connecté avec un autre compte sur son ordinateur (comparaison de l'adresse IP avec celle des joueurs connectés) et si ce compte n'est pas déjà connecté sur un autre ordinateur, alors le serveur répond favorablement à la demande de connexion. Figure 11 : La fenêtre de connexion. Sont demandés lors de la connexion le pseudo, le mot de passe et une date de naissance. Si la check-box est cochée au moment de la connexion, alors sont sauvegardés l'identifiant et la date de naissance dans le fichier WinABarriere/SeSouvenirDeMoi.txt via un objet sérialisé. Ainsi, lors de la prochaine connexion, les champs de texte du pseudo et de la date de naissance seront automatiquement remplis. L'utilisateur n'aura ainsi plus qu'à rentrer son mot de passe. Une fois les différents champs complétés, l'utilisateur peut demander à se connecter par l'intermédiaire du bouton "SE CONNECTER" ou en pressant la touche "entrée". En effet, à chaque JTextField est associé un KeyListener (composant awt) écoutant la touche "entrée". b. L'inscription : Le bouton "S'INSCRIRE" de la fenêtre connexion permet quant à lui d'accéder à la fenêtre d'inscription visible ci-dessous : 17

18 Figure 12 : La fenêtre d'inscription. L'inscription requiert un pseudo, un mot de passe, une adresse mail et une date de naissance. A chaque perte de focus d'un champ de texte, est demandé au serveur si l'information, est pertinente ou non. On vérifie ainsi que le pseudo n'existe pas déjà, que les deux champs de texte demandant le mot de passe sont identiques, que l'adresse mail est plausible (un au milieu, un '.' avant la fin, et pas de caractères spéciaux) et que la date de naissance existe. Si l'information renseignée n'est pas bonne, alors celle-ci est coloriée en rouge. Lorsque le client demande à s'inscrire, le serveur va vérifier les informations et leur validité. Si toutes les conditions d'inscription sont remplies alors le serveur va créer un nouveau joueur dans la base de données et envoyer un mail de confirmation d'inscription grâce à l'api JavaMail. Les identifiants du joueur lui sont rappelés, l'expéditeur du mail étant : Figure 13 : Mail de confirmation d'inscription. 18

19 Figure 14 : Comment utiliser JavaMail pour envoyer ce mail de confirmation. Que ce soit dans le cas de la connexion ou de l'inscription, si les informations transmises au serveur sont bonnes, alors le serveur autorise le client à ouvrir le jeu, en lui ouvrant la fenêtre du menu. c. La gestion de l'absence de liaison internet lors de la connexion : Dans le cas où le client n'est pas connecté à internet, ou s'il utilise un réseau dont la majorité des ports sont bridés, il tombera sur la fenêtre suivante. Si la perte de connexion internet n'est que provisoire, il pourra essayer de se reconnecter grâce au bouton "SE RECONNECTER" tentant de recréer le socket liant le client au serveur. 19

20 Figure 15 : La fenêtre de non connexion internet. 20

21 2. Le menu : Une fois le joueur connecté, le menu remplace la fenêtre de connexion. Sont affichés le bankroll du joueur et les différentes tables de parties libres où il peut s'asseoir. Il existe différents niveaux de tables accessibles. En fonction de son bankroll, le joueur pourra ainsi jouer à des niveaux de blinde 3 allant de 10 à jetons. Figure 16 : Le menu. Le joueur a plusieurs possibilités pour s'asseoir à une table. Il peut par exemple double-cliquer sur une ligne du tableau des tables (le tableau est une JTable de Java Swing), par exemple sur Nice Sont affichées pour chaque table de cette JTable, son nom, sa hauteur de blinde et le nombre de joueurs présents. Le joueur peut aussi cliquer sur une ligne de la JTable pour afficher plus d'informations sur la table sélectionnée dans le cadre en bas à gauche. Il verra alors les places où il peut s'asseoir sous forme de boutons "S'ASSEOIR" et n'a plus alors qu'à cliquer sur l'un de ces boutons. Enfin, si la table n'a plus de places libres, il peut utiliser le bouton "LISTE D'ATTENTE" et sera mis en attente d'une place libre. La fenêtre de la table apparaîtra automatiquement lorsqu'une place se libère. Il faut bien faire attention à empêcher un joueur de s'asseoir deux fois à la même table. Si le joueur tente cette action, il lui sera réaffiché la table où il est déjà assis. Sur les petites tables dessinées en bas à gauche, pour éviter que des caves trop importantes ne dépassent des cadres, on utilise les abréviations K pour un millier et M pour un million. Ainsi, une cave de jetons devient dans la micro-table 3M. Sur la figure ci-dessous, une cave de jetons est devenue sur la micro-table 1K. 3 Blinde : mise obligatoire versée par deux joueurs avant la distribution des cartes. 21

22 Figure 17 : Exemple d'abréviation : 1250 jetons deviennent 1K sur la micro-table. Figure 18 : Code associé à la réduction de la taille de l'affichage du stack. Le menu est réactualisé par le serveur toutes les 30 secondes grâce au timer TimerTrenteSecondes. Pour cela, le serveur transmet l'objet sérialisé InfoMenu, contenant l'ensemble des informations du menu du joueur (cet objet contient également les données de la fenêtre compte). Figure 19 : InfoMenu, l'objet sérialisé permettant le transfert des données du menu et du compte. On reçoit ainsi pour le menu via l'objet InfoJoueur, les informations des différentes tables et du bankroll du joueur. 22

23 3. La table : La fenêtre représentant la table est la fenêtre que l'utilisateur aura le plus souvent sous les yeux. Il faut donc avant tout, créer une belle image qui va servir de fond à cette fenêtre. Figure 20 : L'image de fond. Une fois la table ouverte par un utilisateur, il va lui être proposé de s'asseoir. Pour cela, on pose des boutons au niveau de chaque place libre (que ce soit pour une table de 2, de 6 ou de 9 joueurs). Ainsi, lorsque le joueur clique sur l'un de ces boutons, les options pour prendre une place vont s'afficher dans le cadre en bas à droite. Par défaut, il lui est proposé de s'asseoir avec la plus petite cave possible, mais il peut choisir le nombre de jetons qu'il veut utiliser grâce à une JSlider (composant Java Swing permettant de faire glisser un curseur sur une barre). De plus les boutons "MINIMUM" et "MAXIMUM" permettent de choisir rapidement de déposer le minimum (20 blindes) ou le maximum (100 blindes) de jetons possible. Une fois le montant choisi, il ne reste plus qu'à cliquer sur le bouton bleu "S'ASSEOIR" et le joueur est placé à la place qu'il a choisie. Figure 21 : S'asseoir à la table. Une fois assis, si personne n'est encore présent à la table, on attend qu'un autre joueur s'assoie pour démarrer le jeu. Le cadre an bas à droite est réservé aux indications de jeu et aux boutons permettant de prendre des décisions. 23

24 Figure 22 : Une fois assis. Le bouton "PLACE" situé en haut de la fenêtre permet à tout moment de faire une permutation circulaire des places autour de la table : Figure 23 : Permutation circulaire de la table. Lorsqu'un joueur est absent, que ce soit parce qu'il l'a demandé en ayant appuyé sur le bouton "S'ABSENTER" ou parce qu'il n'a pas joué dans les 30 secondes qui lui étaient imparties, alors son cadre est grisé. Pour revenir, il lui suffit de cliquer sur le bouton "REVENIR". Figure 24 : Cadre grisé d'un joueur absent. 24

25 4. La fenêtre des statistiques et d'options : Un logiciel de poker n'est rien s'il ne propose pas un ensemble d'options, de statistiques de jeu ou encore de raccourcis clavier. L'ensemble de ces informations sont contenues dans la fenêtre des statistiques et sont réactualisées toutes les 30 secondes en même temps que les informations du menu. Figure 25 : La fenêtre des statistiques et de choix des options. En haut à gauche : le classement général. Les joueurs sont affichés ainsi que leurs bankroll du premier au dernier. Pour repérer son classement, il suffit de regarder quelle ligne est surlignées en bleu. Lors de l'ouverture de cette fenêtre, la ligne affichée par défaut est celle correspondant au joueur. On centre cette ligne au milieu de la JTable, en affichant deux joueurs au-dessus et deux en dessous. Figure 26 : Affichage par défaut de la ligne du joueur au milieu de la JTable. Figure 27 : Code permettant de mettre la vue de la JTable sur la ligne du joueur. En bas à gauche : les données globales du site. Sont affichés le nombre de joueurs connectés et le nombre de joueurs inscrits ainsi que le mail permettant de prendre contact avec l'administrateur. En haut au milieu : les statistiques du joueur. Sont affichés sa date d'inscription, le nombre de ses jours gagnants et perdants (nombre de jours où le joueur a gagnés ou perdu des jetons), le nombre total de ses mains jouées, son profit par main (le bankroll du joueur moins 1000 jetons divisé par le nombre de main jouées) et son profit par jour (le bankroll du joueur moins 1000 jetons divisé par le nombre de jours où le joueur a joué). 25

26 Au milieu : deux options. Le joueur peut choisir en cochant la case "rebuy automatique" de pouvoir recaver automatiquement en jeu à chaque nouvelle main à la cave maximale autorisée. Cela permet, si la cave maximale autorisée est de 1000 jetons et qu'il a perdu 150 jetons lors de sa dernière main, de jouer la main suivante avec 1000 jetons de manière automatique au lieu de 850. L'option "checker au lieu de passer si check possible" permet quant à elle, lorsque le joueur a la possibilité de checker 4 et qu'il appuie par inadvertance sur passer, de le faire checker au lieu de passer. Ces deux options font parties des attributs du joueur dans la base de données. Les quatre carrés de couleur au milieu permettent de changer le thème de fond des fenêtres. Le joueur peut ainsi choisir d'avoir un fond bleu clair, bleu foncé, marron ou violet. Cette option est aussi sauvegardée dans la base de données. Elle se caractérise simplement par le changement de l'image peinte en fond. Figure 28 : Les 4 couleurs de thème. Au milieu en bas : les graphiques d'évolution du bankroll. Trois graphiques accessibles via les boutons "UNE SEMAINE", "UN MOIS" et "SIX MOIS" donnent l'évolution du bankroll du joueur sur les périodes correspondantes. 4 Checker : action consistant à continuer à jouer sans miser de jetons si personne n'a relancé. 26

27 Figure 29 : Les graphiques d'évolution du bankroll. Pour réaliser ces courbes, on utilise l'ensemble des points qui ont été régulièrement sauvegardés dans la base de données. En effet, chaque joueur possède dans la base de données trois tableaux d'entiers contenant par exemple 168 cases (7 jours * 24 heures) pour celui de la semaine. La première case contient le bankroll que le joueur a pour l'heure en cours, la deuxième contient le bankroll que le joueur avait une heure auparavant et ainsi de suite. Le timer TimerTrenteSecondes du serveur va regarder toutes les trente secondes si par rapport à trente secondes auparavant, on est passé d'une heure à une autre. Si c'est le cas, alors pour tous les joueurs de la base de données, le serveur va décaler l'ensemble des valeurs d'une case vers la droite et remplacer la première par le bankroll courant. Il en va de même pour le tableau du mois contenant 120 cases (30 jours * 4 relevés par jours) et modifié à 6 heures, midi, 18 heures et minuit et le tableau de la demi année contenant 180 cases (6 mois * 30 jours) et modifié tous les jours à minuit. 27

28 Figure 30 : Timer mettant à jour si besoin les graphiques d'évolution du bankroll. Figure 31 : Méthodes de modification des tableaux des données des graphiques dans la base de données. 28

29 Au niveau du graphisme, on récupère le minimum et le maximum des valeurs de la courbe et on dessine des lignes entre chaque point de la courbe. On ajoute aussi des lignes noires permettant de bien distinguer les passages d'une période à l'autre, c est-à-dire les passages d'un jour à l'autre pour le graphique d'une semaine par exemple. On dessine enfin les indications d'abscisse et d'ordonnée. Figure 32 : Exemple du dessin des légendes du graphique d'évolution du bankroll sur la semaine. Figure 33 : Exemple du dessin de la courbe de l'évolution du bankroll sur la semaine. En haut à droite : les raccourcis clavier. Les raccourcis clavier permettent au joueur d'effectuer l'ensemble des actions de jeu depuis le clavier. Cette zone de la fenêtre lui permet de les modifier en remplaçant la lettre ou suite de lettres représentant le raccourci actuel par la nouvelle touche. Une fois le raccourci modifié, en pressant le bouton "APPLIQUER" le joueur envoie la nouvelle touche de raccourcis au serveur qui va l'enregistrer dans la base de données. 29

30 Figure 34 : La zone de modification des raccourcis. En bas à droite : la variation du jour. La variation du jour indique le pourcentage d'amélioration du bankroll depuis minuit. Si la variation depuis minuit est positive, alors le texte de la variation sera dessiné en vert. Sinon il sera dessiné en rouge (variation positive en vert sur la figure de droite ci-dessous). De plus, à chaque fois que le TimerTrenteSecondes s'enclenche et à chaque fois qu'une main se finit, le menu étant réactualisé, le logiciel compare l'ancienne valeur du bankroll (celle d'il y a quelques secondes) à la nouvelle et si elle est supérieure, la variation est encadrée en vert pendant un court instant. Sinon, elle est encadrée en rouge. Figure 35 : L'affichage du bankroll et de la variation du jour. Figure 36 : Affichage de la variation du jour. 30

31 Figure 37 : Dessin du cadre rouge ou vert montrant la variation sur les dernières secondes. Enfin, le bouton "RECHARGER" en bas à droite permet aux joueurs passés sous les 1000 jetons de repasser à 1000 jetons. 31

32 5. Les raccourcis clavier : Les raccourcis clavier permettent de ne plus avoir à manipuler la souris et ainsi de minimiser le nombre de mouvements à effectuer. Figure 38 : Les touches des raccourcis clavier sont rappelées sur les boutons correspondant. Pour cela, il suffit d'ajouter un MouseListener au JPanel de la table, réagissant pour la figure ci-dessus par exemple, à la pression sur la touche A pour passer, sur la touche Z pour checker, sur la touche E pour relancer Un autre raccourci clavier utilisable et paramétré par défaut par la touche Espace permet de mettre au premier plan et de donner le focus à la table du joueur où la décision à prendre est la plus pressante. Figure 39 : Exemple du raccourci clavier d'affichage de la table la plus pressante. Les raccourcis clavier sont sauvegardés dans la base de données et restitués au logiciel client lorsque l'utilisateur se connecte. 32

33 6. Les boutons de décision en avance : Les boutons de prise de décision en avance permettent au joueur de sélectionner l'action qu'il effectuera lorsque ce sera son tour. Ainsi il peut se concentrer sur une autre table pendant que la table où il a pris sa décision en avance jouera automatiquement pour lui. Figure 40 : Les boutons de prise de décision en avance. 33

34 7. Lutte contre l'addiction : Pour lutter contre l'addiction, une fenêtre d'avertissement s'ouvre automatiquement à chaque fois que le joueur a passé 2 heures de plus à jouer. Figure 41 : L'avertisseur de temps de jeu. La fenêtre d'avertissement est particulière du fait de l'utilisation de la méthode setalwaysontop(true) qui force son placement au-dessus de toutes les autres fenêtres, y compris des fenêtres d'autres programmes. Ainsi, on est sûr que le joueur la voit. Elle est réaffichée toutes les deux heures. 34

35 8. Empêcher l'envoie de la même action plusieurs fois : Un problème à résoudre absolument est la possibilité de pouvoir utiliser un bouton d'action plus d'une fois et par là la possibilité d'envoyer au serveur une action plusieurs fois et qui serait traitée plusieurs fois. On veut par exemple éviter qu'un joueur ne puisse relancer 2 fois au même moment en cliquant deux fois très rapidement sur le bouton "RAISE". Il en va de même pour la connexion, on ne souhaite pas que le joueur puisse se connecter deux fois parce qu'il a réussi à appuyer deux fois sur le bouton connexion. Pour ce faire, on utilise un booléen global nommé actionencoursdenvoie qui est placé à true lorsqu'une action est communiquée au serveur et remise à false (dans ReceptionPartie) lorsque le serveur répond en envoyant les données actualisées de la partie. Ainsi, en vérifiant que actionencoursdenvoie n'est pas à true lorsqu'on appuie sur un bouton (dans l'actionlistener associé au bouton) ou lorsqu'on utilise un raccourci clavier (dans le MouseListener associé au raccourci clavier), on peut empêcher l'envoie multiple de la même action. Figure 42 : ActionListener possédant une barrière empêchant l'envoie simultané de la même action. 35

36 Partie III. Le Serveur et la gestion des clients et du jeu 1. Le jeu de cartes : Un jeu de cartes au poker est représenté par 52 cartes, elles-mêmes représentées par une couleur et une hauteur. La méthode suit(carte carte) de l'objet Carte représenté ci-dessous permet de vérifier si une carte suit immédiatement une autre carte. Figure 43 : Une carte. Figure 44 : La couleur d'une carte. 36

37 Figure 45 : La hauteur d'une carte. Le jeu de cartes est donc représenté par un tableau de 52 cartes nommé jeu[]. La méthode melanger() repose sur le changement de place aléatoire dans le tableau de chacune des cartes. La méthode tirerunecarte() mélange le jeu de cartes autant de fois que nécessaire pour que jeu[1] contienne une carte à tirer (lorsqu'une carte est tirée, elle est retirée du jeu de cartes et la case correspondante de jeu[] est mise à null). Enfin, la méthode tirercartescommunes() permet de tirer les 5 cartes qui apparaîtrons sur le plateau de jeu. 37

38 Figure 46 : Un jeu de cartes. Une étape envisageable serait le remplacement du random de Java par une autre méthode de création de hasard dans le but de renforcer la sécurité et le caractère aléatoire du tirage des cartes. Certains sites de poker payant se basent par exemple sur la température de leur serveur ou sur le mouvement de la souris de leurs clients. 38

39 2. Le calcul de la combinaison : Un logiciel de poker a besoin de calculer rapidement et efficacement les combinaisons de poker. En effet, le calcul d'une combinaison intervient lors de la recherche du gagnant, de l'affichage des probabilités de gagner et de l'indication au joueur du type de main qu'il possède. Une combinaison de poker en Texas Hold'em est la meilleure combinaison de 5 cartes parmi 7 cartes (les 2 pocket-cards 5 et les 5 cartes du plateau). Nous allons découvrir ici une manière parmi d'autres de calculer la puissance d'une main. Pour pouvoir quantifier une combinaison, il faut transformer une entrée formée de 7 cartes en une sortie numérique (un entier) permettant de comparer la puissance de la combinaison par rapport à d'autres. Non seulement il faut classer la combinaison (suite, couleur, brelan ), mais il faut aussi prendre en compte dans la sortie diverses autres informations. Par exemple, la puissance d'une couleur doit tenir compte de la carte la plus haute de cette couleur : la couleur AJ943 est plus forte que la couleur KQ852. De même, si deux joueurs ont la même paire, il faut tenir compte des autres cartes de la main : la paire KKJ67 est plus forte que la paire KK983. Lors de l'initialisation de l'algorithme, on remplit en fonction des cartes placées en entrée, trois tableaux : un tableau de longueur 4 (4 couleurs) contenant le nombre de cartes de chaque couleur, un tableau de longueur 13 (13 hauteurs) contenant le nombre de cartes de chaque hauteur, et un tableau de booléens à deux dimension de taille 13 (13 hauteurs) sur 4 (4 couleurs) dont les cases sont à true si la main possède une carte de cette hauteur et de cette couleur. Ces tableaux permettent de visualiser très facilement le fonctionnement de l'algorithme et de l'optimiser. Figure 47 : Initialisation du calcul de la combinaison. On cherche ensuite les classes de combinaison possibles dans l'ordre décroissant de puissance (Quinte flush royale, Quinte flush, Carré, Full, Couleur, Suite, Brelan, Double Paire, Paire puis Carte haute) afin de sortir de l'algorithme au plus tôt. En effet, comme on doit retourner la combinaison la plus puissante, il ne servirait à rien de commencer à regarder si l'on a une simple paire bien qu'elle soit plus probable. Une fois la classe de la combinaison trouvée, on va déterminer la puissance de cette combinaison dans sa classe. Ainsi, on renverra par exemple pour une quinte flush hauteur 5 et pour une quinte flush hauteur roi. 5 Pocket-cards : Les deux cartes que le joueur à en main. 39

40 Figure 48 : Exemple de la recherche de la quinte flush. Figure 49 : Exemple de la recherche du carré. Une fois ces informations trouvées, on sort de l'algorithme sans chercher à trouver les combinaisons plus faibles. L'algorithme de calcul de combinaison a été soumis à une série de tests sous JUnit afin d'être sûr de son fonctionnement. 40

41 Figure 50 : Exemple de tests validant le calcul de combinaison. 41

42 3. Actualisation de la partie : Pour actualiser la partie, et ainsi montrer graphiquement l'avancement du jeu aux joueurs, le serveur va envoyer à chaque joueur présent à la table l'objet sérialisé InfoPartie contenant l'ensemble des données de la partie. Cet objet contient entre autre la liste de tous les joueurs à la table (liste d'objets sérialisés InfoJoueur) contenant les informations relatives à chaque joueur, ainsi que les cartes communes, l'étape du jeu On fera bien attention lors de l'envoie de n'envoyer à chaque joueur que ses cartes et pas celles des autres joueurs. En effet, on aurait une faille de sécurité, car toute personne voulant modifier le code pourrait alors savoir ce que les autres joueurs ont en main. Il en va de même pour les cartes communes du plateau qui n'ont pas encore été affichées. La méthode est synchronisée pour éviter d'envoyer aux joueurs des informations différentes si la partie est modifiée lors de l'envoie. Figure 51 : Envoie des données de la partie. Côté client, un thread nommé ReceptionPartie s'occupe d'écouter ce qu'envoie la méthode envoiedonneepartie ci-dessus pour actualiser l'ensemble des éléments graphiques permettant au joueur de suivre l'évolution de l'état de la partie. 42

43 4. Le tirage au sort : Lorsqu'un joueur s'assoie et qu'on atteint un nombre de deux joueurs assis et non absents, alors on peut démarrer le jeu. Pour ce faire, il faut choisir quel sera le joueur qui sera dealer 6 en premier. Pour cela on va tirer deux cartes, une pour chaque joueur, les afficher et le joueur dont la carte sera la plus haute deviendra dealer. Cidessous, le joueur ayant un valet sera dealer. Figure 52 : Le tirage au sort. Les différentes étapes du tirage sont séparées et placées dans des timers non cyclique (setrepeats(false)) qui seront lancés l'un après l'autre. La première étape consiste en l'actualisation du statut des deux joueurs commençant à jouer (joueurs dont les booléen "estassis" et "jouelaprochainemain" sont à true). Si l'un d'entre eux était absent ou couché (booléens "estabsent" et "estcouche"), on le remet dans les états non absent et non couché. Cette initialisation des paramètres est placée dans un premier timer, qui envoie ces informations aux joueurs avec la méthode envoiedonneepartie(). 6 Dealer : donneur fictif des cartes. 43

44 Figure 53 : Initialisation du tirage. Vient ensuite le tirage en lui-même. Pour cela, est créé un jeu de cartes dont on tire une carte pour chaque joueur. On évitera le tirage de deux cartes de même hauteur en continuant à tirer une carte tant que les deux cartes sont de la même hauteur. On place ensuite les cartes tirées dans les variables cartetirage des deux joueurs et on envoie les données de la partie avec un nouveau timer pour que les joueurs puissent observer les cartes tirées. Figure 54 : Le tirage en lui-même. 44

45 Une fois un délai de 2,5 secondes écoulé laissant aux joueurs le temps de bien observer les cartes tirées, on commence le jeu en lançant l'affichage du prélèvement des blindes via le Thread AffichageBlindes. Le booléen jeuencour est alors placé à true. Figure 55 : La fin du tirage et le début du jeu. 45

46 5. L'affichage des blindes : L'affichage des blindes s'effectue au début de chaque nouvelle main. Cette étape consiste à prélever une demi-blinde au joueur situé à la gauche du dealer et une blinde au joueur situé à gauche du joueur en demi-blinde. Figure 56 : L'affichage des blindes. La première étape consiste en la recherche des joueurs small-blinde 7 et big-blinde 8. Pour cela, on part de la position du dealer sur la table, et on regarde chaque place dans le sens horaire si un joueur y est assis et n'est ni couché ni absent (tableau pseudodesjoueursjouant). 7 Small-blinde : joueur dont on prélève la moitié d'une blinde. 8 Big-blinde : joueur dont on prélève une blinde. 46

47 Figure 57 : Recherche des joueurs small-blinde et big-blinde. On utilise ensuite deux timers, l'un affichant le prélèvement de la small-blinde et l'autre celui du big-blinde. Il faut faire attention au cas où le joueur subissant le prélèvement a un tapis 9 plus petit que le prélèvement. Cette situation pouvant provoquer une situation de jeu à tapis dès l'affichage des blindes. Ci-dessous est affiché le timer du prélèvement de la big-blinde, celui de la small-blinde étant très similaire. 9 Etre à tapis : fais d'avoir misé tous ses jetons. 47

48 Figure 58 : Exemple du prélèvement de la big-blinde. Ci-dessous, le code déterminant si on est en situation de tapis suite au prélèvement d'une blinde d'un joueur ayant un nombre de jetons trop faible. Cette situation se déclenche s'il ne reste qu'un joueur ayant des jetons parmi les joueurs jouant. Si tel est le cas, est lancé le thread TraitementTapis. 48

49 Figure 59 : Traitement du cas d'un joueur ayant trop peu de jetons, entraînant une situation de tapis. Une fois les deux blindes affichées, on lance le jeu. On tire d'abord les cartes communes et les cartes des joueurs. On cherche ensuite le joueur devant prendre en premier une décision (variable aquidejouer de InfoPartie), situé à gauche du joueur en big-blinde. Est alors noté le moment du début du tour de décision du premier joueur (servertable.debuttimer) pour afficher, côté client, l'avancement de la barre de progression. Est aussi activé le timer timerabsence qui permettra au serveur, si le joueur ne joue pas dans son temps imparti, de le mettre absent. 49

50 Figure 60 : Lancement du jeu après l'affichage des blindes. C'est aussi durant cette étape qu'on effectue le rebuy automatique des joueurs ayant demandés cette option. Pour cela, il suffit de regarder la différence entre la cave maximale autorisée à cette table et le tapis du joueur et de vérifier s'il a suffisamment de jetons en bankroll pour effectivement recaver. 50

51 Figure 61 : Rebuy automatique pour les joueurs utilisant cette option. Et c'est aussi au moment de l'affichage des blindes que l'on en profite pour incrémenter le nombre de mains jouées par chaque joueur et le nombre de mains jouées sur le site. Figure 62 : Incrément du nombre de mains jouées. 51

52 6. Ecoute des actions des joueurs : L'ensemble des actions demandées par les joueurs sont écoutées au niveau du serveur dans les threads Joueur associés à chaque joueur. Ainsi, on écoute si le joueur veut s'asseoir, se coucher, relancer, s'absenter Les demandes d'action envoyées sont en fait des Strings suivant une syntaxe précise. Par exemple, si le joueur demande à s'asseoir, le String envoyé au serveur est de la forme "a31000". Le serveur analyse le premier caractère du String envoyé et celui-ci étant un 'a', il comprend qu'il s'agit d'asseoir le joueur. Si ce caractère avait été un 'r', c'aurait été le signe que le joueur relance, et ainsi de suite. En reprenant l'exemple, ayant compris qu'il s'agit d'asseoir le joueur, le serveur va lire le deuxième caractère du String qui correspond au numéro de la place sur la table que le joueur a demandé. Ici, il s'agit de la 3 ème place. Enfin, le serveur va lire tous les caractères suivants qui correspondent au nombre de jetons que le joueur veut utiliser à savoir pour cet exemple, 1000 jetons. Figure 63 : Ecoute par le serveur des actions du joueur. 52

53 Voici le traitement de l'action très simple répondant à la demande de se coucher. Le serveur modifie quelques variables représentant l'état du joueur. Ainsi, le joueur prend les statuts couché (booléen estcouche à true), a pris une décision dans ce tour de jeu (booléen aparlé à true) et sa mise est placée à 0 (Integer mise à 0). Le thread JoueurSuivant est lancé à chaque fois qu'un joueur a pris une décision, que ce soit pour se coucher, relancer Ce thread recherche qui est le joueur suivant devant prendre une décision, s'il faut passer à l'étape suivante, si la main est finie ou s'il faut afficher les pourcentages de tapis. Figure 64 : Réaction du serveur suite à une demande du joueur pour se coucher. Cela se complique un peu lorsque le joueur demande à suivre la mise du joueur précédent ou à relancer. En effet, il faut alors vérifier que la mise à suivre (servertable.miseasuivre) n'est pas supérieure au stack 10 du joueur. Figure 65 : Réaction du serveur suite à une demande du joueur pour suivre. Pour reprendre l'exemple consistant à asseoir un joueur, la place et le nombre de jetons étant contrôlés du côté client pour éviter d'asseoir le joueur sur une place déjà prise ou de lui autoriser l'utilisation de plus jetons qu'il ne possède, le serveur va ensuite pouvoir changer l'état du joueur en spécifiant qu'il est assis (booléen estassis à true) et qu'il souhaite jouer la prochaine main (booléen jouelaprochainemain à true) dans InfoJoueur. Enfin, si c'est le deuxième joueur en attente de jouer, on peut démarrer la partie en lançant un thread Tirage. 10 Stack : Montant du tapis d'un joueur, c est-à-dire le nombre de jetons qu'il possède à la table. 53

54 Figure 66 : Demande d'un joueur pour s'asseoir. L'objet Joueur écoute un certain nombre d'autres informations, telles que la demande de recavage, de mise en attente ou de retour dans la partie, de sortie de table et d'envois de messages. 54

55 7. Recherche du joueur et de l'étape suivants : Un thread JoueurSuivant est lancé à chaque fois qu'un joueur a pris une décision de jeu. C'est cet objet qui va déterminer qui est le prochain joueur devant prendre une décision de jeu, s'il faut passer d'un tour d'enchère à un autre (passer par exemple du flop 11 au turn 12 ), lancer le traitement d'un tapis, recommencer une main Tout d'abord et peu importe l'étape à laquelle on se trouve, on vérifie s'il faut s'occuper d'un tapis (tous les joueurs non couchés (sauf peut-être un ayant plus de jetons que les autres) ont misés l'ensemble de leurs jetons) ou si un joueur a fait se coucher tous les autres. Dans le premier cas, on lance le thread TraitementTapis et dans le second le thread FinMainParElimination. Figure 67 : Recherche au début de JoueurSuivant d'une situation de tapis ou de fin de main. On cherche ensuite quel est le joueur suivant devant prendre une décision. Un joueur est éligible à la prise de décision s'il est le premier joueur à gauche du joueur venant de prendre une décision, s'il n'est ni couché ni absent et s'il n'est pas déjà à tapis. Figure 68 : Recherche du joueur suivant. Vient ensuite la recherche du passage à l'étape suivante (passage au tour d'enchère suivant, par exemple s'il faut passer du turn à la river 13 ). Pour ce faire, on détermine d'abord la plus grosse mise des joueurs non couchés. 11 Flop : les trois cartes communes affichées après le premier tour d'enchères. 12 Turn : la 4 ème carte commune affichée. 13 River : la 5 ème et dernière carte commune affichée. 55

56 Pour ne pas passer à l'étape suivante, il suffit qu'un joueur ne soit pas couché et puisse suivre la mise la plus importante misé jusqu'alors (qu'il n'ait pas misé la plus grosse mise et qu'il lui reste des jetons à miser) ou alors tout simplement qu'il n'ait pas encore parlé pendant ce tour d'enchère (tous les joueurs doivent avoir parlé (pris une décision) avant de passer au tour d'enchère suivant). On modélise l'étape courante dans InfoPartie avec l'entier indiceetape compris entre 0 et 3 : 0 pour le pré-flop 14, 1 pour le flop, 2 pour le turn et 3 pour la rivière. Figure 69 : Recherche du passage au tour d'enchère suivant. Si l'on ne peut pas encore passer à l'étape suivante, alors on donne simplement la parole au joueur suivant. Si au contraire on passe à l'étape suivante, alors il faut effectuer quelques actions supplémentaires. Premièrement, on réinitialise le statut des joueurs non couchés : la mise affichée devant les joueurs est replacée à 0 et leur booléen aparle est remis à false. Il faut de plus chercher à nouveau le joueur devant prendre une décision. En effet, quand on passe à l'étape suivante, le joueur devant parler est le premier non couché situé à gauche du dealer. Enfin, il faut traiter le cas du passage à l'étape suivante après la river : à cette étape, les tours d'enchère sont finis et on lance le thread FinMain s'occupant de la répartition des gains et du passage à la main suivante. 14 Pré-flop : premier tour d'enchères lorsqu'aucune carte commune n'est encore dévoilée. 56

57 Figure 70 : Traitement du passage à l'étape suivante. 57

58 8. Fin d'une main : Il y a deux façons de terminer une main : soit en forçant tous les joueurs à se coucher, soit en allant jusqu'au bout de tous les tours d'enchères pour voir l'abattage 15. La première des possibilités étant gérée par le thread FinMainParElimination et la deuxième par le thread FinMain. a. Fin d'une main par élimination de tous les adversaires : Lorsqu'un jouer a réussi à forcer tous ses adversaires à se coucher (en misant de telle sorte qu'aucun adversaire n'ai envie de le suivre en risquant autant de jetons), le thread FinMainParElimination prend le relais pour lui distribuer ses gains. Figure 71 : Distribution des gains au gagnant. Une fois la distribution des gains faite, on réinitialise les paramètres de la partie pour recommencer une nouvelle main. On fera bien attention à ne pas relancer une donne s'il n'y a pas suffisamment de joueurs. En effet, si l'on a moins de deux joueurs, alors le jeu doit être arrêté. Si au contraire le jeu peut continuer, alors on lance le thread AffichageBlindes d'affichage des blindes. 15 Abattage : moment où les joueurs montrent leurs cartes pour définir qui a la meilleure main. 58

59 Figure 72 : Décision d'arrêt du jeu ou du lancement d'une nouvelle donne. b. Fin d'une main par l'abattage : Dans le cas où les joueurs vont jusqu'à l'abattage, on lance le thread FinMain. La première chose à faire est de montrer tour à tour les mains de tous les joueurs encore en lice. Pour cela, un timer est créé pour chaque joueur dont le temps de réveil sera décalé de 0.75 secondes à partir du dealer, permettant de dévoiler les pocket-cards. 59

60 Figure 73 : Création des timers permettant la visualisation tour à tour des cartes des joueurs restants. Figure 74 : ActionListener enclenché au moment où les timers de visualisation des cartes des joueurs se réveillent. Une fois les cartes des joueurs dévoilées, on procède au classement des joueurs. Pour ce faire, on cherche la combinaison de chacun des joueurs non couchés. La distribution des gains lorsque plusieurs joueurs sont encore en jeu suit des règles très précises. Prenons par exemple un trio de joueurs dont l'un est à tapis parce qu'il avait moins de jetons que les deux autres. Dans le cas où les deux autres joueurs ont continués à miser après le tapis du joueur à tapis et où ce joueur à tapis à la meilleure combinaison, alors ce joueur ne pourra pas récupérer l'ensemble du pot. En effet, mettons qu'il ait misé 100 jetons, que les deux autres aient continué à jouer et aient donc misés chacun 200 jetons, alors le joueur à tapis ne pourra, étant gagnant, ne récupérer que 300 jetons sur les 500 constituant le pot. En effet, il ne peut prélever des autres joueurs plus que ce qu'il a misé, c est-à-dire trois fois les 100 jetons qu'il a misé. Le reste du pot, s'élevant à 200 jetons, sera distribué à celui des deux joueurs restant possédant la meilleure main. Mais cela ne s'arrête pas là. Il est possible que plusieurs joueurs soient à tapis avec des hauteurs de tapis différentes! Il se peut alors qu'il faille répéter l'exemple précédent autant de fois qu'il y a de tapis de hauteur différentes. Enfin, il faut aussi vérifier les cas d'égalité où plusieurs joueurs ont la même combinaison, qui se concrétisent par une division des gains entre les joueurs à égalité. Dernière chose à laquelle il faut faire attention : les partages de jetons ne fournissent pas toujours des nombres entiers. Prenons le cas simple de deux joueurs visualisant l'abattage et devant se partager un pot de 71 jetons. Les deux joueurs ayant la même combinaison, il faut diviser le pot en deux et chacun se retrouverait avec 35.5 jetons. Or ne travaillant qu'avec des jetons entiers, le serveur doit faire disparaître un jeton pour que chaque joueur récupère 35 jetons. Une fois l'ensemble de ces calculs effectués, on va enfin pouvoir faire visualiser aux joueurs les différentes étapes de distribution de gain avec des timers décalés de 0.75 secondes à partir du meilleur classement. 60

61 Figure 75 : ActionListener enclenché au moment où les timers de visualisation des distributions des gains se réveillent. Enfin, comme dans le thread FinMainParElimination, on va redémarrer une main si l'on a suffisamment de joueurs. 61

62 9. Les pourcentages à tapis : Lorsque tous les joueurs non couchés sont à tapis, alors les tours d'enchères 16 sont finis et on procède à l'abattage. Le parti pris a été de coupler cette phase avec un affichage des probabilités que chaque joueur à tapis a de gagner : Figure 76 : Affichage des pourcentages de réussite à tapis. Cette étape répondant à des contraintes de "temps-réel mou" et d'utilisation minimale du processeur du serveur, a dû être traitée avec la plus grande attention. Sont distingués trois cas : le tapis à partir du flop, du turn ou de la river, le tapis à partir du pré-flop à deux joueurs et le tapis à partir du pré-flop à plus de deux joueurs. a. Les probabilités de gagner avant le turn et avant la river : L'idée lorsque l'on est au flop, ou au turn, c est-à-dire lorsqu'il ne reste qu'une ou deux cartes communes à afficher sur le plateau, est de calculer l'ensemble des combinaisons restantes possibles. Prenons l'exemple de l'étape du turn, en attente de l'affichage de la river, étape à laquelle il ne reste plus qu'une carte à afficher. On va alors simuler pour chaque joueur quel serait sa combinaison si l'on utilisait à la river une carte qui n'est pas encore tombée. On procède ainsi pour chaque carte restante dans le jeu de cartes (sont retirées des cartes possibles les quatre cartes du plateau et les pocket-cards des joueurs à tapis). On calcule ainsi pour chaque joueur un peu plus d'une quarantaine de combinaisons possibles (si par exemple deux joueurs sont à tapis, il reste 52 (paquet de cartes) - 2 (joueurs) * 2 (pocket-cards) - 4 (cartes sur le plateau : flop + river) = 44 cartes possibles) et pour chacune on regarde qui gagne. C'est ainsi que l'on obtient très rapidement et avec un usage limité du processeur les pourcentages de chaque joueurs à tapis. Pour ce faire, il faut tout d'abord construire un jeu de cartes sur lequel vont être testées l'ensemble des combinaisons possibles à la river pour chaque joueur. On retirera de ce jeu les cartes du flop et du turn déjà visibles ainsi que les pocket-cards des joueurs à tapis. 16 Tour d'enchères : étape où les joueurs ont la possibilité de miser. Un tour d'enchères se termine lorsque la dernière mise ou la dernière relance a été faite. 62

63 Figure 77 : Construction du jeu de cartes sur lequel vont être testées toutes les combinaisons pouvant tomber au turn. Est alors calculé le gagnant de chaque combinaison restante possible. Pour ce faire, on calcule pour chaque carte restante du jeu de cartes pouvant servir de river, la puissance de la combinaison de chaque joueur et ainsi incrémenter le nombre de combinaisons gagnées par le(les) joueur(s) gagnant(s) de "1 / nombre de gagnants". 63

64 Figure 78 : Calcul du gagnant de chaque combinaison restante. Enfin, il faut actualiser les probabilités de gagner de chaque joueur à tapis en modifiant la variable pourcentagetapis des objets InfoJoueur, et envoyer les données de la partie pour actualiser la vue des clients. Figure 79 : On actualise les pourcentages de chaque joueur dans les objets InfoJoueur. b. Les probabilités de gagner avant le flop avec deux joueurs all-in : 64

65 Au pré-flop, cette méthode n'est plus envisageable du fait du nombre de combinaisons qu'il faudrait calculer (si par exemple deux joueurs sont à tapis, il reste alors 48 cartes possibles, et il faut calculer l'ensemble des possibilités d'affichage pour les 5 cartes du plateau à apparaître, c est-à-dire 1,7 million de combinaisons possibles par joueur, et donc un total de 3,4 millions de combinaisons à calculer). A coup de calculs de combinaison par seconde, on se retrouverait à plus de 30 secondes de calcul et la contrainte temps-réel mou permettant au jeu d'être fluide ne serait plus respectée. Ainsi, pour les tapis pré-flop à deux joueurs, le parti prit a été de calculer au préalable l'ensemble des confrontations possibles entre deux joueurs (par exemple AK versus J9) et de les placer dans une base de donnée. Un joueur pouvant obtenir en pré-flop 169 combinaisons de pocket-cards différentes (AA, AK, AQ, AJ, AT, A9, A8, A7, A6, A5, A4, A3, A2, KK, KQ, KJ, KT, K9, K8, K7, K6, K5, K4, K3, K2, QQ, QJ, QT, Q9, Q8, Q7, Q6, Q5, Q4, Q3, Q2, JJ, JT, J9, J8, J7, J6, J5, J4, J3, J2, TT, T9, T8, T7, T6, T5, T4, T3, T2, 99, 98, 97, 96, 95, 94, 93, 92, 88, 87, 86, 85, 84, 83, 82, 77, 76, 75, 74, 73, 72, 66, 65, 64, 63, 62, 55, 54, 53, 52, 44, 43, 42, 33, 32, 22, AKs, AQs, AJs, ATs, A9s, A8s, A7s, A6s, A5s, A4s, A3s, A2s, KQs, KJs, KTs, K9s, K8s, K7s, K6s, K5s, K4s, K3s, K2s, QJs, QTs, Q9s, Q8s, Q7s, Q6s, Q5s, Q4s, Q3s, Q2s, JTs, J9s, J8s, J7s, J6s, J5s, J4s, J3s, J2s, T9s, T8s, T7s, T6s, T5s, T4s, T3s, T2s, 98s, 97s, 96s, 95s, 94s, 93s, 92s, 87s, 86s, 85s, 84s, 83s, 82s, 76s, 75s, 74s, 73s, 72s, 65s, 64s, 63s, 62s, 55s, 54s, 53s, 52s, 43s, 42s, 32s - 's' significant de la meme couleur), cela fait (169 * 169) confrontations possibles entre deux joueurs. On construit donc un tableau à deux dimensions contenant la probabilité du joueur de gagner pour chaque confrontation. Pour cela, un programme a été créé pour calculer l'ensemble des combinaisons gagnantes des deux joueurs pour chaque confrontation et ainsi trouver la probabilité associée. Il faut donc calculer pour chaque case du tableau 3,4 millions de combinaisons et ceci pour chacune des cases. Cela fait tout de même près de 100 milliards de combinaisons à calculer. Sur mon petit EeePC et son processeur AMD C-50 double cœur, ce calcul prend tout de même 250h, soit une dizaine de jours. Le calcul a donc été effectué sur un calculateur de l'ensica ne prenant ainsi qu'une nuit. Nous avons ainsi une base de données de l'ensemble des confrontations pré-flop à deux joueurs. Lorsque le jeu arrive à ce stade, le serveur n'a plus qu'à récupérer dans ce tableau la bonne case et afficher la probabilité de gagner à chaque joueur. Le traitement est alors instantané. 65

66 Figure 80 : Calcul des pourcentages à tapis en pré-flop pour deux joueurs. c. Les probabilités de gagner avant le flop avec plus de deux joueurs all-in : Lorsque plusieurs joueurs sont à tapis (plus de deux) en pré-flop, alors le procédé précédent n'est plus possible. En effet, la table précédente utilisée pour deux joueurs ne peut être utilisée telle quelle pour des confrontations à plus de deux joueurs. De plus, une table similaire pour trois joueurs ou plus serait beaucoup trop longue à calculer et serait trop gourmande en mémoire. Le principe dans ce cas est de simuler de manière aléatoire 1000 tirages et de voir le nombre de mains gagnées par chaque joueur pour en faire une probabilité de gagner. La probabilité ainsi calculée n'est alors plus exacte, mais se rapproche suffisamment de la valeur réelle pour être 66

67 admissible. On a ainsi un moyen très rapide et peu gourmand de proposer à plusieurs joueurs à tapis en pré-flop une bonne approximation de leurs chances de gagner. Figure 81 : Calcul des pourcentages à tapis en pré-flop pour plus de deux joueurs. 67

68 Partie IV. Développement logiciel 1. Faciliter le développement : Lorsque l'on doit alterner régulièrement entre le développement sous éclipse et l'utilisation du logiciel avec le serveur dédié, il est utile d'utiliser certaines variables de développement. Figure 82 : Le choix entre l'utilisation du serveur dédié ou du localhost. Dans le code précédent, la variable booléenne "enligne", définie au point d'entrée du programme (dans Connexion), permet de choisir facilement de se connecter au serveur dédié si elle est à true, ou d'utiliser le serveur en localhost (sur sa machine) si elle est à false. On n'a donc plus qu'à modifier cette simple variable pour changer de mode de fonctionnement. Une autre variable de développement est la variable booléenne "souseclipse" utilisée dans le lanceur. Lorsqu'on développe sous Eclipse, on utilise souseclipse à true. Cela permet d'indiquer textuellement le chemin absolu de Client.jar à lancer lorsqu'on lance le code depuis Eclipse. Lorsque le logiciel est utilisé par le client, on met souseclipse à false. En effet le lanceur dans ce cas est un.jar et on sait que Client.jar est situé dans Sources/. Du coup on récupère le chemin absolue de Client.jar à partir de celui du lanceur, grâce à la méthode getlocation(). Figure 83 : Le choix entre l'utilisation sous Eclipse et en exécutable. 68

69 2. Mise à jour automatique : Pour utiliser l'application, le joueur lancera l'exécutable WinABarriere/WinABarriere.jar. Cet exécutable est un "lanceur", ce n'est pas l'exécutable qui permettra au joueur de jouer. Il permet, avant lancement de l'exécutable contenant le jeu, de vérifier si la version du client que le joueur possède est bien la dernière en activité. C'est grâce à cet exécutable que les mises à jours se font de manière automatique, permettant l'amélioration et la correction du logiciel en me permettant de fournir régulièrement de nouvelles versions. L'intérêt fondamental étant que l'utilisateur n'a plus besoin de télécharger le logiciel à chaque nouvelle version, ce travail étant effectué pour lui de manière automatique. Plus en détail, WinABarriere/WinABarriere.jar va lire la version utilisée par le joueur dans le fichier WinABarriere/Version.txt et se connecter au serveur pour lui demander si la version utilisée est celle qu'attend le serveur. Figure 84 : Récupération du numéro de version. Si le serveur confirme que le client utilise la dernière version en vigueur alors WinABarriere/WinABarriere.jar va exécuter l'exécutable contenant le logiciel de poker, à savoir WinABarriere/Sources/Client.jar : Figure 85 : Exécution du client depuis le lanceur. Au contraire, si la version n'est pas celle qu'attend le serveur, alors le client est périmé et le serveur va envoyer un.zip de la nouvelle version et demander au lanceur de remplacer l'ancienne par la nouvelle : Figure 86 : Envoie du fichier compressé contenant la nouvelle version via une Socket. 69

70 Le lanceur décompresse alors le.zip reçu, détruit l'ancienne version, à savoir WinABarriere/Sources/ et la remplace par la nouvelle version. Figure 87 : Décompression d'un fichier.zip sous Java. WinABarriere/WinABarriere.jar va alors pouvoir exécuter le nouveau WinABarriere/Sources/Client.jar contenant le logiciel de poker qui lors de son exécution modifiera WinABarriere/Version.txt en y plaçant le nouveau numéro de version. Figure 88 : Vues de la mise à jour. 70

71 La mise à jour ne serait pas complète si le lanceur s'occupant de la mise à jour ne pouvait pas être lui-même mis à jour. Pour cela, lors de l'exécution de Client.jar et si une mise à jour vient d'être effectuée, le lanceur va être remplacé par le nouveau lanceur téléchargé en même temps que le nouveau Client.jar. Ce remplacement de WinABarriere.jar doit s'effectuer depuis Client.jar et non depuis WinABarriere.jar comme pour les autres mises à jour car il n'est pas possible de remplacer un exécutable pendant son exécution. 71

72 3. Mise à niveau sur les différents systèmes d'exploitation : Le développement et les tests ayant été effectués sous Windows, il a fallu effectuer la transition vers Ubuntu et Mac pour contenter le maximum de joueurs. On peut observer sur l'image ci-dessous, rien qu'au niveau graphique, la nécessité de la vérification sous les différents systèmes d'exploitation. Figure 89 : Illustrations des principaux problèmes graphiques rencontrés lors de l'utilisation sous Linux. On peut par exemple observer dans les cadres blancs, que la taille de la police est différente sur les différents systèmes d'exploitation, et fait déborder certaines indications des boutons, que les caractères spéciaux ne sont pas encodés de la même manière et que les tailles de fenêtres sont différentes de la version Windows. Pour prendre en charge ces différences, on prend note au lancement du logiciel du type de système d'exploitation utilisé en appelant la méthode System.getProperty("os.version"). Suivant que l'on soit sous Windows, Ubuntu ou Mac, certaines constantes vont être assignées différemment. Le client possède ainsi une classe contenant une soixantaine de constantes prenant des valeurs différentes selon le système d'exploitation utilisé. Les caractères spéciaux ont été remplacés par leur caractère Unicode correspondant reconnu indépendamment du système d'exploitation. Cependant, les différences ne s'arrêtent pas au simple aspect graphique. On pourra citer par exemple la récupération du chemin absolue de l'emplacement du logiciel. En effet, l'exécutable WinABarriere/WinABarriere.jar permettant de vérifier la présence de mises à jour a aussi pour rôle de trouver le chemin absolu de l'emplacement du logiciel afin de pouvoir utiliser les dossiers associés. Sous Windows, on récupérera un chemin du type : "/C:/Users/Xavier/ /WinABarriere" alors que sous Linux et Mac, on aura plutôt "/home/xavier/ /WinABarriere" (différence au début du chemin absolue). Cette différence entraînant un problème lors de l'utilisation de la commande Runtime.getRuntime().exec(Java -jar "cheminabsolue") permettant d'exécuter un.jar. 72

73 4. Gestion de la perte de connexion : Lorsqu'un joueur est connecté au serveur mais perd sa liaison internet, il est nécessaire d'appliquer un certain nombre de mesures. Le serveur vérifie toutes les 30 secondes si le client est connecté en lui demandant de lui confirmer qu'il est toujours lié. Si le client ne renvoie pas de confirmation au bout de 20 secondes, alors le joueur est retiré du serveur. De même, le client possède un timer cyclique qui est redémarré à chaque fois que le serveur fait une demande de vérification de liaison. Si au bout de 40 secondes, le client n'a pas reçu de nouvelles du serveur, alors le timer s'enclenche et ferme le client et le redirige vers la fenêtre de connexion. Il faut faire attention à déconnecter proprement le client. En effet, si le client n'est pas retiré de la liste des joueurs connectés au serveur, alors il ne pourrait plus se connecter puisque le serveur le considèrerait comme toujours présent. Cela passe par une fermeture du socket entre le client et le serveur, le retrait du joueur des tables où il se trouve et du retrait du joueur du serveur. 73

74 5. L'obfuscation : L'obfuscation est une étape nécessaire du développement logiciel lorsque l'on veut protéger son code source ou si l'on veut éviter pour des questions de sécurité que quelqu'un puisse modifier le code à son avantage. Comme du code source Java peut être décompilé très facilement pour être observé, la seule possibilité de le protéger est de le rendre incompréhensible. L'obfuscation permet ainsi par divers moyens de rendre le code le plus illisible et le plus compliqué possible à analyser. La principale méthode consiste à changer le nom de l'ensemble des variables, des méthodes et des classes. En effet, lors du développement, on choisit les noms les plus explicites possibles pour pouvoir s'y retrouver dans son code et permettre par la suite le maintien de son application et l'utilisation de son code par d'autres personnes. On peut voir ci-dessous un exemple de code avant et après obfuscation où l'ensemble des noms ont été remplacés par une suite aléatoire de 4 lettres : Figure 90 : Code non obfusqué. Figure 91 : Le même code obfusqué. Intérêt supplémentaire, pouvant se révéler intéressant sur de gros programmes, le fait que le code source est moins volumineux après obfuscation. En effet, en réduisant les noms de variables en générales assez long par 4 caractères, on obtient un code source moins lourd. Concernant les commentaires, pas besoin de s'en soucier soi-même pour les enlever puisqu'ils ne sont pas intégrés au binaire lors de la compilation. D'autres méthodes peuvent être utilisées, telle que le clonage de méthodes qui consiste à placer une méthode deux fois dans le code source mais avec des noms différents ou avec des paramètres additionnels. Si l'on veut quelque chose d'encore plus sécurisé, on peut carrément retoucher l'architecture du code, en utilisant de l'héritage à des endroits où il n'y en a pas besoin. 74

75 L'obfuscation n'est pas un outil empêchant totalement la compréhension du code. Cependant, plus l'obfuscation sera poussée et plus on y passe du temps, plus il sera difficile à un œil extérieur malveillant de comprendre le code. Divers outils gratuits, tel que ProGuard, permettent de faire l'obfuscation de manière automatique. Cependant, j'ai préféré réaliser mon propre programme d'obfuscation afin de bien comprendre les divers mécanismes possibles et surtout pour pouvoir garder une bonne vision de mon code pour le maintien et la correction des bugs. La première étape est de récupérer au sein du code l'ensemble des noms de variables, de méthodes et de classes. Cela est faisable grâce à l'introspection, qui est la capacité d'un programme à examiner son propre état et que Java possède. On va d'abord récupérer les noms de classes en parcourant tout simplement la liste des fichiers sources.java. Ayant ces noms de classes, on va charger dynamiquement ces classes : Class myclass = ClassLoader.getSystemClassLoader().loadClass(String nomdelaclasseacharger);. Pour chaque classe ainsi chargée, on va récupérer l'ensemble de ses variables avec la méthode myclass.getdeclaredfields(); qui renvoie une liste. On fait de même avec ses méthodes en utilisant myclass.getdeclaredmethods();. On a ainsi une liste des noms des classes, des variables et des méthodes du projet. On associe ensuite à chacun de ces noms une chaîne de 4 caractères choisie aléatoirement. Et finalement, on va transformer les fichiers sources.java en remplaçant les noms explicites par leur chaine de 4 caractères associée (lecture du fichier puis réécriture). On peut ajouter à cette couche d'obfuscation l'utilisation de la cryptographie. On peut par exemple crypter de la manière de son choix l'ensemble des variables de type String du code ou du moins les variables critiques telles que l'adresse IP du serveur, la version du client ou les ports utilisés. La méthode chargée de crypter ces informations devra être cachée dans le code. 75

76 6. Utilisation d'un serveur dédié : Pour que l'utilisateur puisse jouer à tout moment, il a fallu utiliser un serveur dédié permettant de faire tourner sans interruption le côté serveur du logiciel. J'ai ainsi loué un serveur pour moins de 2 par mois, utilisant une distribution Ubuntu, disposant de 200Mo d'espace libre et d'une bonne bande passante. Le serveur contient ainsi ServerPoker.jar, le côté serveur, lancé via la commande "nohup Java -jar ServerPoker.jar &" permettant une exécution continue. Il contient aussi la base de données, le journal de bord de ce qui se passe sur le serveur et le dossier compressé contenant les mises à jour. Au lancement d'une nouvelle version du logiciel, un ensemble d'instructions doit être suivi de manière précise. Celles-ci sont regroupées dans un Readme placé sur le serveur et décrit ci-dessous : I. Changer le numéro de version : 1. Le passer dans la classe Encryption du pakage cryptage du projet Obfuscation. 2. Le mettre dans Connexion (en encrypté). 3. Le mettre dans ServerGeneral (en clair). 4. Le mettre dans Version.txt (en clair). II. Switcher les variables de développements a leurs vraies valeurs : 1. Dans Connexion : a. enligne = true. 2. Dans Lanceur : a. enligne = true. b. souseclipse = false. 3. Dans AdministrationPoker : a. enligne = true. 4. Dans ServerGeneral : a. empecherdeseconnecteravecplusieurscomptessurunmemepc = true. III. Fabrication des.jar : 1. WinABarriere.jar (projet Lanceur) a. Export -> JAR file b. Le mettre dans WinABarriere/ 2. ServerPoker.jar : a. ServerPoker -> Export -> Runnable JAR file b. L'appeler ServerPoker.jar Cocher : Extract required librairies into generated JAR (c'est comme ça qu'on inclue javax.mail.jar dans ServerPoker.jar) Launch configuration : MainServerPoker - ServerPoker c. Le mettre dans ServerPoker/ d. Le mettre sur le serveur dédié dans /root/ 3. Client.jar : a. Copier les classes de UPoker dans le package main du projet Eclipse Obfuscateur. b. Rafraichir Obfuscateur. c. Lancer l'obfuscation (package codeobfuscation, classe Obfuscateur) - (Traitement d'à peu près 1 minute). d. Rafraichir absolument avant de faire le.jar. e. Vérifier s'il n'y a pas des nouvelles variables locales à passer à l'obfuscation. Si oui recommencer l'étape e avec les modifications. f. Faire Client.jar a partie du projet Obfuscateur (ne prendre que le package main). g. Le mettre dans WinABarriere/Sources/ 76

77 IV. Fabrication du fichier de mise à jour : 1. Copier Sources/. 2. Y ajouter WinABarriere.jar. 3. Y ajouter le Readme. 4. Renommer ce Sources/ en Sources2/. 5. Compresser Sources2/ en Sources2.zip. 6. Supprimer Sources2 non compressé. 7. Le mettre dans ServerPoker/. 8. Le mettre sur le serveur dédié dans /root/. V. Terminer WinABarriere/ : 1. Retirer s'il y est le fichier SeSouvenirDeMoi.txt. VI. Lancement du serveur : 1. nohup java -jar ServerPoker.jar & Lors du fonctionnement du côté serveur du logiciel, le régime CPU du serveur dédié est à peu près nul sauf en cas de calcul intensif de combinaisons pour le traitement des tapis, et l'utilisation mémoire varie entre 20% et 50%. 77

78 7. L'administration du serveur : Pour gérer facilement le serveur, un programme a été créé, se connectant au serveur et proposant une IHM permettant d'interagir avec. L'accès au serveur par cet outil est restreint par un mot de passe. Figure 92 : Fenêtre administrateur. Sont affichés dans cette fenêtre, le nombre total de mains jouées sur le serveur, un tableau contenant pour l'ensemble des joueurs, leur classement, leur pseudo, leur nombre de jetons, leur adresse mail, leur date d'inscription, s'ils sont en ligne ou non, et leur nombre de mains jouées. Un autre tableau représente l'ensemble des tables ainsi que le nombre de joueurs présents. Enfin, est affiché pour la table sélectionnée, un aperçu de ce qu'il se passe sur la table. L'outil permet également de supprimer un joueur et d'arrêter le serveur proprement. La fermeture du serveur de cette manière est intéressante, car contrairement à un kill en ligne de commande sur le serveur dédié, le serveur recevant cette demande de fermeture, va attendre que tous les joueurs soient absents pour effectuer la fermeture. On retrouve au milieu de la fenêtre, un historique des activités du serveur dans la section Journal de Bord. Cela permet d'afficher les erreurs lorsqu'elles apparaissent, de suivre les connexions, déconnexions et inscriptions, ainsi que l'état général du serveur. Enfin, un avertisseur sonore est déclenché lorsqu'un joueur se connecte, de manière à avertir l'administrateur qui peut ainsi s'atteler à une autre occupation. 78

79 Partie V. La personnalisation des composants Java Swing 1. JButton personnalisé : Les boutons proposés par Swing ne pouvant être utilisés tel-quels du fait de la pauvreté de leur apparence, il a fallu les redéfinir. Voici ci-dessous l'exemple d'un bouton retouché. Figure 93 : Un JButton personnalisé. Figure 94 : Un JButton personnalisé au survole de la souris. Figure 95 : Un JButton personnalisé au clic de la souris. La première étape réside dans la création de l'image qui servira de fond au bouton, sous GIMP par exemple. On en fait trois versions : une pour le bouton dans son état normal, une pour représenter le bouton lorsque la souris le survole et une pour représenter le bouton lorsque la souris clic dessus. On peut voir ci-dessous la classe héritant de JButton personnalisant le bouton de base. Le constructeur prend en paramètre le nom de l'image de fond, le texte qu'on désire lui appliquer ainsi que la position et la police du texte dans le bouton. On redéfinit la méthode paint(graphics g) pour mettre en place l'ensemble de ces paramètres graphiques. On obtient donc un bouton avec une image de fond et un texte dont on peut choisir la position et la police. 79

80 Figure 96 : Un JButton personnalisé. Pour éviter d'avoir un bouton statique, on doit associer au bouton ainsi personnalisé un MouseListener qui va réagir au passage et au clic de la souris. Pour cela, on redéfinit la classe MouseListener prédéfinit dans Java en chargeant les trois images du bouton correspondant à ses trois états possibles. On redéfinit ainsi, de manière à changer l'image affichée, les méthodes mouseentered(mouseevent e) et mouseexited(mouseevent e) qui permettent de capter l'entrée et la sortie de la souris dans le bouton, ainsi que les méthodes mousepressed(mouseevent e) et mousereleased(mouseevent e) qui permettent de capter la pression et le relâchement du curseur dans le bouton. On profitera aussi du sur-chargement de ces méthodes pour changer la forme du curseur lorsque la souris est dans les limites du bouton en affichant une main à la place de la flèche, en utilisant la méthode setcursor(new Cursor(Cursor.Hand_CURSOR)). 80

81 Figure 97 : Un MouseListener associé au JButton personnalisé. On peut voir dans le bout de code suivant la mise en place d'un bouton dans une fenêtre. On utilise la méthode setborder(null) pour empêcher Java de mettre une bordure au bouton. La méthode addmouselistener() permet d'associer le MouseListener redéfinit ci-dessus au bouton. Figure 98 : Utilisation du bouton personnalisé dans un JPanel. 81

82 2. JTextField personnalisé : Le JTextField (champs de texte) de base présent dans Java Swing a été retouché pour avoir un meilleur look and feel. Figure 99 : Un JTextField personnalisé n'ayant pas le focus. Figure 100 : Un JTextField personnalisé ayant le focus. Le principe est de rendre le JTextField invisible et de dessiner une image de zone de texte à la place dans la méthode paintcomponent(graphics g) du JPanel. La méthode setopaque(false) permet de ne plus voir le JTextField, tout en laissant apparaitre le texte et le curseur. Figure 101 : Un JTextField personnalisé. On associe au JTextField un FocusListener qui est un élément de Java permettant de réagir à la perte et au gain du focus d'un élément. Cela permet d'écrire dans le JTextField, via les méthodes focusgained(focusevent e) et FocusLost(FocusEvent e), une information concernant ce qu'on doit y remplir et de l'enlever lorsqu'on clique dessus pour laisser l'utilisateur remplir le champ de texte. 82

83 3. JProgressBar personnalisée : Chaque joueur reçoit un temps imparti de 30 secondes pour prendre sa décision. Cette information est transmise visuellement grâce à une barre de progression. On redéfinit pour cela la JProgressBar de Java Swing. Figure 102 : Une JProgressBar personnalisée. On utilise pour cet élément au minimum deux images. Une image représentant le fond de la barre de progression (l'image de ce qui est visible quand la barre se retire) et une image représentant la barre. Ici, ont été utilisées trois images de la barre, la bleue utilisée lorsqu'il reste entre 30 et 15 secondes au joueur pour se décider, la jaune lorsqu'il lui reste moins de 15 secondes et la rouge lorsqu'il lui reste moins de 7,5 secondes. La barre de progression personnalisée hérite de BasicProgressBarUI. On surcharge la méthode paintdeterminate() qui dessine l'image placée dans la barre de progression. On va y dessiner le fond de la barre puis la barre elle-même en récupérant l'avancement de la progression avec la méthode getanimationindex(). L'index d'animation étant modifié par un timer prenant appui sur l'actionlistener DecrementeProgressBar dont le code est visible ci-dessous, après le code de MyBar. Figure 103 : Comment décrémenter la JProgressBar personnalisée. 83

84 Figure 104 : Une JProgressBar personnalisée. 84

85 4. Une JTable personnalisée : Une JTable est un tableau présent dans la bibliothèque Java Swing. Il ne peut pas non plus rester tel quel, et doit être personnalisé : Figure 105 : Un JTable personnalisée. La méthode setdefaultrenderer() permet d'associer un DefaultTableCellRenderer qui permet de gérer les cellules. Cela permet ici par exemple, lorsqu'une cellule est sélectionnée, de colorier la ligne qui la contient en bleu. Figure 106 : Un DefaultTableCellRenderer permettant de gérer les cellules. La méthode setbackground(color color) permet de définir la couleur de fond, setforeground(color color) de définir la couleur du texte et setgridcolor(color color) de définir la couleur de la grille. Figure 107 : Modification des couleurs de la JTable. La JTable est insérée dans un JScrollPane permettant d'afficher une scroll-bar verticale et ainsi de se déplacer verticalement dans le tableau. Avec la méthode getcolumnmodel().getcolumn(0).setpreferredwidth(160), on peut modifier la largeur de chaque colonne. 85

86 Figure 108 : Modification de la taille des colonnes. On ajoute enfin un MouseListener à la JTable permettant d'écouter les clics de la souris. Pour réagir au double clic sur une ligne de la JTable et ainsi ouvrir la fenêtre de la table de poker correspondante, on utilise la méthode e.getclickcount() quand on redéfinit la méthode mouseclicked(mouseevent e) du MouseListener. Figure 109 : MouseListener associé à la JTable personnalisée pour réagir aux clics souris. A une JTable est toujours associé un AbstractTableModel permettant de gérer son contenu. Il prend en paramètre le tableau d'objects représentant le contenu des cases de la JTable et le titre de la JTable. 86

87 Figure 110 : L'AstractTableModel utilisé par la JTable personnalisée. 87

88 5. Une JScrollBar personnalisée : La JScrollBar est l'élément de Java Swing permettant de parcourir verticalement une JTable trop longue pour entrer dans son cadre. Comme les autres composants Java Swing, la JScrollBar de base doit être améliorée. Figure 111 : Une JScrollBar personnalisée. Pour récupérer la JScrollBar associée à un JScrollPane et ainsi pouvoir la retoucher, on utilise la méthode getverticalscrollbar(). Un fois la JScrollBar récupérée, on la modifie en la plaçant dans une MetalScrollBarUI personnalisée. Figure 112 : Récupération de la scroll-bar verticale pour pouvoir la modifier. La classe MyScrollbarUI personnalisée héritant de MetalScrollBarUI permet de redéfinir complètement la JScrollBar. On peut ainsi changer le Thumb, qui est la barre que l'on déplace, en modifiant son image et sa taille : Figure 113 : Personnalisation de l'image du Thumb. Figure 114 : Personnalisation de la taille du Thumb. On peut faire de même pour le Track, qui est le contenant de la scroll-bar en redéfinissant les méthodes painttrack() et settrackbounds(). On peut aussi modifier les boutons permettant de monter ou descendre la JScrollBar, situés en haut et en dessous la JScrollBar : 88

89 Figure 115 : Personnalisation des boutons d'extrémité de la JScrollBar. 89

90 6. Une JCheckBox personnalisée : La JCheckBox proposée dans Java Swing est très laide et quasiment pas personnalisable. Le parti pris a donc été de se passer de la JCheckBox proposée par Swing et de simplement dessiner une image de check-box. On utilise donc les deux images de la figure ci-dessous et un booléen est utilisé pour savoir si la case est cochée ou non et donc pour afficher la bonne image. Pour cocher ou décocher la check-box, un MouseListener est associé à la fenêtre (au JPanel) contenant la check-box pour écouter si l'utilisateur clic sur la zone où est la check-box. Figure 116 : Les images utilisées pour représenter une check-box. Figure 117 : Dessin de la check-box en fonction du booléen sesouvenirdemoi. Figure 118 : Le MouseListener écoutant les clics de la souris dans la zone de la check-box. 90

91 7. Le chat : Le chat est un outil indispensable d'une table de poker en ligne. Il a été situé en bas à gauche de la fenêtre représentant la table. Figure 119 : La zone du chat. La zone où les messages s'affichent est un JTextArea proposé par Java Swing. La méthode setlinewrap(true) permet de retourner à la ligne quand le message dépasse la largeur du cadre de la zone de texte. Sinon, on aurait une scroll-bar horizontale qui s'afficherait. La méthode setwrapstyleword(true) permet de ne pas couper un mot en deux lors du passage à la ligne. La méthode seteditable(false) rend la zone de texte non éditable, le joueur ne peut ainsi y écrire. Le JTextArea est placé dans un JScrollPane, qui est un composant affichant une scroll-bar verticale lorsqu'il y a plus de lignes de messages que de lignes visibles dans le cadre de la zone de texte. Figure 120 : La zone de texte où s'affichent les messages. Au niveau du transfert de messages, lorsque le client appuie sur la touche entrée ou sur le bouton "ENVOYER", le message est envoyé au serveur qui va le redistribuer à l'ensemble des personnes ayant cette table ouverte (qu'ils soient assis à la table ou juste spectateurs). Figure 121 : Le transfert des messages au niveau du serveur. Au moment où le joueur reçoit un message, on fait en sorte d'afficher cette ligne. En effet, cela permet dans le cas où le joueur est remonté voir des messages plus anciens, de lui afficher la dernière ligne de la zone de texte et donc le message qui vient d'apparaître. 91

92 Figure 122 : Affichage du message qui vient d'arriver. Enfin, il faut faire attention à l'affichage des caractères spéciaux. En effet, un message contenant des caractères spéciaux, envoyé depuis Windows, transitant par le serveur dédié Ubuntu, et revenant chez un utilisateur Windows, ne pourra afficher correctement les caractères spéciaux. Pour résoudre ce problème, on peut modifier avant l'envoie du message les principaux caractères spéciaux en une chaîne de caractères spécifique. Cette chaîne de caractères représentant un caractère spécial sera ensuite retransformée en le caractère spécial original lors de la réception par les destinataires. Par exemple, le caractère 'é' dont le code Unicode est \u00e9 est transformé en la chaîne de caractères "//e". Figure 123 : Modification des principaux caractères spéciaux avant envoie du message. 92

93 8. Ajouter une icône à une fenêtre : Pour plus de visibilité, il est intéressant d'ajouter une icône aux fenêtres du programme. Figure 124 : Ajout d'une icône à la fenêtre visible en haut à gauche de la fenêtre. Figure 125 : Ajout d'une icône à la fenêtre, visible depuis la barre des tâches. Figure 126 : Code associé à l'ajout dans une JFrame d'une icône. 93

94 9. Ajouter des info-bulles : On utilise des info-bulles pour préciser, au passage de la souris sur un composant, les détails de son utilisation. La méthode settooltiptext(string texte) permet d'associer à un composant une info-bulle. Figure 127 : Utiliser des info-bulles. Figure 128 : Associer une info-bulle à un composant (ici un JButton). Pour modifier certains paramètres de l'ensemble des info-bulles, on utilise par exemple, au point d'entrée du programme, les méthodes du ToolTopManager setinitialdelay(int tpsavantdeclenchement) et setdismissdelay(int dureedaffichage) : Figure 129 : Modifier les paramètres des info-bulles globalement. 94

95 10. Centrer un String : Il arrive très régulièrement de vouloir afficher du texte dont la largeur va varier (dont le contenu va varier) autour d'une position centrale. Dans la figure ci-dessous, le pseudo du joueur va varier d'un joueur à l'autre, mais l'on désire lui afficher son pseudo de manière centrée. Figure 130 : Exemple de texte centré. Pour ce faire, on récupère la police (Font) que l'on va utiliser et l'utiliser en entrée de l'objet FontMetrics qui permet de connaître la taille d'un String utilisant cette police. Pour récupérer les dimension du String, on utilise la méthode getstringbounds() qui renvoie un Rectangle de la taille du String. On n'a plus qu'à dessiner le String en donnant comme abscisse le pixel autour duquel il est centré (ici 108) soustrait de la moitié de la taille du String (taillestring.widht / 2). Figure 131 : Centrage horizontal du pseudo autour du pixel

Démarrer avec la Toutou Linux

Démarrer avec la Toutou Linux Démarrer avec la Toutou Linux 1.Comment démarrer sur le CD de Toutou Linux? Pour pouvoir démarrer avec le CD Toutou Linux, suivez les étapes suivantes : Allumer votre ordinateur. Ne cherchez pas à insérer

Plus en détail

I Pourquoi une messagerie?

I Pourquoi une messagerie? I Pourquoi une messagerie? Outlook express est un logiciel de messagerie de windows. Il est installé par défaut sur un grand nombre d ordinateurs de la planète, ceux tournant sous Windows, et proposé par

Plus en détail

Documentation de l'application de gestion de courrier évolutive (G.E.D.) pour la Mairie de Voreppe

Documentation de l'application de gestion de courrier évolutive (G.E.D.) pour la Mairie de Voreppe Documentation de l'application de gestion de courrier évolutive (G.E.D.) pour la Mairie de Voreppe Tony Galmiche le 28 février 2011 (modifiée alb) Sommaire 1 - Accès au portail de l'application GED...3

Plus en détail

ACCUEIL...2 LA DEMANDE DE DEVIS...11 COMPLETER UN DEVIS...12 ACCEPTER OU A REFUSER LE DEVIS...13

ACCUEIL...2 LA DEMANDE DE DEVIS...11 COMPLETER UN DEVIS...12 ACCEPTER OU A REFUSER LE DEVIS...13 ACCUEIL...2 LA COMMANDE...3 ONGLET "NATURE DES TRAVAUX"...3 ONGLET INFORMATIONS...8 ONGLET RECAPITULATIF...9 LA COMMANDE SIMPLE A VALIDER PAR LES ACHETEURS...10 LA DEMANDE DE DEVIS...11 COMPLETER UN DEVIS...12

Plus en détail

Les règles de base du poker :

Les règles de base du poker : Les règles de base du poker : LES RÈGLES DE BASE DU POKER :... 1 A propos du poker...2 Comment jouer?...3 Essayez le poker dés maintenant... 5 Le classement des cartes au poker...6 Classement des Cartes...

Plus en détail

Je communique avec Skype

Je communique avec Skype Je communique avec Skype Support de formation des Médiathèques du Pays de Romans Site Internet Twitter MediaTechRomans Table des matières Présentation de Skype...2 Un logiciel pour être plus proche...

Plus en détail

Table des matières : 16 ASTUCES OUTLOOK

Table des matières : 16 ASTUCES OUTLOOK Table des matières : 16 ASTUCES OUTLOOK Accéder rapidement à votre boîte de réception Ajouter directement les caractéristiques dans le carnet d'adresses Classez vos emails par couleurs Créez des Post-It

Plus en détail

Solutions Bureau de Bell Aliant Accès à distance

Solutions Bureau de Bell Aliant Accès à distance Services de gestion de sécurité de Bell Aliant Solutions Bureau de Bell Aliant Accès à distance Accès au RPV SSL avec SecurID Guide de l'utilisateur Version 1.3 Septembre 2009 1 Toute reproduction, publication

Plus en détail

Atelier d initiation. Initiation à Windows Vista et 7

Atelier d initiation. Initiation à Windows Vista et 7 Atelier d initiation Initiation à Windows Vista et 7 Contenu de l atelier Qu est-ce que Windows?... 1 Démarrage d un ordinateur... 1 Ouverture de session... 1 Bureau... 2 La barre des tâches... 2 Le menu

Plus en détail

Utilisation du client de messagerie Thunderbird

Utilisation du client de messagerie Thunderbird Outlook express n existant plus sur les systèmes d exploitation sortis après Windows XP, nous préconisons désormais l utilisation du client de messagerie libre distribué gratuitement par la Fondation Mozilla.

Plus en détail

Open Office Calc Tableau Croisé Dynamique avec le Pilote de données

Open Office Calc Tableau Croisé Dynamique avec le Pilote de données zi Open Office Calc Tableau Croisé Dynamique avec le Pilote de données 1 Introduction Les Tables de Pilote de données (comme les tableaux croisés dynamiques de Microsoft Excel) sont des outils d'analyse

Plus en détail

Poker. A rendre pour le 25 avril

Poker. A rendre pour le 25 avril Poker A rendre pour le 25 avril 0 Avant propos 0.1 Notation Les parties sans * sont obligatoires (ne rendez pas un projet qui ne contient pas toutes les fonctions sans *). Celles avec (*) sont moins faciles

Plus en détail

BUREAU D ETUDES INFORMATIQUE JOUEUR DE PUISSANCE 4

BUREAU D ETUDES INFORMATIQUE JOUEUR DE PUISSANCE 4 MIETLICKI Pascal 3 MIC C2 BUREAU D ETUDES INFORMATIQUE JOUEUR DE PUISSANCE 4 1. Mode Console... 2 2. Mode Graphique... 2 3. Architecture de notre logiciel... 3 4. Manuel d utilisation... 5 5. Aide au joueur...

Plus en détail

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin

DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin DOSSIER D'ACTIVITES SUR LE PHP N 03 Créer une base de données MySQL avec PHPMyAdmin Objectifs : Apprendre à l apprenant à lancer un serveur local «Apache» Apprendre à l'apprenant à lancer un serveur MySQL

Plus en détail

Bureau de Windows et raccourcis

Bureau de Windows et raccourcis Bureau de Windows et raccourcis Présentation de Windows 1 Le Bureau de Windows Le Poste de travail Contenu du disque dur Les icônes principales du Bureau Les raccourcis - créer un raccourci d'un fichier

Plus en détail

GESTION DES BONS DE COMMANDE

GESTION DES BONS DE COMMANDE GESTION DES BONS DE COMMANDE P1 P2 Table des Matières LA GESTION DES BONS DE COMMANDE 4 PREMIERE EXECUTION DU LOGICIEL 5 DEFINITION DES PARAMETRES 8 Services 9 Comptes Utilisateurs 10 Adresse de livraison

Plus en détail

Chapitre 4 La base de données

Chapitre 4 La base de données Chapitre 4 La base de données La Base de données INTRODUCTION 4 La Base de données INTRODUCTION Vectorworks permet de lier les objets du dessin à des formats de base de données (BDD), c'est-à-dire d'associer

Plus en détail

Guide d utilisation. Table des matières. Mutualisé : guide utilisation FileZilla

Guide d utilisation. Table des matières. Mutualisé : guide utilisation FileZilla Table des matières Table des matières Généralités Présentation Interface Utiliser FileZilla Connexion FTP Connexion SFTP Erreurs de connexion Transfert des fichiers Vue sur la file d'attente Menu contextuel

Plus en détail

49- Clients et fournisseurs AB Magique

49- Clients et fournisseurs AB Magique 49- Clients et fournisseurs AB Magique Un fournisseur AB Magique est un fournisseur qui utilise lui aussi AB Magique comme logiciel de gestion. Dans un tel cas, il est alors possible à ce fournisseur de

Plus en détail

Guide de démarrage de l'outil. Aperçus Sun Life Ordinateur. Introduction. À propos de ce guide de démarrage rapide

Guide de démarrage de l'outil. Aperçus Sun Life Ordinateur. Introduction. À propos de ce guide de démarrage rapide Guide de démarrage de l'outil Aperçus Sun Life Ordinateur Introduction L'outil Aperçus Sun Life : propose une interface facile à utiliser, vous permet de travailler à partir de votre ordinateur ou sur

Plus en détail

PROexo 2.01a : Guide de démarrage rapide. PROexo. V2.01a. Guide de Démarrage rapide. Auteur Sylvain LE GOFF : www.leprogiciel.

PROexo 2.01a : Guide de démarrage rapide. PROexo. V2.01a. Guide de Démarrage rapide. Auteur Sylvain LE GOFF : www.leprogiciel. PROexo V2.01a Guide de Démarrage rapide 1 Sommaire 1 Présentation a) Objectif du guide de démarrage rapide b) Présentation de PROexo 2 Partie administrateur a) Gestion des utilisateurs b) Gestion des exercices

Plus en détail

Utilisation de GalaxShare

Utilisation de GalaxShare Utilisation de GalaxShare Tutoriel accessible en ligne sur http://galaxair.com/tuto/aidegalaxshare.html Le Porte-Document GalaxShare est un logiciel web de partage de documents, avec une gestion fine des

Plus en détail

STATISTICA - Version 10

STATISTICA - Version 10 STATISTICA - Version 10 Instructions d'installation de STATISTICA Entreprise pour une Utilisation sous Terminal Server et Citrix Remarques : 1. Ces instructions s'appliquent à une installation sous Terminal

Plus en détail

Manuel WebDataDOMO. 1 Lancement et configuration des automates. Lors du lancement du logiciel, cet écran apparaît :

Manuel WebDataDOMO. 1 Lancement et configuration des automates. Lors du lancement du logiciel, cet écran apparaît : 1 Lancement et configuration des automates Lors du lancement du logiciel, cet écran apparaît : Cliquez sur pour ouvrir la fenêtre de configuration des automates : 1/9 Remplissez les champs comme suit :

Plus en détail

Organisation des cours

Organisation des cours Utilisation du site de formation 1 sur 7 Utilisation du site de formation Introduction L avantage d une formation par correspondance, et à fortiori par un site de formation, c est que chacun va à sa convenance.

Plus en détail

Le Menu Démarrer Vista Win7

Le Menu Démarrer Vista Win7 Le Menu Démarrer Vista Win7 Session Initiation 2011/2012 1 - Utilisation du menu Démarrer Lorsque vous cliquez sur le Bouton Démarrer ou sur la touche Windows de votre clavier, le menu Démarrer s'affiche

Plus en détail

N importe qui possédant un code MS valide peut initier la rencontre. Néanmoins, il serait préférable de laisser cette

N importe qui possédant un code MS valide peut initier la rencontre. Néanmoins, il serait préférable de laisser cette Les fonctionnalités de Secure Meeting permettent aux utilisateurs de tenir des réunions avec d autres utilisateurs internes et externes au réseau et de collaborer en toute sécurité. Bien que plusieurs

Plus en détail

Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com

Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com Tutoriel Inscription et utilisation basique d'un blog hébergé chez Blogger.com Contenu I.Validation (ou inscription) de son adresse chez Google...2 II.Utilisation des fonctionnalités du blog...5 1.Accès

Plus en détail

Mémento professeur du réseau pédagogique

Mémento professeur du réseau pédagogique Mémento professeur du réseau pédagogique 1. Accéder au réseau pédagogique Il suffit quand on vous demande votre nom d utilisateur et votre mot de passe de renseigner ceux-ci. Votre nom d utilisateur est

Plus en détail

Présentation du site internet EcoleDirecte

Présentation du site internet EcoleDirecte Présentation du site internet EcoleDirecte Mise à jour : Octobre 2013 La vie scolaire de votre enfant sur https://www.ecoledirecte.com SOMMAIRE 1 PRESENTATION DU SITE INTERNET ECOLEDIRECTE DEDIE AUX FAMILLES

Plus en détail

MJMVoOnIp Version 6.X par Jean-Marc Mars (2015). contact : systeamvs@free.fr

MJMVoOnIp Version 6.X par Jean-Marc Mars (2015). contact : systeamvs@free.fr MJMVoOnIp Version 6.X par Jean-Marc Mars (2015). contact : systeamvs@free.fr Avertissement : Ce logiciel fonctionne sous Windows version 32 ou 64 bits. Pour le 64 bits les essais ont été effectués sous

Plus en détail

Configuration de Windows (II)

Configuration de Windows (II) Configuration de Windows (II) Affichage des icônes sur le Bureau : 1 disposer les icônes librement sur le Bureau 2 créer des raccourcis des lecteurs sur le Bureau 3 ranger les icônes sur le Bureau Affichage

Plus en détail

La page d'accueil. L'interview en ligne 1/13. Nous allons aborder les thèmes suivants :

La page d'accueil. L'interview en ligne 1/13. Nous allons aborder les thèmes suivants : Aide au remplissage des formulaires intelligents Ces pages d'aide vous familiariseront avec le maniement des formulaires intelligents de la Ville de Luxembourg. Si vous n'y trouvez pas la solution, essayez

Plus en détail

Explorateur Windows EXPLORATEUR WINDOWS...1 INTRODUCTION...2 LANCEMENT DE L'EXPLORATEUR WINDOWS...3 PRÉSENTATION PHYSIQUE...3 RECHERCHER...

Explorateur Windows EXPLORATEUR WINDOWS...1 INTRODUCTION...2 LANCEMENT DE L'EXPLORATEUR WINDOWS...3 PRÉSENTATION PHYSIQUE...3 RECHERCHER... EXPLORATEUR WINDOWS SOMMAIRE EXPLORATEUR WINDOWS...1 INTRODUCTION...2 LANCEMENT DE L'EXPLORATEUR WINDOWS...3 PRÉSENTATION PHYSIQUE...3 RECHERCHER...6 ORGANISATION DE SES DOSSIERS...7 CRÉER UN DOSSIER...7

Plus en détail

Tobii Communicator 4. Guide de démarrage

Tobii Communicator 4. Guide de démarrage Tobii Communicator 4 Guide de démarrage BIENVENUE DANS TOBII COMMUNICATOR 4 Tobii Communicator 4 permet aux personnes souffrant de handicaps physiques ou de communication d'utiliser un ordinateur ou un

Plus en détail

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.3 Sophos Mobile Encryption pour Android Aide Version du produit : 1.3 Date du document : février 2013 Table des matières 1 À propos de Sophos Mobile Encryption...3 2 Affichage de la page d'accueil...5 3

Plus en détail

La Clé informatique. Formation Word XP Aide-mémoire

La Clé informatique. Formation Word XP Aide-mémoire La Clé informatique Formation Word XP Aide-mémoire Septembre 2003 Table des matières Édition et insertion de texte... 4 Manipulation d un document Exploration de la fenêtre de travail Bouton de maximisation

Plus en détail

KeePass - Mise en œuvre et utilisation

KeePass - Mise en œuvre et utilisation www.rakforgeron.fr 08/04/2015 KeePass - Mise en œuvre et utilisation L'usage de mots de passe est nécessaire pour de nombreux accès ou pour la protection de données personnelles. Il convient d'en utiliser

Plus en détail

Présentation du site internet EcoleDirecte

Présentation du site internet EcoleDirecte Présentation du site internet EcoleDirecte La vie scolaire de votre enfant sur https://www.ecoledirecte.com Janvier 2013 SOMMAIRE 1 PRESENTATION DU SITE INTERNET ECOLEDIRECTE DEDIE AUX FAMILLES ET AUX

Plus en détail

ATELIER INFORMATIQUE NIVEAU 1 ATELIER N 4 LE BUREAU ET LA BARRE DE TACHES DE WINDOWS

ATELIER INFORMATIQUE NIVEAU 1 ATELIER N 4 LE BUREAU ET LA BARRE DE TACHES DE WINDOWS ATELIER INFORMATIQUE NIVEAU 1 ATELIER N 4 LE BUREAU ET LA BARRE DE TACHES DE WINDOWS Jean Claude Juzan & Martial Mouflin Saison 2011/2012 Comité du Monteil Atelier Informatique Niv. 1 saison 2011/2012

Plus en détail

LibreOffice Calc : introduction aux tableaux croisés dynamiques

LibreOffice Calc : introduction aux tableaux croisés dynamiques Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau

Plus en détail

La Gestion Electronique de Documents (GED)

La Gestion Electronique de Documents (GED) La Gestion Electronique de Documents (GED) by LegalBox Comment utiliser la fonction de la Gestion Electronique de Documents? Le HUB LegalBox contient une fonction GED (Gestion Electronique de Documents).

Plus en détail

http://cri.univ-lille1.fr Virtualisation de Windows dans Ubuntu Linux

http://cri.univ-lille1.fr Virtualisation de Windows dans Ubuntu Linux http://cri.univ-lille1.fr Virtualisation de Windows dans Ubuntu Linux Version 1.0 Septembre 2011 SOMMAIRE 1. Introduction 3 2. Installation du logiciel de virtualisation VirtualBox 4 3. Création d'une

Plus en détail

Créer un album Web. L'album Web. Accueil

Créer un album Web. L'album Web. Accueil Créer un album Web Pourquoi créer un album Web? pour échanger ses photos avec ses proches pour sauvegarder ses images sur un autre support L'album Web Il existe divers sites permettant de stocker ses photos

Plus en détail

Logiciel de vote pour amphi RAPPORT DE CONCEPTION

Logiciel de vote pour amphi RAPPORT DE CONCEPTION Logiciel de vote pour amphi RAPPORT DE CONCEPTION I. Cahier des charges Notre projet consiste à créer un programme et des interfaces qui permettent à un professeur (en amphi) d interagir avec ses élèves.

Plus en détail

Guide Utilisateur Particuliers. Sommaire

Guide Utilisateur Particuliers. Sommaire Sommaire 1.Installation...3 1.1.Configuration...3 1.2.Sous Internet Explorer...4 1.3.Sous Mozilla Firefox...5 1.4.Sous Google Chrome...6 1.5.Aller sur le site...7 2.Identification...8 2.1.Inscription...8

Plus en détail

Formation Gestion concours Version 2011.1.2 du 3 février 2011

Formation Gestion concours Version 2011.1.2 du 3 février 2011 Formation Gestion concours Version 2011.1.2 du 3 février 2011 PROGRAMME - Présentation du logiciel - Installation du logiciel, identification des éléments du logiciel - Récupération des licenciés de la

Plus en détail

Utilisation de XnView

Utilisation de XnView http://www.rakforgeron.fr 27/02/2015 Utilisation de XnView Les photos d'actes généalogiques, les scans de documents réalisés par vous, ou vos saisies d'écran de documents téléchargés sur Internet, au-delà

Plus en détail

Formation Windows 7 créer par ABC-INFO47

Formation Windows 7 créer par ABC-INFO47 Formation Windows 7 par ABC-INFO47 Page 1 SOMMAIRE L ordinateur et les périphériques... 3 Le bureau de Windows 7... 3 Liste des icônes principales du bureau :... 4 Personnaliser les icones du bureau :...

Plus en détail

Guide de démarrage. pour Solution de gestion des EPN (Espaces Publics Numériques)

Guide de démarrage. pour Solution de gestion des EPN (Espaces Publics Numériques) Guide de démarrage pour Solution de gestion des EPN (Espaces Publics Numériques) 73 rue de Saint-Mandrier 83140 Six-Fours Tél.: 04 89 81 43 43 - Fax : 09 89 39 88 59 - www.aesis-conseil.com RCS Toulon

Plus en détail

rendre les réunions simples

rendre les réunions simples rendre les réunions simples Vous trouverez tout ce dont vous avez besoin pour commencer à utiliser votre compte de conférence VaaS-t dans les pages suivantes. Guide de démarrage rapide Mise en route Votre

Plus en détail

HDM-2100. Connection Manager

HDM-2100. Connection Manager HDM-2100 Connection Manager Contents I- Installation de LG Connection Manager... 2 II- Configuration requise...3 III- Introduction et mise en route de LG Connection Manager... 3 IV-Fonctions de LG Connection

Plus en détail

Pluridisciplinarité. Classe de BTS DATR 1 -----------------------------------------------------------------------

Pluridisciplinarité. Classe de BTS DATR 1 ----------------------------------------------------------------------- Pluridisciplinarité Classe de BTS DATR 1 ----------------------------------------------------------------------- Module M53: Diagnostic de territoire cible dans le secteur des services. -----------------------------------------------------------------------

Plus en détail

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0

Sophos Mobile Encryption pour Android Aide. Version du produit : 1.0 Sophos Mobile Encryption pour Android Aide Version du produit : 1.0 Date du document : septembre 2012 Table des matières 1 À propos de Sophos Mobile Encryption...3 2 Affichage de la page d'accueil...4

Plus en détail

Mettre des PC en réseau

Mettre des PC en réseau 1 sur 8 25/03/2010 14:24 Mettre des PC en réseau Informations sur le tutoriel Auteur : ShigeruM Visualisations : 1 852 613 Salut les Zér0s! Plus d'informations Ici je vais vous apprendre à mettre deux

Plus en détail

Accéder au carnet de contacts

Accéder au carnet de contacts Pour vous faciliter le travail et ne pas avoir, chaque fois, à rechercher l'adresse d'un correspondant habituel, enregistrez vos destinataires courants dans un carnet de contacts. Lorsque vous enverrez

Plus en détail

LOGICIEL KIPICAM : Manuel d installation et d utilisation

LOGICIEL KIPICAM : Manuel d installation et d utilisation 2015 LOGICIEL KIPICAM : Manuel d installation et d utilisation Kipisoft http://w.sanchez.free.fr/product_home_overview.php 16/05/2015 SOMMAIRE 1. Présentation de l'application... 3 2. Installation de l'application...

Plus en détail

2012 - Copyright Arsys Internet E.U.R.L. Arsys Backup Online. Guide de l utilisateur

2012 - Copyright Arsys Internet E.U.R.L. Arsys Backup Online. Guide de l utilisateur Arsys Backup Online Guide de l utilisateur 1 Index 1. Instalation du Logiciel Client...3 Prérequis...3 Installation...3 Configuration de l accès...6 Emplacement du serveur de sécurité...6 Données utilisateur...6

Plus en détail

Une ergonomie intuitive

Une ergonomie intuitive Une ergonomie intuitive Les solutions de la ligne PME offrent une interface de travail proche des usages quotidiens en informatique. Leur ergonomie intuitive facilite la prise en main du logiciel. Une

Plus en détail

Projet Techniques de Programmation en C

Projet Techniques de Programmation en C Projet Techniques de Programmation en C PokerStat DESCRIPTION DU PROJET : 1 REALISATION DU PROJET 2 ROBUSTESSE DU GENERATEUR DE HASARD DE L'ORDINATEUR PROBABILITE BRUTE D'OBTENIR UNE COMBINAISON CALCUL

Plus en détail

Manuel d utilisation email NETexcom

Manuel d utilisation email NETexcom Manuel d utilisation email NETexcom Table des matières Vos emails avec NETexcom... 3 Présentation... 3 GroupWare... 3 WebMail emails sur internet... 4 Se connecter au Webmail... 4 Menu principal... 5 La

Plus en détail

Guide d'utilisation. De Kompozer. AUTEUR INITIAL : S. LOIZEL Collège Saint Joseph Caudan (56)

Guide d'utilisation. De Kompozer. AUTEUR INITIAL : S. LOIZEL Collège Saint Joseph Caudan (56) Guide d'utilisation De Kompozer AUTEUR INITIAL : S. LOIZEL Collège Saint Joseph Caudan (56) Table des matières Fiche1 : Créer, nommer et sauvegarder une page...2 Fiche2 : Modifier les couleurs et le fond

Plus en détail

[WINDOWS 7 - LES FICHIERS] 28 avril 2010. Logiciel / Windows

[WINDOWS 7 - LES FICHIERS] 28 avril 2010. Logiciel / Windows Ce dossier a une forme un peu différente des précédentes : c est un ensemble de «fiches» décrivant chacune une des opérations que l on peut effectuer avec un fichier (enregistrer, renommer, etc.). Chaque

Plus en détail

Picasa 1. Weber Yvan 04.11.11

Picasa 1. Weber Yvan 04.11.11 Picasa 1 Picasa 2 Table des matières 1 Préparation...3 1.1 Adresse Gmail...3 1.2 Préparation des dossiers photo...4 1.3 Télécharger et installer Picasa...5 1.3.1 Télécharger Picasa...5 1.4 Installer Picasa...6

Plus en détail

Comment accéder à d Internet Explorer

Comment accéder à d Internet Explorer Comment accéder à d Pour ouvrir l application, vous n avez qu à doublecliquer sur l icône de celle-ci : ou vous pouvez encore allez le chercher par le raccourci dans la barre des tâches : Lorsque l application

Plus en détail

MO-Call pour les Ordinateurs. Guide de l utilisateur

MO-Call pour les Ordinateurs. Guide de l utilisateur MO-Call pour les Ordinateurs Guide de l utilisateur Sommaire MO-CALL POUR ORDINATEURS...1 GUIDE DE L UTILISATEUR...1 SOMMAIRE...2 BIENVENUE CHEZ MO-CALL...4 MISE EN ROUTE...5 CONNEXION...5 APPELS...7 COMPOSITION

Plus en détail

Manuel d installation et d utilisation du logiciel GigaRunner

Manuel d installation et d utilisation du logiciel GigaRunner Manuel d installation et d utilisation du logiciel GigaRunner Manuel Version : V1.6 du 12 juillet 2011 Pour plus d informations, vous pouvez consulter notre site web : www.gigarunner.com Table des matières

Plus en détail

Initiation au mail. Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4

Initiation au mail. Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4 Initiation au mail Sommaire : 1. Qu'est-ce qu'un mail?...3 2. Deux types d'outils pour consulter ses mails...4 2.1. Les logiciels de gestion de mail...4 2.2. Les webmails...5 3. Se connecter au webmail...6

Plus en détail

Avec PICASA. Partager ses photos. Avant de commencer. Picasa sur son ordinateur. Premier démarrage

Avec PICASA. Partager ses photos. Avant de commencer. Picasa sur son ordinateur. Premier démarrage Avant de commencer Picasa est avant un logiciel que l'on peut installer sur son ordinateur et qui permet de transférer ses photos dans un espace pouvant être partagé sur Internet. Picasa sur son ordinateur.

Plus en détail

Création d'un questionnaire (sondage)

Création d'un questionnaire (sondage) Création d'un questionnaire (sondage) Le but de ce petit tuto est d'avoir les séquences pas à pas pour la création d'un questionnaire de façon à ne pas devoir rechercher la manière de procéder si l'outil

Plus en détail

Manuel d'utilisation de MyVisit

Manuel d'utilisation de MyVisit Manuel d'utilisation de MyVisit Résumé : Ce document explique comment utiliser MyVisit, une application Internet permettant de formuler et suivre les demandes de visites à la Cour de justice de l'union

Plus en détail

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24

Date de diffusion : Rédigé par : Version : Mars 2008 APEM 1.4. Sig-Artisanat : Guide de l'utilisateur 2 / 24 Guide Utilisateur Titre du projet : Sig-Artisanat Type de document : Guide utilisateur Cadre : Constat : Les Chambres de Métiers doivent avoir une vision prospective de l'artisanat sur leur territoire.

Plus en détail

Espace FOAD IRTS Guide de l étudiant Septembre 2009

Espace FOAD IRTS Guide de l étudiant Septembre 2009 Espace FOAD IRTS Guide de l étudiant Septembre 2009 0BPRESENTATION DE L'ESPACE FOAD IRTS... 2 2BCONSULTER LES CONTENUS DE FORMATION... 3 3BGERER SON MOT DE PASSE... 4 8BMODIFIER SON MOT DE PASSE... 4 9BQUELQUES

Plus en détail

Leçon N 11 Faire un Album de photo avec ALBELLI 2 ème partie

Leçon N 11 Faire un Album de photo avec ALBELLI 2 ème partie Leçon N 11 Faire un Album de photo avec ALBELLI 2 ème partie Vous allez créer avec cette leçon un album de photo avec le logiciel «Albelli livre photo». 2 La préparation Le travail le plus important pour

Plus en détail

POKER ET PROBABILITÉ

POKER ET PROBABILITÉ POKER ET PROBABILITÉ Le poker est un jeu de cartes où la chance intervient mais derrière la chance il y a aussi des mathématiques et plus précisément des probabilités, voici une copie d'écran d'une main

Plus en détail

Terminal Infocomm et Poste Infocomm

Terminal Infocomm et Poste Infocomm Terminal Infocomm et Poste Infocomm Introduction Ces deux programmes permettent la communication entre le serveur et les autres postes InformaStock du réseau d un commerce. Généralement, le serveur exécutera

Plus en détail

progecad NLM Guide de l'utilisateur

progecad NLM Guide de l'utilisateur progecad NLM Guide de l'utilisateur Rev. 11.1 Table des matières Table des matières...2 Introduction...3 Comment démarrer...3 Installation de progecad NLM server...3 Enregistrement de progecad NLM server...3

Plus en détail

Classer et partager ses photographies numériques

Classer et partager ses photographies numériques Classer et partager ses photographies numériques Ce tutoriel a pour objectif de vous donner les bases nécessaires au classement de vos photographies numériques, et de vous donner des moyens simples de

Plus en détail

Manuel d utilisation de la messagerie. http://zimbra.enpc.fr

Manuel d utilisation de la messagerie. http://zimbra.enpc.fr Manuel d utilisation de la messagerie http://zimbra.enpc.fr ÉCOLE DES PONTS PARISTECH/ DSI JANVIER 04 SOMMAIRE. Connexion à la messagerie.... Présentation générale de l écran d accueil.... Déconnexion...

Plus en détail

Scolasite.net, le créateur de site web au service des enseignants. Guide d'administration du site Internet. Page 1

Scolasite.net, le créateur de site web au service des enseignants. Guide d'administration du site Internet. Page 1 Guide d'administration du site Internet Page 1 Scolasite permet de créer rapidement un site Internet, sans connaissances techniques particulières. Spécialement destiné aux établissements scolaires, son

Plus en détail

Traiter le son composer un album photos

Traiter le son composer un album photos Traiter le son composer un album photos PowerPoint 2007 EMMANUELLE MENNY 14/11/2009 Créer un album photo... 3 Insérer un son de la bibliothèque multimédia à l aide du ruban... 5 Insérer un son à l'aide

Plus en détail

Comment utiliser sa messagerie laposte.net

Comment utiliser sa messagerie laposte.net Fiche Logiciel Internet Niveau FL02009 09/09 Comment utiliser sa rie laposte.net 1) s'identifier, ouvrir une session Avant de commencer, munissez-vous de votre identifiant (votre adresse de courrier électronique)

Plus en détail

TO52 - Application médicale sous android Consultation des informations patient

TO52 - Application médicale sous android Consultation des informations patient TO52 - Application médicale sous android Consultation des informations patient DAVID LACHICHE XAVIER MICHEL Automne 2011 TABLE DES MATIÈRES 1 Partie données métier 2 1.1 Généralités.......................................

Plus en détail

Manuel d'utilisation de l'espace d'e-learning de LaboCoop Novembre 2014

Manuel d'utilisation de l'espace d'e-learning de LaboCoop Novembre 2014 Manuel d'utilisation de l'espace d'e-learning de LaboCoop Novembre 2014 Table des matières Accès à l'espace d'e-learning...2 Login et mot de passe de la plateforme...2 Description générale de l'interface

Plus en détail

1. Utilisation du logiciel Keepass

1. Utilisation du logiciel Keepass Utilisation du logiciel Keepass L'usage de mots de passe est nécessaire pour de nombreux accès ou pour la protection de données personnelles. Il convient d'en utiliser plusieurs, suivant le type d'accès

Plus en détail

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus : 1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus : La procédure d installation démarre. La fenêtre suivante vous indique

Plus en détail

Guide de démarrage rapide

Guide de démarrage rapide Guide de démarrage rapide 1. À propos de ce guide Ce guide vous aide à installer et à commencer à utiliser BitDefender Security for Mail Servers. Pour des instructions détaillées, veuillez vous référer

Plus en détail

ACW_TM Guide d utilisation

ACW_TM Guide d utilisation ACW_TM Guide d utilisation Présentation Une interface logicielle vous permet de configurer vos modules ACW en les reliant au port USB de votre ordinateur. Plusieurs paramètres sont réglables. Chacun d

Plus en détail

Guide de l'utilisateur PROTECTIS. Réalisé par le C.D.I.P.

Guide de l'utilisateur PROTECTIS. Réalisé par le C.D.I.P. Guide de l'utilisateur PROTECTIS Réalisé par le C.D.I.P. Table des matières INSTALLATION 1 Installation du logiciel...1 Ouverture du logiciel...1 Première ouverture du logiciel...1 Les ouvertures suivantes...3

Plus en détail

STATISTICA Version 12 : Instructions d'installation

STATISTICA Version 12 : Instructions d'installation STATISTICA Version 12 : Instructions d'installation Réseau en Licences Flottantes avec Nomadisme Remarques : 1. L'installation de la version réseau de STATISTICA s'effectue en deux temps : a) l'installation

Plus en détail

Module SIN21 Pre sentation, analyse, prise en main

Module SIN21 Pre sentation, analyse, prise en main Module SIN21 Pre sentation, analyse, prise en main Temps : 3h Objectifs : Prendre connaissance du système. Lire les diagrammes UML et comprendre le fonctionnement du système. Mettre en place une maquette

Plus en détail

LibreOffice Draw. Découvrir. Sommaire LV08001

LibreOffice Draw. Découvrir. Sommaire LV08001 Découvrir LibreOffice Draw LV08001 Sommaire 1. Dessiner une forme...3 2. Changer la couleur ou la ligne d'une forme...7 3. Insérer une image...8 4. Redimensionner une image ou une forme...16 5. Aligner

Plus en détail

MANUEL. de l application «CdC Online» pour Mac. Table des matières

MANUEL. de l application «CdC Online» pour Mac. Table des matières MANUEL de l application «CdC Online» pour Mac Version 2.0 juin 2015 Table des matières 1 Introduction... 2 2 Compatibilité... 2 3 Téléchargement et installation... 2 4 Configuration... 6 5 Fonctionnement

Plus en détail

BEP Systèmes Electroniques Industriels et Domestiques

BEP Systèmes Electroniques Industriels et Domestiques Fiche de procédure : Créer un réseau domestique sous Windows XP I) Préambule Cette fiche méthode a été créée avec l'objectif de donner aux débutants la possibilité de créer un réseau domestique sous Windows

Plus en détail

Guide pratique 2 1.3-1

Guide pratique 2 1.3-1 1.3 PRINCIPES DE FONCTIONNEMENT DU LOGICIEL 1.3.1 Démarrer le logiciel Le processus d installation du logiciel sur votre poste de travail a créé le raccourci sur le bureau (icône) et dans le menu Démarrer/Programmes/PRODUITS

Plus en détail

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement)

HP Data Protector Express Software - Tutoriel 4. Utilisation de Quick Access Control (Windows uniquement) HP Data Protector Express Software - Tutoriel 4 Utilisation de Quick Access Control (Windows uniquement) Que contient ce tutoriel? Quick Access Control est une application qui s'exécute indépendamment

Plus en détail

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005

RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Oussama ELKACHOINDI Wajdi MEHENNI RAPPORT DU PREMIER MINI PROJET «FORUM DE CHAT» Novembre 2005 Sommaire I. Préliminaire : Notice d exécution et mode opératoire...4 II. Architecture globale de l application...5

Plus en détail

L'intranet du site af3m.org

L'intranet du site af3m.org Généralités La page qui permet d'accéder à l'intranet se trouve sur le site normal ; son adresse est http://www.af3m.org/intranet_1011875.html ; on y accède depuis le Menu de droite ou du bas. Les pages

Plus en détail

Edutice V4 Support de formation pour les enseignants

Edutice V4 Support de formation pour les enseignants Edutice V4 Support de formation pour les enseignants Dossier Partage Corbeille Bienvenue dans Edutice! Synchronisation clé USB Dossier personnel Accès clé USB Une fois muni de votre clé USB Edutice, il

Plus en détail