-
Notifications
You must be signed in to change notification settings - Fork 0
/
konamicode.js
51 lines (45 loc) · 1.53 KB
/
konamicode.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* Detecting the Konami code in RxJS
*
* Here's a more complex example - let's check for the Konami Code on our
* webpage and activate a cheat code if someone types it in. This looks more
* complex than original example, but only because JavaScript has no equivalent
* of Enumerable.SequenceEqual (i.e. check if two lists have the same elements)
*/
// NB: These values work for a US keyboard, but they probably don't if you're
// using another keyboard layout. You might have to do some experimentation to
// find the right values.
var up = 38;
var down = 40;
var left = 37;
var right = 39;
var b = 66;
var a = 65;
var enter = 13;
var konamiCode = [up, up, down, down, left, right, left, right, b, a, enter];
var konamiCodeFound = $(window).toObservable("keyup")
.Select(function(x) { return x.keyCode })
.BufferWithCount(konamiCode.length, 1)
.Select(function(sequence) {
// We now have two arrays, our konamiCode array, and an array of the last 7
// keys pressed - compare the two to see if they're equal (i.e. the last 7
// keys pressed was the Konami code)
for (var i = 0; i < konamiCode.length; i++) {
if (sequence[i] !== konamiCode[i]) {
return true;
}
}
return false;
});
konamiCodeFound
.Where(function(x) { return (x === true); })
.Timeout(10 * 1000)
.Take(1)
.Catch(Rx.Observable.Return(false))
.Subscribe(function(foundInTime) {
if (foundInTime) {
$("#content").text("CheatCode Found!");
} else {
$("#hint").fadeIn("fast");
}
});
// vim: ts=2 sw=2 et :