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

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

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

TEXAS HOLD'EM POKER DEROULEMENT DE LA PARTIE :

TEXAS HOLD'EM POKER DEROULEMENT DE LA PARTIE : DEROULEMENT DE LA PARTIE : TEXAS HOLD'EM POKER Le croupier dispose d'un marqueur appelé «Bouton» qui sert à identifier un joueur. La donne commence à partir du joueur placé à la gauche du «Bouton». Ce

Plus en détail

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

Le site engarde-service.com pour publier des résultats de compétitions Service proposé par la société ANPV-log

Le site engarde-service.com pour publier des résultats de compétitions Service proposé par la société ANPV-log Le site engarde-service.com pour publier des résultats de compétitions Service proposé par la société ANPV-log 1. introduction 2. Création d'un compte sur engarde-service.com 2.1. Inscription 2.2 Gestion

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

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

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

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

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

Google Chrome. La barre de favoris: Une petit barre (Ctrl+B) qui fait tout la largeur du navigateur juste en dessous de la barre de recherche.

Google Chrome. La barre de favoris: Une petit barre (Ctrl+B) qui fait tout la largeur du navigateur juste en dessous de la barre de recherche. Google Chrome Résumé rapide: Lien de téléchargement: http://www.google.fr/chrome La barre de favoris: Une petit barre (Ctrl+B) qui fait tout la largeur du navigateur juste en dessous de la barre de recherche.

Plus en détail

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5 1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en

Plus en détail

ipra*cool v 1.08 guide de l utilisateur ipra*cool v.1-08 Guide de l'utilisateur ipra*cool v 1.08 1

ipra*cool v 1.08 guide de l utilisateur ipra*cool v.1-08 Guide de l'utilisateur ipra*cool v 1.08 1 ipra*cool v.1-08 Guide de l'utilisateur ipra*cool v 1.08 1 Sommaire 1 ipra*cool en bref 2 Démarrage d' ipra*cool 2.1 Initialisation du logiciel ipra*cool ( sur MOBILE et PC) 2.1.1 Vérification des connexions

Plus en détail

ASSIGNATION DES SIEGES:

ASSIGNATION DES SIEGES: REGLEMENT DU JEU TOURNOI DE POKER DU 14 JUIN 2014 Ce règlement est établi pour le tournoi de Poker, organisé le 14 juin 2013 par l association «MA CANTINE UTINGEOISE», dont les bénéfices sont intégralement

Plus en détail

Word: versions d'un document, suivi des modifications

Word: versions d'un document, suivi des modifications Word: versions d'un document, suivi des modifications A. Version d'un document Pour suivre l'évolution d'un document, il est possible de l'enregistrer sous différentes versions. Exemple: Imaginons que

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

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

Manuel d'utilisation BeamYourScreen

Manuel d'utilisation BeamYourScreen Manuel d'utilisation BeamYourScreen Manuel d'utilisation BeamYourScreen Page 1 Sommaire Création d'un compte 3 Installation 3 Démarrer une session 4 Rejoindre une session 5 Login de session HTML 6 Caractéristiques

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

Fiche pratique. Les outils systèmes. Maintenance, défragmenter, planifier, sauvegarder

Fiche pratique. Les outils systèmes. Maintenance, défragmenter, planifier, sauvegarder 1 Fiche pratique Les outils systèmes Maintenance, défragmenter, planifier, sauvegarder Les outils système Proposés dans Windows Vista vous permettent de défragmenter, nettoyer, sauvegarder, restaurer...

Plus en détail

Manuel d'utilisation Android

Manuel d'utilisation Android Projet de fin d'année BTS IRIS version 1.7 Manuel d'utilisation Android Réalisé par: Romain Gaillard Version numérique Promo 2014 Lycée Alfred Kastler Tables des matières INSTALLATION :... 3 I. IHM CONNEXION

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

CamTrace vidéosurveillance

CamTrace vidéosurveillance CamTrace vidéosurveillance Manuel Client Camtrace v 1.3.0 01/09/2014 Pour tous renseignements complémentaires : www.camtrace.com Tous droits réservés. Copyright 2010-2020 par Camtrace SAS Camtrace SAS,

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

Manuel MSDS+ Système de programmes pour l'impression et la gestion des fiches de données de sécurité. DR-software GmbH

