9

次のコードで次のキーストロークが(同時にではなく)行われたときにアクティブになるように、コード内に基本的なイースターエッグを作成しましたEnter + c + o + l + o + r + s

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
  };
};

キーダウン関数にリセット機能を追加して、それらのキー以外のものが押された場合にすべての変数をリセットする必要があります...そのように押すEnter + c + o + l + o + r + s必要があるか、ステートメントがリセットされて再度開始する必要があります...(これにより、 'EasterEgg'に到達するのが難しい[または、少なくとも、まぐれやランダムなキーストロークで到達する可能性が低い])。

4

4 に答える 4

13

これらも順番にチェックしたいと思います。今のところ、キーを任意の順序で押しても、イースターエッグをアクティブにすることができます。Enter + lorocs例えば。

探している値を次のように順番に保存します。

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

次に、ユーザーがシーケンスのどこにいるかを追跡できます。

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

    ColorMap();
});

これはnextKey、シーケンスで探している次のキーに一致するたびに増加します。変数は0インデックスから始まります。nextKeyこれは、を探し始めることを意味しEnterます。次に、関数の終了条件を確認する必要がありColorMapます。

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

     nextKey = 0;
  }
}

keysこのソリューションでは、コードの他の場所で変更を加えることなく、変数の特別なシーケンスを変更できるはずです。

編集: おそらくそうするように、答えを連続させたい場合nextKeyは、一致が失敗したときに変数をリセットできます。

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

追加のクレジットとして、これを切り替えて、文字列を使用してイースターエッグを保持し、それを返すString.fromCharCode文字コードに変換することができます。e.which

于 2010-03-02T15:14:30.250 に答える
3

最近、似たようなイースターエッグの質問に答えたので、それを紹介します。

それはあなたがしていることとは異なるアプローチを取り、それをリセットする必要はありません。

Javascript/jQueryキープレスロギング

編集:これは、キー履歴が長くなりすぎないようにする更新バージョンです。

$(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));
            }
        });
});
于 2010-03-02T15:15:05.350 に答える
0

現在、ユーザーが任意の順序でマジックキーを押すことができるようにする予定ですが、これはあまり面白くありません。魔法のシーケンスを配列に入れます。成功したキーストロークが一致すると、配列内を前進します。あなたが最後に到達した場合、それは卵の時間です。

@EndangeredMassaが書いたとおりに編集します。

于 2010-03-02T15:15:43.617 に答える
0

別のアプローチは次のとおりです。

<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" />

テキストボックスに入力した色の現在の部分を簡単に追跡し、style="display: none;"テストが終了したらを追加するだけです。

于 2010-03-02T15:22:56.630 に答える