{"id":588,"date":"2018-11-04T10:47:31","date_gmt":"2018-11-04T09:47:31","guid":{"rendered":"http:\/\/wollef.org\/?p=588"},"modified":"2018-11-04T10:47:31","modified_gmt":"2018-11-04T09:47:31","slug":"programmation-du-jeu-pong-en-java-modifions-le-jeu-34","status":"publish","type":"post","link":"https:\/\/wollef.org\/blog\/programmation-du-jeu-pong-en-java-modifions-le-jeu-34\/","title":{"rendered":"Programmation du Jeu Pong en Java &#8211; Modifions le jeu avec une vitesse variable ! (3\/6)"},"content":{"rendered":"<p>On a vu que dans le jeu original la vitesse de la balle augmente au cours de la partie, jusqu&#8217;\u00e0 ce que l&#8217;un des joueurs perde le point.<\/p>\n<p>Or dans la version du tutoriel la balle va toujours \u00e0 la m\u00eame vitesse.<\/p>\n<p>On doit donc trouver comment changer la vitesse de la balle pendant le jeu.<\/p>\n<h3><a name=\"_Toc515809715\"><\/a>Etude de la classe BallMovement<\/h3>\n<p>Le fichier qui dirige la balle s\u2019appelle BallMovement.<\/p>\n<pre><code>public BallMovement() {\n   move = new Timer();\n   move.scheduleAtFixedRate(\n      new TimerTask() {\n         public void run() {\n            Var.ballx += Var.balldirx;\n            Var.bally += Var.balldiry;\n         }\n      },\n      0,\n      4\n   );\n}<\/code><\/pre>\n<p>Toutes les 4 millisecondes, le timer ex\u00e9cute ce qui est dans la m\u00e9thode run()\u00a0: la nouvelle position de la balle qui est ballx et bally, est modifi\u00e9e de balldirx et balldiry.<\/p>\n<p>Dans la version du tutoriel la balledirx et la balldiry sont toujours 1 ou -1 et c\u2019est le fichier BallKollision qui change ces valeurs quand la balle touche une raquette.<\/p>\n<h3><a name=\"_Toc515809716\"><\/a>Ajout de la variable \u2018vitesse\u2019<\/h3>\n<p>On doit modifier le code pour ajouter la notion de vitesse.<\/p>\n<p>On va donc cr\u00e9er la variable vitesse dans le fichier var.<\/p>\n<pre><code>static int vitesse=3;\n<\/code><\/pre>\n<p>Et maintenant faire changer la position en utilisant la vitesse\u00a0:<\/p>\n<pre><code>Var.ballx += Var.balldirx * Var.vitesse;\nVar.bally += Var.balldiry * Var.vitesse;\n<\/code><\/pre>\n<p>En relan\u00e7ant le jeux la balle va beaucoup plus vite (3 fois) et c\u2019est plus difficile \u00e0 jouer\u00a0!!!<\/p>\n<h3>Augmentation de la vitesse pendant le jeu<\/h3>\n<p>Il faut maintenant trouver un moyen de changer la vitesse pendant le jeu, donc il faut savoir depuis quand le jeu a commenc\u00e9. On va donc ajouter une variable d\u00e9butjeu<\/p>\n<pre><code>\nstatic long debutJeu= 0;\n<\/code><\/pre>\n<p>A chaque fois que la balle est mise au centre on m\u00e9morise l\u2019heure de la partie<\/p>\n<pre><code>\nVar.debutJeu = System.currentTimeMillis();\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>A chaque cycle de BallKollision on va calculer une vitesse qui va d\u00e9pendre de la dur\u00e9e de la partie.<\/p>\n<pre><code>\nlong maintenant = System.currentTimeMillis();\nlong duree = maintenant - Var.debutJeu;\nVar.vitesse = 1 + duree \/ 10000;\nVar.ballx += Var.balldirx * Var.vitesse;\nVar.bally += Var.balldiry * Var.vitesse;\n<\/code><\/pre>\n<p>Toutes les dix secondes la balle acc\u00e9l\u00e8re.<\/p>\n<p>En relan\u00e7ant le jeu c\u2019est bien ce qui ce passe. Mais la vitesse augmente de 1 \u00e0 chaque fois\u00a0: quand la vitesse passe de 1 \u00e0 2, c\u2019est trop rapide pour l\u2019ordinateur.<\/p>\n<h3>Changement plus progressif de la vitesse<\/h3>\n<p>On doit trouver le moyen de rendre progressif l\u2019acc\u00e9l\u00e9ration de la balle. Au lieu d\u2019utiliser des nombres entiers on utilise des nombres d\u00e9cimaux.<\/p>\n<p>Dans le fichier Var, cela donne\u00a0:<\/p>\n<pre><code>static double ballx = 200, bally = 500;\nstatic double vitesse=1;\n<\/code><\/pre>\n<p>Dans le fichier BallMovement, cela donne\u00a0:<\/p>\n<pre><code>long maintenant = System.currentTimeMillis();\ndouble duree = maintenant - Var.debutJeu;\nVar.vitesse = 1.0 + duree \/ 10000.0;\nVar.ballx += Var.balldirx * Var.vitesse;\nVar.bally += Var.balldiry * Var.vitesse;\n<\/code><\/pre>\n<p>On a aussi d\u00fb corriger la classe Draw car le dessin doit se faire avec des nombres entiers (dessin de la balle \u00e0 sa position)\u00a0:<\/p>\n<pre><code>g.fillRect((int)Var.ballx, (int) Var.bally, 20, 20);\n<\/code><\/pre>\n<p><strong>Hourra\u00a0! Le programme marche comme l\u2019original avec une balle qui acc\u00e9l\u00e8re en cours de jeu\u00a0!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On a vu que dans le jeu original la vitesse de la balle augmente au cours de la partie, jusqu&#8217;\u00e0 ce que l&#8217;un des joueurs perde le point. Or dans la version du tutoriel la balle va toujours \u00e0 la m\u00eame vitesse. On doit donc trouver comment changer la vitesse de la balle pendant le <a class=\"read-more\" href=\"https:\/\/wollef.org\/blog\/programmation-du-jeu-pong-en-java-modifions-le-jeu-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-588","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\/588","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=588"}],"version-history":[{"count":0,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/posts\/588\/revisions"}],"wp:attachment":[{"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/media?parent=588"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/categories?post=588"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wollef.org\/blog\/wp-json\/wp\/v2\/tags?post=588"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}