Manuel MSDS+ Système de programmes pour l'impression et la gestion des fiches de données de sécurité. DR-software GmbH Manuel MSDS+ Système de programmes pour l'impression et la gestion des fiches de données de sécurité DR-software GmbH Table des matières INSTALLATION ET ACTUALISATION 1 INSTALLATION DU PROGRAMME... 2 INSTALLATION

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

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Interface PC Vivago Ultra. Pro. Guide d'utilisation Interface PC Vivago Ultra Pro Guide d'utilisation Version 1.03 Configuration de l'interface PC Vivago Ultra Configuration requise Avant d'installer Vivago Ultra sur votre ordinateur assurez-vous que celui-ci

Plus en détail

REGLES DU TOURNOI POKER TEXAS HOLD EM GRAND CASINO BASEL. Airport Casino Basel AG Tournoi Poker. Version 2.0

REGLES DU TOURNOI POKER TEXAS HOLD EM GRAND CASINO BASEL. Airport Casino Basel AG Tournoi Poker. Version 2.0 REGLES DU TOURNOI POKER TEXAS HOLD EM GRAND CASINO BASEL Version 2.0 Poker_Grand Casino Basel_F 30.06.2008 / MI page 1 / 8 1 Mise Sans annonce verbale, un enjeu est réputé misé à partir du moment où le

Plus en détail

Client SQL Server version 3

Client SQL Server version 3 Client SQL Server version 3 Présentation du programme Par Jean-Pierre LEON Mise à jour du 10/06/2014 Page 2 sur 21 Présentation du logiciel Ouvrir, analyser, consulter, modifier une base de données au

Plus en détail

Atelier 2. Étape 1 : Installation de Active Directory, installation du service DNS et installation du service WINS Durée approximative : 40 minutes

Atelier 2. Étape 1 : Installation de Active Directory, installation du service DNS et installation du service WINS Durée approximative : 40 minutes Atelier 2 Installation d Active Directory Installation du service DNS Installation du Service WINS Création d'un compte d'ordinateur Jonction d'un ordinateur à un domaine Création d usagers. Étape 1 :

Plus en détail

DataTraveler 410. Manuel d'utilisation de SecureTraveler

DataTraveler 410. Manuel d'utilisation de SecureTraveler Manuel d'utilisation de SecureTraveler SecureTraveler est l'utilitaire de configuration DataTraveler permettant aux utilisateurs en entreprise et aux utilisateurs privés d'établir des zones publiques et

Plus en détail

Le générateur d'activités

Le générateur d'activités Le générateur d'activités Tutoriel Mise à jour le 09/06/2015 Sommaire A. Mise en route du Générateur d'activité... 2 1. Installation de Page... 2 2. Création des bases du générateur d'activités... 3 3.

Plus en détail

Publication d'application

Publication d'application Publication d'application Vue d'ensemble JetClouding supporte 3 types de publication d'application: Microsoft Remote Desktop: L'utilisateur verra le Bureau à distance Windows dans la session. Le contrôle

Plus en détail

PREMIERS PAS SUR INTERNET AVEC INTERNET EXPLORER 7

PREMIERS PAS SUR INTERNET AVEC INTERNET EXPLORER 7 BIEN VIVRE A SAINT ALBAN LEYSSE PREMIERS PAS SUR INTERNET AVEC INTERNET EXPLORER 7 Les Réseaux Un réseau est constitué de plusieurs ordinateurs pouvant communiquer ensemble. Un réseau commence avec 2 ordinateurs

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

YANN ROUDAUT - Professeur de l Ecole Française de Poker - roudaut@ecolefrancaisedepoker.fr - 06 28 76 48 93

YANN ROUDAUT - Professeur de l Ecole Française de Poker - roudaut@ecolefrancaisedepoker.fr - 06 28 76 48 93 MODULE LES MATHEMATIQUES DU POKER Probabilités et Notions de Cotes - Partie 1 YANN ROUDAUT - Professeur de l Ecole Française de Poker - roudaut@ecolefrancaisedepoker.fr - 06 28 76 48 93 A/ POKER ET MATHEMATIQUES

Plus en détail

Les différents outils du backoffice

Les différents outils du backoffice Les différents outils du backoffice Aide pour backoffice Avant d expliquer le fonctionnement de votre outil d administration point par point, il est important de préciser que suivant le type de contrat

Plus en détail

SUPPORT DE COURS WINDOWS VISTA

