# इभेन्ट्स प्रयोग गरेर खेल बनाउने
के तपाईंले कहिल्यै सोच्नुभएको छ कि वेबसाइटहरूले कसरी थाहा पाउँछन् कि तपाईंले बटन क्लिक गर्नुभयो वा टेक्स्ट बक्समा टाइप गर्नुभयो? यो इभेन्ट-ड्रिभन प्रोग्रामिङको जादू हो! यो महत्वपूर्ण सीप सिक्नको लागि के राम्रो तरिका हुन सक्छ - एउटा टाइपिङ स्पीड खेल बनाउनुहोस् जसले तपाईंले गरेको प्रत्येक कीस्ट्रोकमा प्रतिक्रिया दिन्छ।
तपाईंले प्रत्यक्ष रूपमा देख्नुहुनेछ कि वेब ब्राउजरहरूले तपाईंको 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"` सहित |
| स्टार्ट बटन | खेल सुरु गर्छ | `