# इव्हेंट्स वापरून गेम तयार करणे
तुम्ही कधी विचार केला आहे का की वेबसाइट्सला कसे कळते की तुम्ही बटण क्लिक करता किंवा टेक्स्ट बॉक्समध्ये टाइप करता? हे इव्हेंट-ड्रिव्हन प्रोग्रामिंगचे जादू आहे! ही महत्त्वाची कौशल्य शिकण्यासाठी काहीतरी उपयुक्त तयार करण्यापेक्षा चांगले काय असू शकते - एक टाइपिंग स्पीड गेम जो तुम्ही केलेल्या प्रत्येक कीस्ट्रोकवर प्रतिक्रिया देतो.
तुम्ही स्वतः पाहणार आहात की वेब ब्राउझर तुमच्या JavaScript कोडशी "कसे बोलतात". तुम्ही प्रत्येक वेळी क्लिक करता, टाइप करता किंवा तुमचा माउस हलवता, ब्राउझर तुमच्या कोडला लहान संदेश (त्यांना इव्हेंट्स म्हणतात) पाठवत असतो आणि तुम्ही त्यावर कसे प्रतिसाद द्यायचे ते ठरवता!
जेव्हा आपण येथे संपवतो, तेव्हा तुम्ही एक खरा टाइपिंग गेम तयार केला असेल जो तुमचा वेग आणि अचूकता ट्रॅक करतो. त्याहून महत्त्वाचे म्हणजे, तुम्ही प्रत्येक इंटरॅक्टिव्ह वेबसाइटला चालवणारे मूलभूत संकल्पना समजून घेतल्या असतील. चला सुरुवात करूया!
## प्री-लेक्चर क्विझ
[प्री-लेक्चर क्विझ](https://ff-quizzes.netlify.app/web/quiz/21)
## इव्हेंट-ड्रिव्हन प्रोग्रामिंग
तुमच्या आवडत्या अॅप किंवा वेबसाइटबद्दल विचार करा - त्याला जिवंत आणि प्रतिसादात्मक काय बनवते? हे सर्व तुमच्या कृतींवर कसे प्रतिक्रिया देते याबद्दल आहे! प्रत्येक टॅप, क्लिक, स्वाइप किंवा कीस्ट्रोक "इव्हेंट" तयार करते आणि वेब डेव्हलपमेंटचे खरे जादू तिथेच घडते.
वेबसाठी प्रोग्रामिंग करणे इतके मनोरंजक का आहे? कारण आपल्याला कधीच माहित नसते की एखादी व्यक्ती ते बटण कधी क्लिक करेल किंवा टेक्स्ट बॉक्समध्ये टाइप करायला सुरुवात करेल. ते त्वरित क्लिक करू शकतात, पाच मिनिटे थांबू शकतात किंवा कदाचित कधीच क्लिक करू शकत नाहीत! या अनिश्चिततेमुळे आपल्याला आपला कोड कसा लिहायचा याबद्दल वेगळ्या प्रकारे विचार करावा लागतो.
रेसिपीसारखा कोड वरून खाली चालवण्याऐवजी, आम्ही कोड लिहितो जो काहीतरी होण्याची वाट पाहत शांतपणे बसतो. हे 1800 च्या दशकातील टेलिग्राफ ऑपरेटर कसे त्यांच्या मशीनजवळ बसून, वायरद्वारे संदेश येताच प्रतिसाद देण्यासाठी तयार असायचे त्यासारखे आहे.
तर "इव्हेंट" नेमके काय आहे? सोप्या भाषेत सांगायचे तर, ते काहीतरी घडते! तुम्ही बटण क्लिक करता तेव्हा - ते एक इव्हेंट आहे. तुम्ही अक्षर टाइप करता तेव्हा - ते एक इव्हेंट आहे. तुम्ही तुमचा माउस हलवता तेव्हा - ते आणखी एक इव्हेंट आहे.
इव्हेंट-ड्रिव्हन प्रोग्रामिंग आपल्याला आपला कोड ऐकण्यासाठी आणि प्रतिसाद देण्यासाठी सेट करण्यास अनुमती देते. आम्ही **इव्हेंट लिसनर्स** नावाच्या विशेष फंक्शन्स तयार करतो जे विशिष्ट गोष्टी घडण्याची वाट पाहतात आणि त्या घडल्यावर लगेच अॅक्शनमध्ये येतात.
इव्हेंट लिसनर्सना तुमच्या कोडसाठी डोअरबेल असल्यासारखे समजा. तुम्ही डोअरबेल सेट करता (`addEventListener()`), त्याला कोणता आवाज ऐकायचा आहे ते सांगता (जसे 'क्लिक' किंवा 'कीप्रेस') आणि मग कोणीतरी डोअरबेल वाजवल्यावर काय घडावे ते निर्दिष्ट करता (तुमचे कस्टम फंक्शन).
**इव्हेंट लिसनर्स कसे कार्य करतात:**
- **ऐकतात** विशिष्ट वापरकर्त्याच्या क्रिया जसे की क्लिक, कीस्ट्रोक्स किंवा माउस मूव्हमेंट
- **अंमलात आणतात** तुमचा कस्टम कोड जेव्हा निर्दिष्ट इव्हेंट घडतो
- **तत्काळ प्रतिसाद देतात** वापरकर्त्याच्या इंटरॅक्शनला, एक सहज अनुभव तयार करतात
- **हाताळतात** एकाच घटकावर वेगवेगळ्या लिसनर्ससह अनेक इव्हेंट्स
> **NOTE:** हे हायलाइट करणे योग्य आहे की इव्हेंट लिसनर्स तयार करण्याचे अनेक मार्ग आहेत. तुम्ही अज्ञात फंक्शन्स वापरू शकता किंवा नामांकित फंक्शन्स तयार करू शकता. तुम्ही विविध शॉर्टकट्स वापरू शकता, जसे की `click` प्रॉपर्टी सेट करणे किंवा `addEventListener()` वापरणे. आमच्या व्यायामामध्ये आम्ही `addEventListener()` आणि अज्ञात फंक्शन्सवर लक्ष केंद्रित करणार आहोत, कारण वेब डेव्हलपर्स वापरत असलेली ही सर्वात सामान्य तंत्र आहे. हे सर्वात लवचिक देखील आहे, कारण `addEventListener()` सर्व इव्हेंट्ससाठी कार्य करते आणि इव्हेंटचे नाव पॅरामीटर म्हणून प्रदान केले जाऊ शकते.
### सामान्य इव्हेंट्स
वेब ब्राउझर तुम्हाला ऐकण्यासाठी डझनभर वेगवेगळ्या इव्हेंट्स ऑफर करतात, परंतु बहुतेक इंटरॅक्टिव्ह अॅप्लिकेशन्स फक्त काही आवश्यक इव्हेंट्सवर अवलंबून असतात. या मुख्य इव्हेंट्स समजून घेणे तुम्हाला परिष्कृत वापरकर्ता इंटरॅक्शन तयार करण्याचा पाया देईल.
तुम्ही अॅप्लिकेशन तयार करताना ऐकण्यासाठी [डझनभर इव्हेंट्स](https://developer.mozilla.org/docs/Web/Events) उपलब्ध आहेत. मूलत: वापरकर्ता पृष्ठावर जे काही करतो ते एक इव्हेंट निर्माण करते, ज्यामुळे तुम्हाला त्यांना हवे असलेले अनुभव मिळवून देण्यासाठी खूप ताकद मिळते. सुदैवाने, तुम्हाला सामान्यतः फक्त काही मोजक्या इव्हेंट्सची आवश्यकता असते. येथे काही सामान्य इव्हेंट्स आहेत (ज्यामध्ये दोन आम्ही आमचा गेम तयार करताना वापरणार आहोत):
| इव्हेंट | वर्णन | सामान्य उपयोग |
|--------|-------|---------------|
| `click` | वापरकर्त्याने काहीतरी क्लिक केले | बटण, लिंक, इंटरॅक्टिव्ह घटक |
| `contextmenu` | वापरकर्त्याने उजव्या माउस बटणावर क्लिक केले | कस्टम राइट-क्लिक मेनू |
| `select` | वापरकर्त्याने काही टेक्स्ट हायलाइट केले | टेक्स्ट एडिटिंग, कॉपी ऑपरेशन्स |
| `input` | वापरकर्त्याने काही टेक्स्ट इनपुट केले | फॉर्म व्हॅलिडेशन, रिअल-टाइम सर्च |
**या इव्हेंट प्रकार समजून घेणे:**
- **ट्रिगर होते** जेव्हा वापरकर्ते तुमच्या पृष्ठावरील विशिष्ट घटकांशी संवाद साधतात
- **तपशीलवार माहिती प्रदान करते** वापरकर्त्याच्या कृतीबद्दल इव्हेंट ऑब्जेक्ट्सद्वारे
- **तुम्हाला सक्षम करते** प्रतिसादात्मक, इंटरॅक्टिव्ह वेब अॅप्लिकेशन्स तयार करण्यासाठी
- **सर्व ब्राउझर्स आणि डिव्हाइसवर कार्य करते** सातत्याने
## गेम तयार करणे
आता तुम्हाला इव्हेंट्स कसे कार्य करतात हे समजले आहे, चला त्या ज्ञानाचा उपयोग करून काहीतरी उपयुक्त तयार करूया. आम्ही एक टाइपिंग स्पीड गेम तयार करू जो इव्हेंट हँडलिंग दाखवेल आणि तुम्हाला एक महत्त्वाचे डेव्हलपर कौशल्य विकसित करण्यात मदत करेल.
आम्ही एक गेम तयार करणार आहोत ज्याद्वारे JavaScript मध्ये इव्हेंट्स कसे कार्य करतात हे एक्सप्लोर करू. आमचा गेम खेळाडूच्या टाइपिंग कौशल्याची चाचणी घेईल, जे सर्व डेव्हलपर्ससाठी सर्वात कमी कौतुक केलेले कौशल्य आहे. मजेदार तथ्य: आज आपण वापरत असलेली QWERTY कीबोर्ड लेआउट 1870 च्या दशकात टाइपराइटर्ससाठी डिझाइन केली गेली होती - आणि चांगले टाइपिंग कौशल्य आजही प्रोग्रामर्ससाठी तितकेच मौल्यवान आहे! गेमचा सामान्य प्रवाह असा दिसेल:
```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` आहे तुमच्या प्रोजेक्ट फाइल्ससाठी
- **स्वतःच नव्याने तयार केलेल्या डिरेक्टरीमध्ये जाते**
- **तुमच्या गेम डेव्हलपमेंटसाठी स्वच्छ कार्यक्षेत्र सेट करते**
**Visual Studio Code उघडा:**
```bash
code .
```
**ही कमांड:**
- **Visual Studio Code सुरू करते** सध्याच्या डिरेक्टरीमध्ये
- **तुमच्या प्रोजेक्ट फोल्डरला एडिटरमध्ये उघडते**
- **तुम्हाला आवश्यक असलेल्या सर्व डेव्हलपमेंट टूल्ससाठी प्रवेश प्रदान करते**
**Visual Studio Code मध्ये फोल्डरमध्ये खालील नावांच्या तीन फाइल्स जोडा:**
- `index.html` - तुमच्या गेमची संरचना आणि सामग्री समाविष्ट करते
- `script.js` - सर्व गेम लॉजिक आणि इव्हेंट लिसनर्स हाताळते
- `style.css` - व्हिज्युअल स्वरूप आणि स्टाइलिंग परिभाषित करते
## वापरकर्ता इंटरफेस तयार करा
आता चला स्टेज तयार करूया जिथे आमच्या गेमची सर्व अॅक्शन होईल! याला स्पेसशिपसाठी कंट्रोल पॅनेल डिझाइन करणे असे समजा - आपल्याला खात्री करायची आहे की आमच्या खेळाडूंना आवश्यक असलेली प्रत्येक गोष्ट तिथेच आहे जिथे त्यांना अपेक्षित आहे.
चला पाहूया की आमच्या गेमला प्रत्यक्षात काय आवश्यक आहे. तुम्ही टाइपिंग गेम खेळत असाल तर तुम्हाला स्क्रीनवर काय पाहायचे आहे? येथे आपल्याला काय आवश्यक आहे:
| UI घटक | उद्देश | HTML घटक |
|---------|--------|----------|
| कोट डिस्प्ले | टाइप करण्यासाठी टेक्स्ट दाखवतो | `
` `id="quote"` सह |
| मेसेज एरिया | स्टेटस आणि यशाचे संदेश दाखवतो | `
` `id="message"` सह |
| टेक्स्ट इनपुट | जिथे खेळाडू कोट टाइप करतात | `` `id="typed-value"` सह |
| स्टार्ट बटण | गेम सुरू करतो | `