SUPPORT DE COURS WINDOWS VISTA SOMMAIRE I.... LA GESTION DE L'ORDINATEUR... 2 A.... LES UNÎTES LOGIQUES... 2 1 DISQUES DURS... 2 2 SUPPORTS AMOVIBLES... 3 3 PROPRIÉTÉS DU SUPPORT... 3 B... LE CONTENU DE L'ORDINATEUR... 4 1 DOSSIERS...

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

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

Procédure d'installation Ubuntu 12.10

Procédure d'installation Ubuntu 12.10 Procédure d'installation Ubuntu 12.10 Télécharger Ubuntu 12.10 : http://ubuntu.fr/files/telecharger11.jpg Ressources Une fois le fichier ISO téléchargé, gravez-le en tant qu image ISO et ne copiez pas

Plus en détail

Guide de l utilisateur Mikogo Version Mac

Guide de l utilisateur Mikogo Version Mac Guide de l utilisateur Mikogo Version Mac Table des matières Création d un compte utilisateur Téléchargement et installation Démarrer une session Joindre une session Fonctionnalités Liste des participants

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

1 Gestionnaire de Données WORD A4 F - USB / 2014-04-05 / 6020 Alco-Connect

1 Gestionnaire de Données WORD A4 F - USB / 2014-04-05 / 6020 Alco-Connect 1 Gestionnaire de Données WORD A4 F - USB / 2014-04-05 / 6020 Alco-Connect Introduction... 4 Comment décrire le logiciel Cosmos?... 4 Quelles sont les fonctions de ce logiciel PC?... 4 Est-il possible

Plus en détail

MEDIAplus_page de garde_v67_mise en page 1 09/12/2010 09:23 Page 2. MEDIAplus elearning. version 6.7

MEDIAplus_page de garde_v67_mise en page 1 09/12/2010 09:23 Page 2. MEDIAplus elearning. version 6.7 MEDIAplus_page de garde_v67_mise en page 1 09/12/2010 09:23 Page 2 MEDIAplus elearning version 6.7 L'interface d administration MEDIAplus Sommaire 1. L'interface d administration MEDIAplus... 5 2. Principes

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. www.scientificbraintrainingpro.fr

Manuel d utilisation. www.scientificbraintrainingpro.fr Manuel d utilisation www.scientificbraintrainingpro.fr Sommaire 1. Gestion des utilisateurs... 3 1.1. Créer un compte utilisateur... 3 1.2. Modifier/personnaliser un compte utilisateur... 4 1.3. Gérer

Plus en détail

Guide de l utilisateur Mikogo Version Windows

Guide de l utilisateur Mikogo Version Windows Guide de l utilisateur Mikogo Version Windows Table des matières Création d un compte utilisateur 3 Téléchargement et installation 4 Démarrer une session 4 Joindre une session 5 Fonctionnalités 6 Liste

Plus en détail

Mode de surveillance / Aperçu en direct

Mode de surveillance / Aperçu en direct Cours de base SeeTec 5 Mode de surveillance / Aperçu en direct - 1 - Table des matières Général...3 Aperçu de caméra...4 Zone de visualisation / Vues...7 Plan de localisation...8 MPEG Audio...9 Boutons...10

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

Licence et activation de MapInfo Professional 12.0

Licence et activation de MapInfo Professional 12.0 Licence et activation de Asie-Pacifique / Australie : Téléphone : +61 2 9437 6255 pbsoftware.australia@pb.com pbsoftware.singapore@pb.com www.pitneybowes.com.au/software Canada : Téléphone : +1 416 594

Plus en détail

ConvertXtoDVD. Manuel Complet

ConvertXtoDVD. Manuel Complet ConvertXtoDVD Manuel Complet Version 2.0.13, 10th Juillet 2006 Table des matières Principales fonctions... 3 Installation... 4 Installation... 4 Conversion Simple... 9 Interface setup... 10 Paramètres...

Plus en détail

Installation et Réinstallation de Windows XP

Installation et Réinstallation de Windows XP Installation et Réinstallation de Windows XP Vous trouvez que votre PC n'est plus très stable ou n'est plus aussi rapide qu'avant? Un virus a tellement mis la pagaille dans votre système d'exploitation

Plus en détail

Partager des fichiers avec un NAS

Partager des fichiers avec un NAS Partager des fichiers avec un NAS Avec la multiplication des écrans à la maison (ordinateurs sous Windows, Mac ou Linux, tablettes, smartphones, TV connectées, consoles de jeux), il devient de plus intéressant

Plus en détail

Keynote. Logiciel de présentation. Sous Mac OS X. Suzanne Harvey

