# इव्हेंट्स वापरून गेम तयार करणे
तुम्ही कधी विचार केला आहे की वेबसाइट्सला कसे कळते की तुम्ही बटण क्लिक करता किंवा टेक्स्ट बॉक्समध्ये टाइप करता? हे इव्हेंट-ड्रिव्हन प्रोग्रामिंगचे जादू आहे! ही महत्त्वाची कौशल्य शिकण्यासाठी एक उपयुक्त गोष्ट तयार करण्यापेक्षा चांगले काय असू शकते - एक टायपिंग स्पीड गेम जो तुम्ही केलेल्या प्रत्येक कीस्ट्रोकवर प्रतिक्रिया देतो.
तुम्ही स्वतः पाहणार आहात की वेब ब्राउझर तुमच्या 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"` सह |
| स्टार्ट बटण | गेम सुरू करतो | `