{"id":2528,"date":"2022-06-01T15:17:28","date_gmt":"2022-06-01T14:17:28","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/?p=2528"},"modified":"2022-06-07T16:09:24","modified_gmt":"2022-06-07T15:09:24","slug":"projet-jeu-de-cartes","status":"publish","type":"post","link":"https:\/\/blog.univ-angers.fr\/polytech_2A\/2022\/06\/01\/projet-jeu-de-cartes\/","title":{"rendered":"Projet jeu de cartes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\" style=\"font-size:10px\">Tom Daguerre, Zo\u00e9 Coudray, Mathis Vigneron<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Bonjour \u00e0 tous et \u00e0 toutes, nous sommes un groupe de 3 \u00e9tudiants de Peip2. Le projet dont nous avons \u00e9cop\u00e9 est la cr\u00e9ation d&#8217;un jeu de Rami jouable \u00e0 plusieurs avec un serveur local.<\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Notre projet, son objectif premier et le premier probl\u00e8me rencontr\u00e9 :<\/h4>\n\n\n\n<p class=\"has-black-color has-text-color wp-block-paragraph\">L&#8217;objectif de notre projet a vari\u00e9 au cours de celui-ci. Au d\u00e9part, notre but \u00e9tait de modifier le code du jeu Aisleriot, un jeu de solitaire en open source. Cependant, celui-ci contenait le code d&#8217; une multitude de jeux de cartes et utilisait de nombreux langages diff\u00e9rents, ce qui rendait la compr\u00e9hension du code vraiment compliqu\u00e9e. On a donc d\u00e9cid\u00e9, avec notre responsable de projet, Nicolas Delanoue, de programmer le jeu  du Rami \u00e0 partir de 0 en utilisant Python.<\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Pourquoi avons-nous choisi ce projet?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Pour tous les trois, ce projet \u00e9tait notre premier choix. Nous trouvions tous que la grande partie programmation rendait ce projet tr\u00e8s int\u00e9ressant. Nous souhaitions nous am\u00e9liorer dans ce domaine, et comme nous souhaitons tous nous orienter en informatique en troisi\u00e8me ann\u00e9e, ce projet nous semblait \u00eatre le choix le plus logique. <\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Qu&#8217;est-ce que le Rami? <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Le Rami est un jeu de cartes de 2 \u00e0 4 joueurs, il n\u00e9cessite deux paquets de 54 cartes. Les r\u00e8gles peuvent para\u00eetre assez compliqu\u00e9es, le but est de se d\u00e9barrasser de ses cartes en posant des brelans, des carr\u00e9s ou des suites (cartes de m\u00eame couleurs avec des valeurs qui se suivent) sur le plateau. Chaque carte poss\u00e8de un nombre de points qui lui est attribu\u00e9, \u00e0 la fin de la manche, le joueur avec le plus de points en main perd. Au d\u00e9but de chaque tour, le joueur pioche une carte et \u00e0 la fin de ce tour, il en d\u00e9fausse une. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Durant la &#8220;premi\u00e8re pose&#8221;, le joueur doit poser un certains nombre de points sur le plateau afin que ces coups soient accept\u00e9s, si le total des points pos\u00e9s ne d\u00e9passent pas la limite, alors les coups sont refus\u00e9s et le joueur doit reprendre ses cartes dans sa main. On peut d\u00e9finir la dite limite \u00e0 30 ou 51 selon la version du jeu. Apr\u00e8s la premi\u00e8re pose effectu\u00e9e, il devient possible pour le joueur de rajouter des cartes sur un coup d\u00e9j\u00e0 existant, de modifier des coups sur le plateau ou m\u00eame de prendre une carte pos\u00e9e dans sa main \u00e0 condition qu&#8217;il la joue durant le tour.<\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Programmation du jeu<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Afin de programmer notre version du Rami, nous avons utilis\u00e9 Python afin de programmer le serveur et une premi\u00e8re version du client, jouable uniquement en console. Et nous avons commenc\u00e9 \u00e0 programmer un second client en JavaScript afin de cr\u00e9er une interface graphique, rendant le jeu plus agr\u00e9able et intuitif. Voici, en r\u00e9sum\u00e9, comment ces trois diff\u00e9rents programmes communiquent ensemble:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Schema-serveur.png\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"491\" src=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Schema-serveur.png\" alt=\"\" class=\"wp-image-2851\" srcset=\"https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-serveur.png 594w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-serveur-300x248.png 300w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-serveur-363x300.png 363w\" sizes=\"auto, (max-width: 594px) 100vw, 594px\" \/><\/a><\/figure>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Fonctionnement du programme<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Schema-fonctionnel-simplifie.png\"><img loading=\"lazy\" decoding=\"async\" width=\"746\" height=\"626\" src=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Schema-fonctionnel-simplifie.png\" alt=\"\" class=\"wp-image-2866\" srcset=\"https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-fonctionnel-simplifie.png 746w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-fonctionnel-simplifie-300x252.png 300w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Schema-fonctionnel-simplifie-358x300.png 358w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le fonctionnement du jeu est g\u00e9r\u00e9 par le serveur, le r\u00f4le des clients est seulement d&#8217;envoyer des informations au dit serveur pour le notifier des choix de chaque joueur. En clair, chaque client est reli\u00e9 \u00e0 un seul joueur et se connecte au serveur. Une fois deux joueurs connect\u00e9s, le jeu se lance, le serveur va afficher le menu au joueur 1, lui demandant si il veut commencer la partie, voir les r\u00e8gles ou changer la limite de la premi\u00e8re pose. Une fois la partie commenc\u00e9e, le serveur va g\u00e9rer tous les calculs \u00e0 effectuer et les clients vont seulement s&#8217;occuper de l&#8217;affichage et d&#8217;envoyer des donn\u00e9es au serveur quand il en a besoin.<\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Evolution de nos objectifs au cours du projet<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Comme sp\u00e9cifi\u00e9 au d\u00e9but, notre objectif principal a rapidement \u00e9t\u00e9 chang\u00e9 \u00e0 cause de nombreuses difficult\u00e9s concernant le jeu Aisleriot. Notre professeur encadrant nous avait alors fix\u00e9 comme objectif principal de cr\u00e9er un jeu en Python jouable dans la console sur un ordinateur (sans serveur). Apr\u00e8s avoir atteint ce premier but, nous nous sommes fix\u00e9 un deuxi\u00e8me objectif qui \u00e9tait de cr\u00e9er un serveur et un premier client sur python. Nous sommes dor\u00e9navant encore en train d&#8217;essayer d&#8217;achever notre troisi\u00e8me et dernier objectif, qui est celui de cr\u00e9er une interface graphique pour notre jeu. <\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Interface graphique, o\u00f9 en sommes nous?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Nous sommes encore assez loin d&#8217;avoir compl\u00e9ter ce dernier objectif. Nous nous sommes d&#8217;abord focalis\u00e9 sur l&#8217;apprentissage du JavaScript afin de se familiariser avec ce langage. Apr\u00e8s avoir pass\u00e9 plusieurs heures \u00e0 effectuer des tests et des recherches, nous nous sentons maintenant assez \u00e0 l&#8217;aise pour avancer. Nous avions \u00e9galement pris le temps de r\u00e9aliser un design pour l&#8217;interface graphique et ensuite une page HTML sur ce mod\u00e8le. Il nous reste donc d\u00e9sormais \u00e0 programmer le client pour permettre \u00e0 celui-ci et au serveur de communiquer entre eux.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Projet-affichage-page.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blog.univ-angers.fr\/istiaprojetsei2\/files\/2022\/06\/Projet-affichage-page-1024x576.jpg\" alt=\"\" class=\"wp-image-2923\" srcset=\"https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Projet-affichage-page-1024x576.jpg 1024w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Projet-affichage-page-300x169.jpg 300w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Projet-affichage-page-768x432.jpg 768w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Projet-affichage-page-500x281.jpg 500w, https:\/\/blog.univ-angers.fr\/polytech_2A\/files\/2022\/06\/Projet-affichage-page.jpg 1152w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>&#8220;design&#8221; de l&#8217;interface graphique<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le &#8220;plateau de modification&#8221; est l&#8217;endroit o\u00f9 le joueur pourra cr\u00e9er les coups qu&#8217;il voudra jouer avant qu&#8217;ils soient d\u00e9pos\u00e9s automatiquement sur le plateau (seulement si le coup est consid\u00e9r\u00e9 valide). <\/p>\n\n\n\n<h4 class=\"has-text-align-center has-text-color has-medium-font-size wp-block-heading\" style=\"color:#f2893f\">Pour finir&#8230; <\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ce projet nous a servi de multiples mani\u00e8res. Nous nous sommes \u00e9videmment am\u00e9lior\u00e9 en programmation, nous avons pu \u00e9galement apprendre \u00e0 mieux travailler en \u00e9quipe et \u00e0 se coordonner afin d&#8217;\u00eatre plus efficace dans notre travail. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C&#8217;\u00e9tait un exp\u00e9rience int\u00e9ressante et satisfaisante, voir notre projet prendre vie en partant de z\u00e9ro \u00e9tait gratifiant et r\u00e9ussir \u00e0 r\u00e9soudre nos probl\u00e8mes par nous m\u00eame nous a aussi beaucoup apport\u00e9. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous aurions cependant aim\u00e9 atteindre notre dernier objectif, l&#8217;interface graphique, nous restons donc un peu sur notre faim \u00e0 ce sujet. Nous essaierons donc s\u00fbrement de le faire de notre c\u00f4t\u00e9 sur notre temps libre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nous remercions bien \u00e9videmment notre professeur encadrant Mr. Delanoue pour nous avoir accompagn\u00e9 et pour nous avoir montr\u00e9 la voie \u00e0 suivre quand nous \u00e9tions bloqu\u00e9s.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tom Daguerre, Zo\u00e9 Coudray, Mathis Vigneron Bonjour \u00e0 tous et \u00e0 toutes, nous sommes un groupe de 3 \u00e9tudiants de Peip2. Le projet dont nous avons \u00e9cop\u00e9 est la cr\u00e9ation d&#8217;un jeu de Rami jouable \u00e0 plusieurs avec un serveur &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/polytech_2A\/2022\/06\/01\/projet-jeu-de-cartes\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":87355,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[522],"tags":[],"class_list":["post-2528","post","type-post","status-publish","format-standard","hentry","category-522"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/posts\/2528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/users\/87355"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/comments?post=2528"}],"version-history":[{"count":9,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/posts\/2528\/revisions"}],"predecessor-version":[{"id":2955,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/posts\/2528\/revisions\/2955"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/media?parent=2528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/categories?post=2528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/polytech_2A\/wp-json\/wp\/v2\/tags?post=2528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}