Keynote. Logiciel de présentation. Sous Mac OS X. Suzanne Harvey Keynote Logiciel de présentation Sous Mac OS X Suzanne Harvey Conseillère pédagogique Service local du RÉCIT Commission scolaire de Saint-Hyacinthe suzanne.harvey@prologue.qc.ca recit.cssh.qc.ca Novembre

Plus en détail

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 : Atelier No2 : Installation d Active Directory Installation du service DNS Installation du Service WINS Création d'un compte d'ordinateur Jonction d'un ordinateur à un domaine Création d usagers. Étape

Plus en détail

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.

Plus en détail

Mon-Expert-en-Gestion est un portail collaboratif 100% Web, constitué de plusieurs modules utiles pour la gestion en ligne de votre entreprise.

Mon-Expert-en-Gestion est un portail collaboratif 100% Web, constitué de plusieurs modules utiles pour la gestion en ligne de votre entreprise. PERT N ION RTGESTION N M E M M E E LA GESTION EN LIGNE DE VOTRE ENTREPRISE MODULE Compta Rapide est un module de Mon-Expert-en-Gestion Mon-Expert-en-Gestion est un portail collaboratif 100% Web, constitué

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

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

Un film à partir de photos avec windows movie maker

Un film à partir de photos avec windows movie maker Un film à partir de photos avec windows movie maker -Windows movie maker est un logiciel de montage vidéo gratuit qui est normalement déjà installé sur les ordinateurs sous windows (xp, vista et 7). Il

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

Qu'est ce que le Cloud?

Qu'est ce que le Cloud? Qu'est ce que le Cloud? Le Cloud computing (informatique dans les nuages) consiste en l'utilisation de données à distance. Les fichiers de l utilisateur se trouve non pas dans son ordinateur personnel

Plus en détail

Installation et Réinstallation de Windows XP

Installation et Réinstallation de Windows XP 1 sur 25 16/08/2010 23:13 Réinstallation de Windows XP (avec formatage) Date 26/11/2005 16:08:03 Sujet : Tutorial Installation et Réinstallation de Windows XP Vous trouvez que votre PC n'est plus très

Plus en détail

Double-cliquez sur l'icône "Keep-it-Easy System" pour lancer le logiciel et le menu principal se présente comme l'image n 1.

Double-cliquez sur l'icône Keep-it-Easy System pour lancer le logiciel et le menu principal se présente comme l'image n 1. Manuel d'utilisation du logiciel du moniteur ECG REF. 23 500 10 Sommaire : 1. Menu principal 2. Description des fonctions principales 2.1 Gestionnaire d'archives 2.2 Continuer l'affichage des données 2.3

Plus en détail

Logiciels Tableur et Bases de Données Applications Tableur Thème 1-01 : Environnement de travail EXCEL EPS - Bachelier - U.F.

Logiciels Tableur et Bases de Données Applications Tableur Thème 1-01 : Environnement de travail EXCEL EPS - Bachelier - U.F. Applications Tableur Thème 1-01 : Environnement de travail EXCEL EPS - Bachelier - U.F. :754603U32D1 info@clerbois-serge.be www.clerbois-serge.be 1. INTERFACE LOGICIELLE 1-1 1.1. EXEMPLES D'OBJETS SOUS

Plus en détail

Manuel de l'administrateur. OpenMeetings 2.0. Manuel de l'administrateur

Manuel de l'administrateur. OpenMeetings 2.0. Manuel de l'administrateur Manuel de l'administrateur OpenMeetings 2.0 Manuel de l'administrateur Juin 2012 Table des matières 1. Gérer les utilisateurs... 1 2. Gérer les connexions... 2 3. Gérer les organisations... 2 4. Gérer

Plus en détail

Préparation à l installation d Active Directory

Préparation à l installation d Active Directory Laboratoire 03 Étape 1 : Installation d Active Directory et du service DNS Noter que vous ne pourrez pas réaliser ce laboratoire sans avoir fait le précédent laboratoire. Avant de commencer, le professeur

Plus en détail

INSTALLATION DE WINDOWS

INSTALLATION DE WINDOWS Installation et Réinstallation de Windows XP Vous trouvez que votre PC n'est plus très stable ou n'est plus aussi rapide qu'avant? Un virus a tellement mis la pagaille dans votre système d'exploitation

