Konami Code

Konami Code

"קוד קונמי" (Konami Code) הוא ככל הנראה ה"צ'יט" (cheat) המפורסם ביותר בעולם משחקי המחשב.

מדובר על צירוף המקשים: למעלה-למעלה-למטה-למטה-שמאל-ימין-שמאל-ימין-האות B-האות A.

כלומר (משמאל לימין):

BA

קוד קונאמי הומצא עבור משחקי ניטנדו, אלו הכפתורים שיש ב- controller. אבל גם כיום הקוד עדיין שימושי.

אתרים רבים משתמשים ברצף הפעולות של קוד קונאמי כ- Easter Egg – הפעלה שלו תגרום למשהו לא צפוי באתר (נסו את Buzzfeed או את Digg. ויש דוגמאות נוספות)

קוד

זה הכל טוב ויפה, אבל איך עושים את זה?

אז ככה.

const pressed = [];
const secretCode = 'ArrowUpArrowUpArrowDownArrowDownArrowLeftArrowRightArrowLeftArrowRightBA';
const KonamiCodeLength = 10;

ניצור מערך בו נשמור את עשרת המקשים האחרונים שהוקשו, ובכל פעם נבדוק האם הרצף נכון:

window.addEventListener('keyup', function(e) {
  console.log(e.key);
  pressed.push(e.key);
  pressed.splice(-KonamiCodeLength - 1, pressed.length - KonamiCodeLength);
  if (pressed.join('').includes(secretCode)) {
    console.log('Hooray');
    cornify_add();
  }
});

כאשר הרצף הוא אכן ״קוד קונאמי״, נפעיל את ה- Easter Egg. למשל להוסיף חדי קרן לעמוד. בשביל זה צריך גם את הסקריפט:

<script type="text/javascript" src="http://www.cornify.com/js/cornify.js"></script>

עד כאן הכל פשוט, זה סקריפט שמופיע באינטרנט בהמון וריאציות. אבל… אני רוצה להוסיף גם תמיכה במובייל. אני אוותר על המקשים B ו- A – נזהה רצף של 8 swipes בכיוונים שונים.

השיטה תהיה זהה לזו של זיהוי רצף מקשים, רק צריך להוסיף דרך לזהות כל פעם swipe. נאזין ל- touchstart ול- touchend: בתחילת התנועה נשמור את הקואורדינטות, ובסיום נראה איפה הקוארדינטות ביחס להתחלה. בצורה כזו נדע באיזה כיוון מדובר.

const gestures = [];
const gesturesCode = "uuddlrlr";
var lastX, lastY;
window.addEventListener('touchstart', function(e) {
  lastX = e.pageX;lastY = e.pageY;
}, false);
window.addEventListener('touchend', function(e) {
  if (e.pageY - 100 &gt; lastY) {
    console.log("down");
    gestures.push("d");
  }
  if (e.pageY + 100 &lt; lastY) { console.log("up"); gestures.push("u"); } if (e.pageX - 100 &gt; lastX) {
    console.log("right");
    gestures.push("r");
  }
  if (e.pageX + 100 &lt; lastX) {
    console.log("left");
    gestures.push("l");
  }
  gestures.splice(-gesturesCode.length - 1, gestures.length - gesturesCode.length);
  console.log(gestures);
  if (gestures.join('').includes(gesturesCode)) {
    console.log('Hooray');
    cornify_add();
  }
}, false);

 

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *