2010-03-02 6 views
8

Ich habe eine rudimentäre EasterEgg in meinem Code erstellt zu aktivieren, wenn die folgenden Tastenanschläge gemacht werden (nicht gleichzeitig) Enter + c + o + l + o + r + s mit dem folgenden Code:jQuery Tastatureingaben erfassen und die Variablen entsprechend

isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0; 
$(window).keydown(function(e){ 
    if(e.which==13) isEnter = 1; if(e.which==67) isC = 1; if(e.which==79) isO = 1; 
    if(e.which==76) isL = 1; if(e.which==82) isR = 1; if(e.which==83) isS = 1; 
    ColorMap(); 
}); 

function ColorMap(){ 
    if(isEnter==1 && isC==1 && isO==1 && isL==1 && isR==1 && isS==1){ 
    //DO FUNCTION// 
    isEnter = 0; isC = 0; isO = 0; isL = 0; isR = 0; isS = 0; //SET VARS BACK TO 0 
    }; 
}; 

Ich brauche Reset-Funktionalität hinzufügen zur Keydown-Funktion, um alle Variablen zurückzusetzen, wenn etwas anderes als diese Tasten gedrückt werden ... auf diese Weise müssen sie Enter + c + o + l + o + r + s drücken oder die Anweisung wird zurückgesetzt und sie müssen neu beginnen ... (dadurch wird das 'EasterEgg' schwieriger zu [oder zumindest weniger wahrscheinlich zu zufällig oder zufällige Tastenanschläge]).

+0

so viele Variablen! Gott sei Dank, dein Wort ist gerade 6 Zeichen –

+0

@sadmicrowave - Ich habe eine Lösung unten, wo Sie sich keine Sorgen über Zeichen Codes überhaupt, Sie können jede Zeichenfolge ziemlich leicht. –

Antwort

13

Sie möchten diese in der Reihenfolge auch überprüfen. Im Moment könntest du die Tasten in beliebiger Reihenfolge drücken und trotzdem das Osterei aktivieren. Enter + lorocs zum Beispiel.

ich die Werte speichern, würden Sie suchen, um, wie folgt aus:

//  Enter, c, o, l, o, r, s 
var keys = [13,67,79,76,79,82,83]; 

Dann können Sie einfach weiter verfolgen, wo der Benutzer in der Folge ist:

var nextKey = 0; 
$(window).keydown(function(e){ 
    var key = e.which; 
    if (key === keys[nextKey]) 
     nextKey++; 

    ColorMap(); 
}); 

Dies erhöht nextKey jedes Mal, wenn Sie den nächsten Schlüssel suchen, den Sie in der Sequenz suchen. Die Variable nextKey beginnt mit dem Index 0, was bedeutet, dass wir nach Enter suchen. Jetzt müssen wir die Endbedingung in der ColorMap Funktion überprüfen. ohne dass eine Änderung an anderer Stelle im Code

function ColorMap() { 
    var maxKeyIndex = keys.length - 1; 
    if(nextKey >= maxKeyIndex) { 
    //DO FUNCTION// 

    nextKey = 0; 
    } 
} 

sollte Diese Lösung ermöglicht es Ihnen, die spezielle Sequenz in den keys Variablen zu ändern.

EDIT: Wenn Sie die Antwort wollen zusammenhängend sein, wie Sie wahrscheinlich tun, dann können Sie die nextKey Variable zurückgesetzt, wenn das Spiel ausfällt.

if (key === keys[nextKey]) 
    nextKey++; 
else 
    nextKey = 0; 

Für zusätzliche Kredite, können Sie schalten diese eine Zeichenfolge zu verwenden, um das Osterei zu halten, dann String.fromCharCode es dem Zeichencode zu konvertieren, dass e.which zurückkehrt.

+0

Sie könnten die Easter Egg Keys zwingen, zusammenhängend zu sein, indem Sie den nextKey-Zähler auf Null zurücksetzen, wenn das Zeichen nicht übereinstimmt. – Pointy

+0

Sicherlich. Ich wollte das zuerst machen, habe es aber vergessen. – EndangeredMassa

+0

@endangeredMassa - das ist genau das, was ich suche. @ Pointy - Ich muss diese Funktionalität auch hinzufügen ... es scheint so zu sein: if (key! = Keys [nextKey]) nextKey = 0; sollte den Trick machen, aber aus irgendeinem Grund funktioniert es nicht. – sadmicrowave

3

Ich habe vor kurzem eine ähnliche Easter Egg Frage beantwortet, also werde ich Sie nur darauf hinweisen.

Es erfordert einen anderen Ansatz als das, was Sie tun, und es muss nicht zurückgesetzt werden.

Javascript/jQuery Keypress logging

EDIT: Hier ist eine aktualisierte Version, die von immer zu lange den Schlüssel Geschichte hält.

$(document).ready(function() { 

    var easterEgg = 'egg'; 
    var eggLength = easterEgg.length; 
    var keyHistory = ''; 
    var match; 
     $(document).keypress(function(e) { 
      keyHistory += String.fromCharCode(e.which) 
      match = keyHistory.match(easterEgg); 
      if(match) { 
       alert(match); 
       keyHistory = match = ''; 
      } else if (keyHistory.length > 30) { 
       keyHistory = keyHistory.substr((keyHistory.length - eggLength - 1)); 
      } 
     }); 
}); 
+0

'+ 1' gr8, ich mag deine Antwort auf diesen Beitrag. Die einzige Sache ist, sagen wir Benutzer drückt tausend Tasten, ohne die Kombination für Osterei zu drücken, dann wird "keyHistory" sehr groß sein. Isn es? –

+0

Guter Punkt. In der Tat habe ich gerade darüber nachgedacht, also habe ich den Code aktualisiert. Wird es in einer Sekunde posten. (Sowohl hier als auch dort.) – user113716

+0

:), jetzt geht's gut. Der einzige verbleibende Punkt ist in: 'keyHistory = keyHistory.sub ((keyHistory.length - eggLength - 1));' Ich denke, du kannst 'keyHistory.length' durch 30 ersetzen, wie du es bereits fest programmiert hast. –

0

Nun werden Sie Ihre Benutzer die magischen Tasten in beliebiger Reihenfolge drücken lassen, was nicht sehr viel Spaß machen würde. Ich würde die magische Sequenz in ein Array setzen, und wenn die erfolgreichen Tastenanschläge übereinstimmen, bewegen Sie sich im Array vorwärts. Wenn Sie bis zum Ende kommen, dann ist es Eizeit.

bearbeiten genau wie @EndanderedMassa schrieb.

0

Hier ist ein weiterer Ansatz:

<script type="text/javascript"> 
$(function() { 
    $(window).keypress(function(e) { 
    var input = $("#input"); 
    input.val(function(i, v) { return v + String.fromCharCode(e.which) }); 

    if(input.val().indexOf('colors') > -1) { 
     alert('Easter Egg'); 
     input.val(''); 
    } 
    else if('colors'.indexOf(input.val())) { 
     //Clear value, they've hit another key 
     input.val(''); 
    }   
    }); 
}); 
</script> 
<input id="input" type="text" /> 

Es verfolgt den aktuellen Teil der Farben, die Sie in einem Textfeld einfach für das Debuggen eingegeben haben, fügen Sie einfach einen style="display: none;", wenn Sie die Prüfung fertig sind.