Plus en détail

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés.

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés. 2010 Ing. Punzenberger COPA-DATA GmbH Tous droits réservés. La distribution et/ou reproduction de ce document ou partie de ce document sous n'importe quelle forme n'est autorisée qu'avec la permission

Plus en détail

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT

BADPLUS V5 MANUEL D'UTILISATION. Imports de données joueurs à partir de la base fédérale en ligne Poona. Stéphan KIEFFER - Dominique BOSSERT BADPLUS V5 Imports de données joueurs à partir de la base fédérale en ligne Poona MANUEL D'UTILISATION Stéphan KIEFFER - Dominique BOSSERT Sommaire Pages RECHERCHE DE JOUEURS...- 3-1. RECHERCHE A PARTIR

Plus en détail

Questions-Réponses 1.48

Questions-Réponses 1.48 Questions-Réponses 1.48 Copyright 2001-2014 Thomas et Mathieu DUBAËLE http://www.atlence.com Tutoriel de mise en route Tutoriel de Questions-Réponses 1.48 Auteurs : Thomas et Mathieu DUBAËLE - Révision

Plus en détail

Client Citrix ICA Windows CE Carte de référence rapide

Client Citrix ICA Windows CE Carte de référence rapide Client Citrix ICA Windows CE Carte de référence rapide Exigences Pour exécuter le client ICA Windows CE, vous devez disposer des éléments suivants : Un périphérique Windows CE Une carte d'interface réseau

Plus en détail

My Poker Manager Guide Utilisateur. Guide Utilisateur

My Poker Manager Guide Utilisateur. Guide Utilisateur «My Poker Manager» Guide Utilisateur Sommaire My Poker Manager Guide Utilisateur Sommaire... 2 My Poker Manager... 3 Tous les outils... 4 1 Système d alerte... 5 2 Composant de stacking ou pile de tables...

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

Le Seven Card Stud. Club Poker 78

Le Seven Card Stud. Club Poker 78 Club Poker 78 Juin 2013 Introduction Le Seven Card Stud est une variante de poker née aux USA, au milieu du XIXe siècle. À partir des années 1930, ce jeu devient la variante la plus populaire dans les

Plus en détail

Tri-CATALOG 7 Manuel d utilisation

Tri-CATALOG 7 Manuel d utilisation Tri-CATALOG 7 Manuel d utilisation Votre numéro de série :..................................... Tri-CATALOG 7 - Manuel d utilisation! 1 / 20 Droits d auteur Ce logiciel est Copyright 1994-2012 TED et TRI-EDRE.

Plus en détail

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.

Plus en détail

Installation et paramétrage du serveur Hyper File Client / Serveur sous Windows

Installation et paramétrage du serveur Hyper File Client / Serveur sous Windows Installation et paramétrage du serveur Hyper File Client / Serveur sous Windows Auparavant un peu de technique : Hyper File Client / Serveur est un serveur de base de données. Le moteur Hyper File Client

Plus en détail

SCOoffice Mail Connector for Microsoft Outlook. Guide d'installation Outlook 2002

SCOoffice Mail Connector for Microsoft Outlook. Guide d'installation Outlook 2002 SCOoffice Mail Connector for Microsoft Outlook Guide d'installation Outlook 2002 Rév 1.1 4 décembre 2002 SCOoffice Mail Connector for Microsoft Outlook Guide d'installation - Outlook XP Introduction Ce

Plus en détail

FileZilla. Sauvegarder son site Guppy à l aide de. Sommaire:

FileZilla. Sauvegarder son site Guppy à l aide de. Sommaire: FileZilla http://filezilla.sourceforge.net/ Sauvegarder son site Guppy à l aide de Sommaire: P. 2 Téléchargement et installation P. 3 Paramétrage du transfert P. 3 L'environnement de Filezilla P. Sauvegarde

Plus en détail

Mode d'emploi Application Présences Planification des évènements

Mode d'emploi Application Présences Planification des évènements Mode d'emploi Application Présences Planification des évènements 21 avril 2005 Page 1 / 31 2005 / Guillaume Fort Sommaire 1. Description du concept...3 2. Démarrage de l'application...4 3. Philosophie

Plus en détail

PowerPoint 2003. Création d une présentation avec. Suzanne Harvey. Pour Windows

PowerPoint 2003. Création d une présentation avec. Suzanne Harvey. Pour Windows Création d une présentation avec PowerPoint 2003 Pour Windows Suzanne Harvey Conseillère pédagogique Service local du RÉCIT Commission scolaire de Saint-Hyacinthe suzanne.harvey@prologue.qc.ca Janvier

