{"id":601,"date":"2018-11-09T11:06:50","date_gmt":"2018-11-09T10:06:50","guid":{"rendered":"http:\/\/wollef.org\/?p=601"},"modified":"2018-11-09T11:06:50","modified_gmt":"2018-11-09T10:06:50","slug":"programmation-du-jeu-pong-en-java-modifions-le-jeu-pour-jouer-a-deux-34","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/programmation-du-jeu-pong-en-java-modifions-le-jeu-pour-jouer-a-deux-34\/","title":{"rendered":"Programmation du Jeu Pong en Java &#8211; Modifions le jeu pour jouer \u00e0 deux ! (5\/6)"},"content":{"rendered":"<p>Pour le moment je joue seul contre l\u2019ordinateur mais je voudrais jouer ensemble avec mon petit fr\u00e8re.<\/p>\n<p>Donc il faut dire que la deuxi\u00e8me raquette soit contr\u00f4l\u00e9e par le clavier.<\/p>\n<p>Pour contr\u00f4ler la deuxi\u00e8me raquette avec le clavier il fallait cr\u00e9er deux nouvelles variables qui s\u2019appellent <em>gegnermoveup<\/em> et <em>gegnermovedown<\/em>, ces variables m\u00e9morisent quels mouvements veut le joueur.<\/p>\n<pre><code>protected static boolean gegnermoveup= false;\nprotected static boolean gegnermovedown= false;\n<\/code><\/pre>\n<p>Donc j\u2019ai programm\u00e9 que quand on touche la touche <strong>Q<\/strong> la raquette monte et quand on touche <strong>W<\/strong> la raquette descend\u00a0: c\u2019est ce qui est en gris dans le code.<\/p>\n<pre><code>@Override\n\tpublic void keyPressed(KeyEvent e) {\n\t\t if (e.getKeyCode()== KeyEvent.VK_UP ) {\n\t\t\t Var.moveup = true;\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_DOWN) {\n\t\t\t Var.movedown = true;\n\t\t } <b>else if (e.getKeyCode()== KeyEvent.VK_Q ) {\n\t\t\t Var.gegnermoveup = true;\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_W) {\n\t\t\t Var.gegnermovedown = true;\n\t\t }<\/b>\n\n\t}\n\n\t@Override\n\tpublic void keyReleased(KeyEvent e) {\n\t\t if (e.getKeyCode()== KeyEvent.VK_UP ) {\n\t\t\t Var.moveup = false;\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_DOWN) {\n\t\t\t Var.movedown = false;\n\t\t } else <b>if (e.getKeyCode()== KeyEvent.VK_Q ) {\n\t\t\t Var.gegnermoveup = false;\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_W) {\n\t\t\t Var.gegnermovedown = false; <\/b>\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_C) {\n\t\t\t Var.modeCouleurs = true;\n\t\t } else if (e.getKeyCode()== KeyEvent.VK_B) {\n\t\t\t Var.modeCouleurs = false;\n\t\t }\n\t}\n\n<\/code><\/pre>\n<p>Enfin j\u2019ai copi\u00e9 la classe <em>Movement<\/em> qui calcule la position de la premi\u00e8re raquette dans une nouvelle classe qui s\u2019appelle <em>GegnerMovementManual<\/em> pour qu\u2019elle calcule la position de la deuxi\u00e8me raquette.<\/p>\n<p>Pour que cela fonctionne il faut remplacer l\u2019utilisation de <em>GegnerMovement<\/em> (le mode automatique) par cette nouvelle classe <em>GegnerMovementManual<\/em> (le mode avec le clavier).<\/p>\n<p>&nbsp;<\/p>\n<p>Les diff\u00e9rences entre la classe Movement et la classe <em>GegnerMovementManual<\/em> sont en gris dans le code (utiliser <em>gegnermoveup<\/em>, <em>gegnermovedown<\/em>, <em>gegnery<\/em> pour la raquette 2 au lieu de <em>moveup<\/em>, <em>movedown<\/em>, <em>y<\/em> pour la raquette 1).<\/p>\n<pre><code>\npublic GegnerMovementManual() {\n\t\tmove = new Timer();\n\t\tmove.scheduleAtFixedRate(new TimerTask() {\n\t\t\t@Override\n\t\t\tpublic void run() {\n\t\t\t\tif (Var.gegnermoveup == true) {\n\t\t\t\t\tif (Var.gegnery &gt;= 20) {\n\t\t\t\t\t\tVar.gegnery -= 2;\n\n\t\t\t\t\t}\n\t\t\t\t} else if(Var.gegnermovedown) {\n\t\t\t\t\tif(Var.gegnery &lt;= Var.screenheight - 200) {\n\t\t\t\t\t\tVar.gegnery +=2 ;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\t\t}, 0, 4);\n\t}\n\n<\/code><\/pre>\n<p>Et voil\u00e0 maintenant nous pouvons jouer \u00e0 deux \u00e0 Pong\u00a0!!!<\/p>\n<p>Pour pouvoir changer le mode avec le clavier, j\u2019ai ajout\u00e9 une variable qui s\u2019appelle <em>gegnermodeauto<\/em>.<\/p>\n<pre><code>\n\n\tstatic boolean gegnerModeAuto = true;<\/code><\/pre>\n<p>J\u2019ai modifi\u00e9 le <em>KeyHandler<\/em> pour changer cette variable quand on appuie la touche A (Gegner Automatique) ou Z (Gegner manuel).<\/p>\n<pre><code>\nelse if (e.getKeyCode()== KeyEvent.VK_A) {\n\t\t Var.gegnerModeAuto = true;\n\t } else if (e.getKeyCode()== KeyEvent.VK_Z) {\n\t\t Var.gegnerModeAuto = false;\n\t }\n<\/code><\/pre>\n<p>Et j\u2019ai modifi\u00e9 les deux classes <em>GegnerMovementManual<\/em> et <em>GegnerMovement<\/em> pour que soir l\u2019une soit l\u2019autre s\u2019ex\u00e9cute en fonction de la variable.<\/p>\n<pre><code>\npublic GegnerMovement() {\n\t\tmove = new Timer();\n\t\tmove.scheduleAtFixedRate(new TimerTask() {\n\t\t\tpublic void run() {\n\t\t\t\tif (Var.gegnerModeAuto == true) {\n\t\t\t\t\t\u2026 reste du code\n\npublic GegnerMovementManual() {\n\t\tmove = new Timer();\n\t\tmove.scheduleAtFixedRate(new TimerTask() {\n\t\t\t@Override\n\t\t\tpublic void run() {\n\t\t\t\tif (Var.gegnerModeAuto == false) {\n\t\t\t\t\t\u2026 reste du code\n\n<\/code><\/pre>\n<p>Pour savoir quel mode est actif, j\u2019ai modifi\u00e9 la classe <em>Draw<\/em> pour afficher un signe <strong>*<\/strong> \u00e0 c\u00f4t\u00e9 du score du Gegner quand le mode est automatique.<\/p>\n<pre><code>\ng.drawString(\n\"\" + Var.gegnerPoints+(Var.gegnerModeAuto ? \"*\" : \"\"), Var.screenwidth\/2 + 50,\n75\n);\n\n<\/code><\/pre>\n<p>Et voici le r\u00e9sultat\u00a0:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-602\" src=\"http:\/\/wollef.org\/wp-content\/uploads\/2019\/09\/2-players-300x241.png\" alt=\"\" width=\"500\" height=\"402\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pour le moment je joue seul contre l\u2019ordinateur mais je voudrais jouer ensemble avec mon petit fr\u00e8re. Donc il faut dire que la deuxi\u00e8me raquette soit contr\u00f4l\u00e9e par le clavier. Pour contr\u00f4ler la deuxi\u00e8me raquette avec le clavier il fallait cr\u00e9er deux nouvelles variables qui s\u2019appellent gegnermoveup et gegnermovedown, ces variables m\u00e9morisent quels mouvements veut <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/programmation-du-jeu-pong-en-java-modifions-le-jeu-pour-jouer-a-deux-34\/\">Continue Reading<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29,45,5,13],"tags":[],"class_list":["post-601","post","type-post","status-publish","format-standard","hentry","category-programmation-java-jeux-pong","category-java","category-jeux-video","category-pong"],"_links":{"self":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/comments?post=601"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/601\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}