# इभेन्टहरू प्रयोग गरेर खेल बनाउने
के तपाईंले कहिल्यै सोच्नुभएको छ कि वेबसाइटहरूले कसरी थाहा पाउँछन् जब तपाईंले बटन क्लिक गर्नुहुन्छ वा टेक्स्ट बक्समा टाइप गर्नुहुन्छ? यो इभेन्ट-ड्राइभन प्रोग्रामिङको जादू हो! यो महत्वपूर्ण सीप सिक्नको लागि के राम्रो तरिका हुन सक्छ - एक टाइपिङ स्पीड खेल बनाउनुहोस् जसले तपाईंले गरेको प्रत्येक कीस्ट्रोकमा प्रतिक्रिया दिन्छ।
तपाईंले प्रत्यक्ष रूपमा देख्नुहुनेछ कि वेब ब्राउजरहरूले तपाईंको JavaScript कोडसँग "कसरी कुरा गर्छन्।" जब तपाईं क्लिक गर्नुहुन्छ, टाइप गर्नुहुन्छ, वा माउस सार्नुहुन्छ, ब्राउजरले साना सन्देशहरू (हामी तिनीहरूलाई इभेन्ट्स भन्छौं) तपाईंको कोडमा पठाइरहेको छ, र तपाईंले कसरी प्रतिक्रिया दिने निर्णय गर्न सक्नुहुन्छ!
यहाँ काम सकिएपछि, तपाईंले आफ्नो स्पीड र शुद्धता ट्र्याक गर्ने वास्तविक टाइपिङ खेल बनाइसक्नु हुनेछ। अझ महत्त्वपूर्ण कुरा, तपाईंले प्रत्येक इन्टरएक्टिभ वेबसाइटलाई शक्ति दिने आधारभूत अवधारणाहरू बुझ्नुहुनेछ। सुरु गरौं!
## प्रि-लेक्चर क्विज
[प्रि-लेक्चर क्विज](https://ff-quizzes.netlify.app/web/quiz/21)
## इभेन्ट-ड्राइभन प्रोग्रामिङ
तपाईंको मनपर्ने एप वा वेबसाइटको बारेमा सोच्नुहोस् - यसलाई जीवित र प्रतिक्रियात्मक बनाउने के हो? यो तपाईंले के गर्नुहुन्छ भन्ने कुरामा प्रतिक्रिया कसरी दिन्छ भन्ने कुरामा आधारित छ! प्रत्येक ट्याप, क्लिक, स्वाइप, वा कीस्ट्रोकले "इभेन्ट" सिर्जना गर्छ, र त्यहाँ वेब विकासको वास्तविक जादू हुन्छ।
वेबको लागि प्रोग्रामिङलाई रोचक बनाउने कुरा यहाँ छ: हामीले कहिल्यै थाहा पाउँदैनौं कि कसैले त्यो बटन कहिले क्लिक गर्नेछ वा टेक्स्ट बक्समा टाइप गर्न सुरु गर्नेछ। उनीहरूले तुरुन्त क्लिक गर्न सक्छन्, पाँच मिनेट पर्खन सक्छन्, वा सायद कहिल्यै क्लिक नगर्न सक्छन्! यो अनिश्चितताले हामीलाई हाम्रो कोड कसरी लेख्ने भन्ने बारे फरक सोच्न बाध्य बनाउँछ।
रिसिपी जस्तै माथिबाट तलसम्म चल्ने कोड लेख्नको सट्टा, हामीले कोड लेख्छौं जुन केही हुने प्रतीक्षा गर्छ। यो १८०० को दशकमा टेलिग्राफ अपरेटरहरूले आफ्नो मेसिनको छेउमा बस्ने तरिकासँग मिल्दोजुल्दो छ, तारबाट सन्देश आउँदा तुरुन्त प्रतिक्रिया दिन तयार।
त्यसो भए "इभेन्ट" भनेको वास्तवमा के हो? सरल शब्दमा भन्नुपर्दा, यो केही हो जुन हुन्छ! जब तपाईं बटन क्लिक गर्नुहुन्छ - त्यो एक इभेन्ट हो। जब तपाईं अक्षर टाइप गर्नुहुन्छ - त्यो एक इभेन्ट हो। जब तपाईं आफ्नो माउस सार्नुहुन्छ - त्यो अर्को इभेन्ट हो।
इभेन्ट-ड्राइभन प्रोग्रामिङले हामीलाई सुन्न र प्रतिक्रिया दिनको लागि हाम्रो कोड सेटअप गर्न दिन्छ। हामीले विशेष कार्यहरू सिर्जना गर्छौं जसलाई **इभेन्ट लिस्नरहरू** भनिन्छ, जुन विशेष कुराहरू हुने प्रतीक्षा गर्छन्, त्यसपछि तिनीहरू हुँदा तुरुन्तै सक्रिय हुन्छन्।
इभेन्ट लिस्नरहरूलाई तपाईंको कोडको लागि डोरबेल भएको जस्तै सोच्नुहोस्। तपाईंले डोरबेल सेटअप गर्नुहुन्छ (`addEventListener()`), यसलाई कुन आवाज सुन्नु पर्ने हो भनेर भन्नुहुन्छ (जस्तै 'क्लिक' वा 'कीप्रेस'), र त्यसपछि कसैले यसलाई बजाउँदा के हुनुपर्छ भनेर निर्दिष्ट गर्नुहुन्छ (तपाईंको कस्टम फङ्सन)।
**इभेन्ट लिस्नरहरू यसरी काम गर्छन्:**
- **सुन्छ** विशेष प्रयोगकर्ता क्रियाहरू जस्तै क्लिक, कीस्ट्रोक, वा माउस मूभमेन्ट
- **कार्यान्वयन गर्छ** तपाईंको कस्टम कोड जब निर्दिष्ट इभेन्ट हुन्छ
- **तुरुन्त प्रतिक्रिया दिन्छ** प्रयोगकर्ता इन्टरएक्शनहरूमा, सहज अनुभव सिर्जना गर्दै
- **एकै तत्वमा** विभिन्न लिस्नरहरू प्रयोग गरेर धेरै इभेन्टहरू ह्यान्डल गर्छ
> **NOTE:** यो उल्लेख गर्न लायक छ कि इभेन्ट लिस्नरहरू सिर्जना गर्न धेरै तरिकाहरू छन्। तपाईंले एनोनिमस फङ्सनहरू प्रयोग गर्न सक्नुहुन्छ, वा नामित फङ्सनहरू सिर्जना गर्न सक्नुहुन्छ। तपाईंले विभिन्न सर्टकटहरू प्रयोग गर्न सक्नुहुन्छ, जस्तै `click` प्रोपर्टी सेट गर्नु, वा `addEventListener()` प्रयोग गर्नु। हाम्रो अभ्यासमा हामी `addEventListener()` र एनोनिमस फङ्सनहरूमा ध्यान केन्द्रित गर्नेछौं, किनकि यो सम्भवतः वेब डेभलपरहरूले प्रयोग गर्ने सबैभन्दा सामान्य प्रविधि हो। यो सबैभन्दा लचिलो पनि हो, किनकि `addEventListener()` सबै इभेन्टहरूको लागि काम गर्छ, र इभेन्ट नामलाई प्यारामिटरको रूपमा प्रदान गर्न सकिन्छ।
### सामान्य इभेन्टहरू
जबकि वेब ब्राउजरहरूले सुन्नको लागि दर्जनौं विभिन्न इभेन्टहरू प्रदान गर्छन्, अधिकांश इन्टरएक्टिभ एप्लिकेसनहरूले केवल केही आवश्यक इभेन्टहरूमा निर्भर गर्छन्। यी कोर इभेन्टहरू बुझ्नाले तपाईंलाई परिष्कृत प्रयोगकर्ता इन्टरएक्शनहरू निर्माण गर्न आधार प्रदान गर्नेछ।
जब तपाईं एप्लिकेसन बनाउँदा सुन्नको लागि [दर्जनौं इभेन्टहरू](https://developer.mozilla.org/docs/Web/Events) उपलब्ध छन्। आधारभूत रूपमा प्रयोगकर्ताले पेजमा गरेको कुनै पनि कुराले इभेन्ट उठाउँछ, जसले तपाईंलाई उनीहरूले चाहेको अनुभव सुनिश्चित गर्न धेरै शक्ति दिन्छ। भाग्यवश, तपाईंलाई सामान्यतया केवल केही इभेन्टहरू चाहिन्छ। यहाँ केही सामान्य इभेन्टहरू छन् (जसमा दुई हामीले हाम्रो खेल बनाउँदा प्रयोग गर्नेछौं):
| इभेन्ट | विवरण | सामान्य प्रयोग केसहरू |
|-------|-------------|------------------|
| `click` | प्रयोगकर्ताले केही क्लिक गर्यो | बटनहरू, लिंकहरू, इन्टरएक्टिभ तत्वहरू |
| `contextmenu` | प्रयोगकर्ताले दायाँ माउस बटन क्लिक गर्यो | कस्टम राइट-क्लिक मेनुहरू |
| `select` | प्रयोगकर्ताले केही टेक्स्ट हाइलाइट गर्यो | टेक्स्ट एडिटिङ, कपी अपरेसनहरू |
| `input` | प्रयोगकर्ताले केही टेक्स्ट इनपुट गर्यो | फर्म भ्यालिडेसन, रियल-टाइम सर्च |
**यी इभेन्ट प्रकारहरू बुझ्दै:**
- **ट्रिगर गर्छ** जब प्रयोगकर्ताहरूले तपाईंको पेजमा विशेष तत्वहरूसँग इन्टरएक्ट गर्छन्
- **विस्तृत जानकारी प्रदान गर्छ** प्रयोगकर्ताको क्रियाको बारेमा इभेन्ट वस्तुहरू मार्फत
- **सक्षम बनाउँछ** तपाईंलाई प्रतिक्रियात्मक, इन्टरएक्टिभ वेब एप्लिकेसनहरू सिर्जना गर्न
- **सुसंगत रूपमा काम गर्छ** विभिन्न ब्राउजरहरू र उपकरणहरूमा
## खेल बनाउने
अब तपाईंले इभेन्टहरू कसरी काम गर्छन् भन्ने कुरा बुझ्नुभयो, त्यस ज्ञानलाई अभ्यासमा राखेर केही उपयोगी बनाऔं। हामी इभेन्ट ह्यान्डलिङ प्रदर्शन गर्ने टाइपिङ स्पीड खेल बनाउनेछौं जसले तपाईंलाई महत्त्वपूर्ण डेभलपर सीप विकास गर्न मद्दत गर्नेछ।
हामी खेल बनाउनेछौं जसले JavaScript मा इभेन्टहरू कसरी काम गर्छन् भनेर अन्वेषण गर्नेछ। हाम्रो खेलले खेलाडीको टाइपिङ सीप परीक्षण गर्नेछ, जुन सबै डेभलपरहरूले राख्नुपर्ने सबैभन्दा कम मूल्याङ्कन गरिएको सीप हो। रमाइलो तथ्य: आज हामीले प्रयोग गर्ने QWERTY किबोर्ड लेआउट वास्तवमा १८७० को दशकमा टाइपराइटरहरूको लागि डिजाइन गरिएको थियो - र राम्रो टाइपिङ सीप आज पनि प्रोग्रामरहरूको लागि उत्तिकै मूल्यवान छ! खेलको सामान्य प्रवाह यस प्रकार देखिनेछ:
```mermaid
flowchart TD
A[Player clicks Start] --> B[Random quote displays]
B --> C[Player types in textbox]
C --> D{Word complete?}
D -->|Yes| E[Highlight next word]
D -->|No| F{Correct so far?}
F -->|Yes| G[Keep normal styling]
F -->|No| H[Show error styling]
E --> I{Quote complete?}
I -->|No| C
I -->|Yes| J[Show success message with time]
G --> C
H --> C
```
**हाम्रो खेल यसरी काम गर्नेछ:**
- **सुरु हुन्छ** जब खेलाडीले स्टार्ट बटन क्लिक गर्छ र र्यान्डम कोट देखाउँछ
- **ट्र्याक गर्छ** खेलाडीको टाइपिङ प्रगति शब्द-प्रति-शब्द रियल-टाइममा
- **हाइलाइट गर्छ** हालको शब्द खेलाडीको ध्यान मार्गदर्शन गर्न
- **तुरुन्त दृश्य प्रतिक्रिया प्रदान गर्छ** टाइपिङ त्रुटिहरूको लागि
- **क्याल्कुलेट गर्छ** र कोट पूरा हुँदा कुल समय देखाउँछ
आउनुहोस्, हाम्रो खेल बनाऔं, र इभेन्टहरूको बारेमा सिकौं!
### फाइल संरचना
कोडिङ सुरु गर्नु अघि, हामी व्यवस्थित बनौं! सुरुबाट सफा फाइल संरचना हुनुले पछि टाउको दुखाइबाट बचाउँछ र तपाईंको प्रोजेक्टलाई अझ व्यावसायिक बनाउँछ। 😊
हामी केवल तीन फाइलहरू राखेर चीजहरू सरल बनाउनेछौं: `index.html` हाम्रो पेज संरचनाको लागि, `script.js` हाम्रो खेलको सम्पूर्ण तर्कको लागि, र `style.css` सबै कुरालाई राम्रो देखाउन। यो वेबको अधिकांश भागलाई शक्ति दिने क्लासिक त्रय हो!
**कन्सोल वा टर्मिनल विन्डो खोल्नुहोस् र निम्न आदेश जारी गरेर आफ्नो कामको लागि नयाँ फोल्डर बनाउनुहोस्:**
```bash
# Linux or macOS
mkdir typing-game && cd typing-game
# Windows
md typing-game && cd typing-game
```
**यी आदेशहरूले के गर्छन्:**
- **नयाँ डाइरेक्टरी बनाउँछ** जसलाई `typing-game` भनिन्छ तपाईंको प्रोजेक्ट फाइलहरूको लागि
- **नयाँ बनाइएको डाइरेक्टरीमा जान्छ** स्वचालित रूपमा
- **सफा कार्यक्षेत्र सेटअप गर्छ** तपाईंको खेल विकासको लागि
**भिजुअल स्टुडियो कोड खोल्नुहोस्:**
```bash
code .
```
**यो आदेश:**
- **भिजुअल स्टुडियो कोड सुरु गर्छ** हालको डाइरेक्टरीमा
- **तपाईंको प्रोजेक्ट फोल्डर खोल्छ** एडिटरमा
- **तपाईंलाई आवश्यक पर्ने सबै विकास उपकरणहरूमा पहुँच प्रदान गर्छ**
**भिजुअल स्टुडियो कोडमा फोल्डरमा तीन फाइलहरू निम्न नामहरूका साथ थप्नुहोस्:**
- `index.html` - तपाईंको खेलको संरचना र सामग्री समावेश गर्दछ
- `script.js` - सम्पूर्ण खेल तर्क र इभेन्ट लिस्नरहरू ह्यान्डल गर्छ
- `style.css` - दृश्य उपस्थिति र स्टाइल परिभाषित गर्छ
## प्रयोगकर्ता इन्टरफेस बनाउनुहोस्
अब हाम्रो खेलको सबै कार्यहरू हुने स्टेज बनाऔं! यसलाई स्पेसशिपको कन्ट्रोल प्यानल डिजाइन गर्ने जस्तै सोच्नुहोस् - हामीले सुनिश्चित गर्नुपर्छ कि हाम्रो खेलाडीलाई आवश्यक पर्ने सबै कुरा त्यहाँ छ।
आउनुहोस्, हाम्रो खेललाई वास्तवमा के चाहिन्छ भनेर पत्ता लगाऔं। यदि तपाईं टाइपिङ खेल खेल्दै हुनुहुन्थ्यो भने, तपाईंले स्क्रिनमा के देख्न चाहनुहुन्छ? यहाँ हामीलाई चाहिने कुरा हो:
| UI तत्व | उद्देश्य | HTML तत्व |
|------------|---------|-------------|
| कोट डिस्प्ले | टाइप गर्नको लागि टेक्स्ट देखाउँछ | `
` `id="quote"` सहित |
| सन्देश क्षेत्र | स्थिति र सफलताको सन्देश देखाउँछ | `
` `id="message"` सहित |
| टेक्स्ट इनपुट | खेलाडीहरूले कोट टाइप गर्ने ठाउँ | `` `id="typed-value"` सहित |
| स्टार्ट बटन | खेल सुरु गर्छ | `