Plus en détail

AlterPoker.com Expression des besoins

AlterPoker.com Expression des besoins Expression des besoins Nom Antoine Viau Numéro d auditeur 100037916 Version Date de mise à jour 17 mars 2013 Table des matières 1. Objectif du document... 3 2. Présentation... 3 2.1. Présentation du projet...

Plus en détail

NOTICE DE EOBD-Facile Pour Android

NOTICE DE EOBD-Facile Pour Android NOTICE DE EOBD-Facile Pour Android EOBD-Facile Android 1 Outils OBD Facile copyright Introduction : EOBD-Facile est une application de diagnostic automobile. Elle vous permettra de lire les défauts moteurs

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

Manuel d'utilisation du BNE-Linux. Le mode «élève»

Manuel d'utilisation du BNE-Linux. Le mode «élève» Manuel d'utilisation du BNE-Linux Cette nouvelle version du BNE est dérivée de l'interface de la distribution Linux ENPT 2.0 de la société Imaugis : http://www.imaugis.com/accueil Le mode «élève» Accéder

Plus en détail

NOTICE DE EOBD-FACILE

NOTICE DE EOBD-FACILE NOTICE DE EOBD-FACILE POUR ios (iphone/ipad) EOBD-Facile iphone/ipad 1 Outils OBD Facile copyright 1. Paramétrer le réseau WiFi pour l'interface ELM327 Depuis le menu Réglages puis WiFi, faites la configuration

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

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

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés.

2010 Ing. Punzenberger COPA-DATA GmbH. Tous droits réservés. 2010 Ing. Punzenberger COPA-DATA GmbH Tous droits réservés. La distribution et/ou reproduction de ce document ou partie de ce document sous n'importe quelle forme n'est autorisée qu'avec la permission

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

Guide de l'utilisateur : Surveillance MédiaSource Analytique

Guide de l'utilisateur : Surveillance MédiaSource Analytique Guide de l'utilisateur : Surveillance MédiaSource Analytique Chapitre 1 : Bienvenue à Surveillance MédiaSource Analytique 2 À propos de Surveillance MédiaSource Analytique 2 Choisir le ton d'un article

Plus en détail

Les Enseignants de l Ere Technologique - Tunisie. Niveau 1

Les Enseignants de l Ere Technologique - Tunisie. Niveau 1 Les Enseignants De l Ere Technologique - Tunisie - LE CLOUD COMPUTING TAT Tunisie 2014 Le Cloud Computing 1. Définition Les Enseignants de l Ere Technologique - Tunisie Le cloud computing (en français

Plus en détail

Enregistrer un document

Enregistrer un document Enregistrer un document Conventions : "clic" sans plus de précision implique d'appuyer sur le bouton gauche de la souris. "clic-droit" implique d'appuyer sur le bouton droit de la souris. Un titre de menu

Plus en détail

Tutorial et Guide TeamViewer

Tutorial et Guide TeamViewer Tutorial et Guide TeamViewer TeamViewer est un programme qui permet de partager son bureau ou prendre la main d'un bureau à distance via internet partout dans le monde, et d'ainsi avoir l'opportunité de

Plus en détail

MEDIAplus elearning. version 6.6

MEDIAplus elearning. version 6.6 MEDIAplus elearning version 6.6 L'interface d administration MEDIAplus Sommaire 1. L'interface d administration MEDIAplus... 5 2. Principes de l administration MEDIAplus... 8 2.1. Organisations et administrateurs...

Plus en détail

Une étape d'utilisation par la saisie des fiches de contrôle et la synchronisation serveur / poste nomade.

Une étape d'utilisation par la saisie des fiches de contrôle et la synchronisation serveur / poste nomade. Module Qualité dans QuadraPROPRETE Sommaire 1. PRINCIPES DE FONCTIONNEMENT... 2 2. MISE EN PLACE DE LA TOPOGRAPHIE DES LOCAUX A CONTROLER... 2 2.1. Les éléments... 2 2.2. Les sous familles d'éléments...

Plus en détail

Gestion des lettres d information

Gestion des lettres d information Gestion des lettres d information Documentation utilisateur Gestion des lettres d information Comptanoo - 27/09/2006 - Page 1/10 Sommaire SOMMAIRE... 2 I PARAMETRAGE DE L APPLICATION... 3 A - ADRESSE D'EXPEDITION...

Plus en détail