2010-12-02 18 views
8

मैं Rx.js सीखना शुरू करना चाहता हूं और मैं गेंद रोलिंग शुरू करने के लिए एक अच्छा उदाहरण ढूंढ रहा हूं। मैं Rx.js के साथ konami code का पता कैसे लगा सकता हूं?Rx.js (जावास्क्रिप्ट के लिए प्रतिक्रियाशील एक्सटेंशन) के साथ कोनामी कोड का पता कैसे लगाएं?

मैं कुंजी प्रेस घटनाओं के अनुक्रम का पता लगाना चाहता हूं (बाएं दाएं बाएं दाएं दाएं नीचे बाएं ऊपर) और यदि ऐसा होता है तो एक छवि प्रदर्शित करें।

+1

महान प्रश्न :) –

उत्तर

7

यहाँ मेरी संस्करण है:

<html> 
<head> 
<script type="text/javascript" src="jquery-1.4.4.min.js"></script> 
<script type="text/javascript" src="rx.js"></script> 
<script type="text/javascript" src="rx.jQuery.js"></script> 
</head> 
<body> 
<p id="result"></p> 
<script type="text/javascript"> 
    $(function() { 
     var konami = $(document).toObservable("keyup").Select(function(e) { 
      return e.keyCode 
     }).SkipWhile(function(k) { 
      return (k != 38) 
     }).BufferWithCount(
      10 
     ).Where(function(ks) { 
      return ks.length == 10 && 
       ks[0] == 38 && ks[1] == 38 && 
       ks[2] == 40 && ks[3] == 40 && 
       ks[4] == 37 && ks[5] == 39 && 
       ks[6] == 37 && ks[7] == 39 && 
       ks[8] == 66 && ks[9] == 65 
     }) 

     var konamisub = konami.Subscribe(function(e) { 
      $("#result").text("KONAMI!") 
      $("#result").fadeIn().fadeOut() 
     }) 
    }) 
</script> 
</body> 
</html> 

मैं Select साथ keycodes की एक धारा में KeyUp ईवेंट के स्ट्रीम कनवर्ट करते हैं, तो जब तक उपयोगकर्ता SkipWhile के साथ उपयोगकर्ता दबाएगा (कीकोड 38) तब तक कीप्रेस को अनदेखा कर रहा है, फिर BufferWithCount के साथ 10 कीस्ट्रोक एकत्रित करें, फिर Where के साथ कीस्ट्रोक की जांच करें।

मैंने बफरविथटाइम का उपयोग करने की कोशिश की, लेकिन यह कीस्ट्रोक के बीच में कटौती करता है।

अगर कोई सुधार का सुझाव दे सकता है, तो मुझे उन्हें सुनना अच्छा लगेगा।

+0

[यह Rx.js github पर Konami कोड उदाहरण idiomatic होना प्रतीत होता है] (https://github.com/Reactive-Extensions/RxJS/blob/master/examples/konamicode/konamicode.js)। ऐसा लगता है कि वे पारंपरिक जेएस फ़ंक्शन नामकरण का उपयोग कर रहे हैं (प्रारंभिक ऊपरी-केस नहीं)। –

1

मैं सीखने के बाद से आपके लिए जवाब खराब नहीं करना चाहता हूं, लेकिन मैं समस्या के बारे में सोचने की कोशिश करता हूं, "मैं कुंजी अप घटना को में कैसे बदल सकता हूं अनुक्रम पिछले 10 में हाल ही में दबाए गए वर्ण "दबाए गए हैं, और उस सूची की तुलना" UUDDLRLRBA "की निरंतर सूची में करें। (संकेत: बफर, कहाँ, का चयन करें, ले लो, अपने मित्रों को यहाँ हैं दोहराएँ)

+0

असल में मुझे spoilers दिमाग नहीं है :) लेकिन हाँ यह उतना मजेदार नहीं होगा। संकेत के लिए धन्यवाद! –

+0

मुझे यह काम मिल गया, लेकिन यह 'टेक' और न ही 'दोहराना' का उपयोग नहीं करता है। आप इस परिदृश्य में टेक और दोहराने का उपयोग कैसे करेंगे? –

संबंधित मुद्दे