{"id":1001,"date":"2013-10-04T17:39:36","date_gmt":"2013-10-04T16:39:36","guid":{"rendered":"http:\/\/cyol.fr\/blog\/?p=1001"},"modified":"2013-11-14T16:43:06","modified_gmt":"2013-11-14T15:43:06","slug":"konami-code-en-javascript","status":"publish","type":"post","link":"https:\/\/cyol.fr\/blog\/post\/konami-code-en-javascript\/","title":{"rendered":"Konami Code en javascript"},"content":{"rendered":"<p><a href=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/javascript-100.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-full wp-image-1037\" title=\"javascript-100\" alt=\"\" src=\"https:\/\/cyol.fr\/blog\/wp-content\/uploads\/billets\/icones\/javascript-100.png\" width=\"100\" height=\"99\" \/><\/a>Travaillant actuellement sur un petit projet de jeu HRML5\/JS\/CSS pouvant tourner en mode offline, j&rsquo;ai voulu ins\u00e9rer un mode de jeu particulier sans toutefois mettre clairement \u00e0 l&rsquo;\u00e9cran un bouton pour d\u00e9clencher cette action.<\/p>\n<p>J&rsquo;ai \u00e9videmment pens\u00e9 \u00e0 un <a title=\"Konami Code sur Wikip\u00e9dia fr\" href=\"http:\/\/fr.wikipedia.org\/wiki\/Code_Konami\" target=\"_blank\">Konami Code<\/a> !<\/p>\n<p><!--more--><br \/>\nEn recherchant sur internet \u00ab\u00a0Konami Code javascript\u00a0\u00bb on en trouve un certain nombre, certains m\u00eame avec une biblioth\u00e8que compl\u00e8te. Mais je voulais juste une petite fonctionnalit\u00e9 qui ne me prendrait que quelques lignes.<\/p>\n<p>J&rsquo;ai finalement trouv\u00e9 <a title=\"Ajouter un Konami Code \u00e0 son site sur xumi.fr\" href=\"http:\/\/xumi.fr\/articles\/ajouter-un-konami-code-a-son-site\" target=\"_blank\">cet exemple de xUMI<\/a> qui me convenait presque.<\/p>\n<pre class=\"brush:js\">jQuery(function(){\r\n    var kKeys = [];\r\n    function Kpress(e){\r\n        kKeys.push(e.keyCode);\r\n        if (kKeys.toString().indexOf(\"38,38,40,40,37,39,37,39,66,65\") &gt;= 0) {\r\n            jQuery(this).unbind('keydown', Kpress);\r\n            kExec();\r\n        }\r\n    }\r\n    jQuery(document).keydown(Kpress);\r\n});\r\nfunction kExec(){\r\n    \/\/Ins\u00e9rer ici les actions d\u00e9clench\u00e9es par le Konami Code\r\n    alert(\"KONAMI CODE !\");\r\n}<\/pre>\n<p>Ma principale g\u00eane \u00e9tant que si on se loupait dans la saisie ou si on ne cherchait pas \u00e0 faire le Code, le tableau kKeys stockant les touches utilis\u00e9es continuait \u00e0 stocker sans arr\u00eat. Dans un premier temps, j&rsquo;ai donc ajout\u00e9 un simple test sur le nombre d&rsquo;\u00e9l\u00e9ment de kKeys avec vidange du tableau kKeys si trop plein. On laisse plus de 10 \u00e9l\u00e9ments car on recherche la suite du Code dans la liste compl\u00e8te des entr\u00e9es dans kKeys.<\/p>\n<pre class=\"brush:js\">function Kpress(e){\r\n    \/\/Ajout d'un test sur le nombre d'\u00e9l\u00e9ment dans kKeys\r\n    if(kKeys.length &lt; 30){\r\n        kKeys.push(e.keyCode);\r\n        if (kKeys.toString().indexOf(\"38,38,40,40,37,39,37,39,66,65\") &gt;= 0) {\r\n            $(this).unbind('keydown', Kpress);\r\n            kExec();\r\n        }\r\n    }else{\r\n        kKeys = [];\r\n    }\r\n}<\/pre>\n<p>Malheureusement, comment savoir o\u00f9 on en est et \u00e0 quel moment c&rsquo;est r\u00e9initialis\u00e9 ? Du coup j&rsquo;ai ajout\u00e9 un test sur les touches tap\u00e9s, ne stockant dans kKeys que les touches attendues dans le Konami Code et r\u00e9initialisant le tableau kKeys en cas d&rsquo;utilisation d&rsquo;une touche autre :<\/p>\n<pre class=\"brush:js\">$(function(){\r\n    $(document).keydown(Kpress);\r\n});\r\nvar kKeys = [];\r\nfunction Kpress(e){\r\n    var toucheOk = [37, 38, 39, 40, 65, 66];\r\n    if($.inArray(e.keyCode, toucheOk) &gt; -1 &amp;&amp; kKeys.length &lt; 30){\r\n        kKeys.push(e.keyCode);\r\n        if (kKeys.toString().indexOf(\"38,38,40,40,37,39,37,39,66,65\") &gt;= 0) {\r\n            $(this).unbind('keydown', Kpress);\r\n            kExec();\r\n        }\r\n    }else{\r\n        kKeys = [];\r\n    }\r\n}\r\nfunction kExec(){\r\n   alert(\"KONAMI CODE !\")\r\n}<\/pre>\n<p>Note : Pour fonctionner il faut forc\u00e9ment charger la <a title=\"jQuery : Biblioth\u00e8que Javascript\" href=\"http:\/\/jquery.com\/\" target=\"_blank\">biblioth\u00e8que jQuery<\/a> avant le script.<\/p>\n<p><script type=\"text\/javascript\">\/\/ < ![CDATA[\n\/\/-->< ![CDATA[\/\/><!--\njQuery(function(){\n    var kKeys = [];\n    function Kpress(e){\n        var toucheOk = [37, 38, 39, 40, 65, 66];\n        if(kKeys.length < 30){\n            kKeys.push(e.keyCode);\n            if (kKeys.toString().indexOf(\"38,38,40,40,37,39,37,39,66,65\") >= 0) {\n                jQuery(this).unbind('keydown', Kpress);\n                kExec();\n            }\n        }else{\n            kKeys = [];\n        }\n    }\n    jQuery(document).keydown(Kpress);\n});\nfunction kExec(){\n    \/\/Ins\u00e9rer ici les actions d\u00e9clench\u00e9es par le Konami Code\n    alert(\"KONAMI CODE !\");\n}\n \/\/-->< !\n\/\/ ]]><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Travaillant actuellement sur un petit projet de jeu HRML5\/JS\/CSS pouvant tourner en mode offline, j&rsquo;ai voulu ins\u00e9rer un mode de jeu particulier sans toutefois mettre clairement \u00e0 l&rsquo;\u00e9cran un bouton pour d\u00e9clencher cette action. J&rsquo;ai \u00e9videmment pens\u00e9 \u00e0 un Konami Code !En recherchant sur internet \u00ab\u00a0Konami code javascript\u00a0\u00bb on en trouve un certain nombre, certains m\u00eame avec une biblioth\u00e8que compl\u00e8te. [&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":1037,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,45],"tags":[116,23],"class_list":["post-1001","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-developpement","category-javascript","tag-javascript","tag-jeu","odd"],"_links":{"self":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1001","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/comments?post=1001"}],"version-history":[{"count":28,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1001\/revisions"}],"predecessor-version":[{"id":1099,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/posts\/1001\/revisions\/1099"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media\/1037"}],"wp:attachment":[{"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/media?parent=1001"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/categories?post=1001"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cyol.fr\/blog\/wp-json\/wp\/v2\/tags?post=1001"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}