# ఈవెంట్ల ఉపయోగంతో గేమ్ సృష్టించడం
మీరు ఎప్పుడైనా ఆలోచించారా, మీరు బటన్పై క్లిక్ చేసినప్పుడు లేదా టెక్స్ట్ బాక్సులో టైపు చేసినప్పుడు వెబ్సైట్లు ఎలా తెలుసుకుంటాయో? అది ఈవెంట్-డ్రివెన్ ప్రోగ్రామింగ్ మాయాజాలం! మీరు ప్రతి కీస్ట్రోక్కు ప్రతిస్పందించే టైపింగ్ స్పీడ్ గేమ్ని నిర్మించడం ద్వారా ఈ మూలభూత నైపుణ్యాన్ని నేర్చుకోవటానికి ఇంత మంచి మార్గం ఏమిటి.
మీరు ప్రత్యక్షంగా చూడబోతున్నారు వెబ్ బ్రౌజర్లు మీ జావాస్క్రిప్ట్ కోడ్తో "మాట్లాడటం" ఎలా జరుగుతుందో. మీరు ప్రతి సారి క్లిక్ చేసినప్పుడు, టైపు చేసినప్పుడు లేదా మౌస్ సహజీవనం చేసినప్పుడు, బ్రౌజర్ చిన్న సందేశాలు (మేము వాటిని ఈవెంట్లు అని పిలుస్తాం) మీ కోడ్కు పంపుతోంది, మీరు ఎలా స్పందించాలో నిర్ణయించుకుంటారు!
మనం ఇక్కడికల్లా వచ్చినప్పుడు, మీరు ఒక నిజమైన టైపింగ్ గేమ్ను నిర్మించి ఉంటుంది, అది మీ వేగాన్ని మరియు ఖచ్చితత్వాన్ని ట్రాక్ చేస్తుంది. మరింత ముఖ్యంగా, మీరు ఇప్పటివరకు ఉపయోగించిన ప్రతి ఇంటరాక్టివ్ వెబ్సైట్ను శక్తివంతం చేసే ప్రాథమిక సంప్రదాయాలను అర్థం చేసుకుంటారు. మొదలు పెట్టుదాం!
## పాఠం మునుపటి ప్రశ్నావళి
[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/21)
## ఈవెంట్-డ్రివెన్ ప్రోగ్రామింగ్
మీ ఇష్టమైన యాప్ లేదా వెబ్సైట్ గురించి ఆలోచించండి - దాన్ని ప్రత్యక్షంగా మరియు స్పందించేలా ఎలా చేస్తుంది? అది మీరు చేసే పనికి అది ఎలా స్పందించడమే ముఖ్యమైనది! ప్రతి ట్యాప్, క్లిక్, స్వైప్ లేదా కీస్ట్రోకు "ఈవెంట్" అని పిలవబడే ఒక ఘటనను సృష్టిస్తుంది, అక్కడ వెబ్ అభివృద్ధి యొక్క నిజమైన మాయాజాలం జరుగుతుంది.
ఇది వెబ్ కోసం ప్రోగ్రామింగ్లో ఆసక్తికరంగా 만드는 విషయం ఇది: మనం ఎప్పుడూ ఒకరు ఆ బటన్ పై క్లిక్ చేస్తారో లేదా టెక్స్ట్ బాక్సులో టైపు చేయడం మొదలుపెడతారో తెలియదు. వారు వెంటనే క్లిక్ చేయవచ్చు, అయిదు నిమిషాలు వేచి ఉండవచ్చు, లేకపోతే ఎప్పుడూ క్లిక్ చేయకపోవచ్చు! ఈ అనిశ్చితి మీ కోడ్ ఎలా రాయాలో మనం వేరే రీతిగా ఆలోచించాల్సిన అవసరాన్ని కలిగిస్తుంది.
చెక్కపట్టు ప్రక్రియలాగా పై నుండి కిందికి పనిచేసే కోడ్ రాయడానికే బదులు, మనం ఏదో జరగాలని శాంతంగా ఎదురు చూస్తూ ఉండే కోడ్ రాస్తాము. ఇది 1800లలో టెలిగ్రాఫ్ ఆపరేటర్లు తమ యంత్రాల పక్కన కూర్చొని, వైర్ ద్వారా ఒక సందేశం వచ్చిన వెంటనే స్పందించే రూపాన్ని పోలి ఉంటుంది.
కాబట్టి ఈవెంట్ అనేది ఏమిటి? సరళంగా చెప్పాలంటే, అది ఏదో జరిగినది! మీరు ఒక బటన్ పై క్లిక్ చేసినప్పుడు - అది ఒక ఈవెంట్. మీరు ఒక అక్షరాన్ని టైపు చేసినప్పుడు - అది ఒక ఈవెంట్. మీరు మీ మౌస్ను కదిలించినప్పుడు - అది మరో ఈవెంట్.
ఈవెంట్-డ్రివెన్ ప్రోగ్రామింగ్ మనకు కోడ్ను వినిపించడానికి మరియు స్పందించడానికి ఏర్పాటుచేసే అవకాశం ఇస్తుంది. మేము **ఈవెంట్ లిసనర్లు** అని పిలవబడే ప్రత్యేక ఫంక్షన్లు సృష్టిస్తాము, అవి నిర్దిష్ట సంఘటన జరుగాలని ఓర్పుగా ఎదురు చూస్తాయి, అవి జరిగితే వెంటనే చర్య తీసుకుంటాయి.
ఈవెంట్ వినికిడి లాంటి వి చూడండి మీ కోడ్ కోసం వేర్ద్వారం కలిగి ఉండటం వలె ఉంటుంది. మీరు వేర్ద్వారం ఏర్పాటు చేయాలి (`addEventListener()`), మీరు వినటానికి కావలసిన శబ్దం (ఉదాహరణకు 'click' లేదా 'keypress') చెప్పాలి, మరియు దాన్ని ఎవరు కొట్టినప్పుడు (మీ కస్టమ్ ఫంక్షన్) ఏమి జరగాలో నిర్దేశించాలి.
**ఈవెంట్ లిసనర్లు ఎలా పనిచేస్తాయో ఇక్కడ ఉన్నది:**
- **గమనిస్తాయి** వినియోగదారుల ప్రత్యేక చర్యలను, ఉదాహరణకు క్లిక్లు, కీస్ట్రోక్స్, లేదా మౌస్ కదలికలు
- **మీ కస్టమ్ కోడ్ను అమలు చేస్తాయి** నిర్దిష్ట ఈవెంట్ సంభవించినప్పుడు
- **వినియోగదారుల ఇన్టరాక్షన్లకు వెంటనే స్పందిస్తాయి**, నిరాత్రుక अनुभवాన్ని సృష్టిస్తాయి
- **అదే ఎలిమెంట్పై బహుళ ఈవెంట్లను** వివిధ లిసనర్లతో నిర్వహిస్తాయి
> **NOTE:** ఈవెంట్ లిసనర్లు సృష్టించడానికి అనేక మార్గాలు ఉన్నాయని చెప్పటం మంచిది. మీరు అనామక ఫంక్షన్లు ఉపయోగించవచ్చు, లేదా పేరున్నవాటి సృష్టించవచ్చు. మీరు వివిధ షార్ట్కట్లు ఉపయోగించవచ్చు, ఉదాహరణకు `click` ప్రాపర్టీని సెట్ చేయడం, లేదా `addEventListener()` ఉపయోగించడం. మన వ్యాయామంలో మనం `addEventListener()` మరియు అనామక ఫంక్షన్లపై ఫోకస్ చేస్తాము, ఎందుకంటే ఇది వెబ్ డెవలపర్లలో సాధారణంగా ఉపయోగించే పద్ధతి. ఇది కూడా అత్యంత సరళమైనది, ఎందుకంటే `addEventListener()` అన్ని ఈవెంట్లకు పనిచేస్తుంది మరియు ఈవెంట్ పేరు పారామీటర్గా ఇవ్వవచ్చు.
### సాధారణ ఈవెంట్లు
వెబ్ బ్రౌజర్లు విన్నేందుకు అనేక రకాల ఈవెంట్లను అందించినప్పటికీ, అతి ఇంటరాక్టివ్ అప్లికేషన్లలో చాలా అవసరమైన ఈవెంట్లపై ఆధారపడి ఉంటాయి. ఈ ప్రధాన ఈవెంట్లను అర్థం చేసుకోవడం మీకు అత్యున్నత వినియోగదారు ఇన్టరాక్షన్లను నిర్మించడానికి పునాది ఇస్తుంది.
అప్లికేషన్ సృష్టించే సమయంలో వినియోగదారు చేసే ఏదైనా చర్య ఈవెంట్ను రేకెత్తిస్తుంది, దీనితో మీకు కావల్సిన అనుభూతిని అందించడానికి పెద్ద శక్తి దక్కుతుంది. అదృష్టవశాత్తు, మీరు సాధారణంగా కొద్ది ఈవెంట్లన్నింటినీ అవసరం పడతారు. ఇక్కడ కొన్ని సాధారణ ఈవెంట్లు ఉన్నాయి (మా గేమ్ సృష్టించేటప్పుడు ఉపయోగించే రెండు ఈవెంట్లు సహా):
| ఈవెంట్ | వివరణ | సాధారణ ఉపయోగాలు |
|-------|-------------|------------------|
| `click` | వినియోగదారు ఏదైనా ఒకటిపై క్లిక్ చేసింది | బటన్లు, లింకులు, ఇంటరాక్టివ్ అంశాలు |
| `contextmenu` | వినియోగదారు కుడి మౌస్ బటన్ క్లిక్ చేసింది | కస్టమ్ కుడి-క్లిక్ మెనూలు |
| `select` | వినియోగదారు కొన్ని టెక్స్ట్ ను హైలైట్ చేశాడు | టెక్స్ట్ సవరణ, కాపీ ఆపరేషన్లు |
| `input` | వినియోగదారు కొంత టెక్స్ట్ అందజేశాడు | ఫాం ప్రమాణీకరణ, రియల్-టైమ్ సెర్చ్ |
**ఈ ఈవెంట్లను అర్థం చేసుకోవడం:**
- **సృష్టిస్తుంది** వినియోగదారులు పేజీ上的 నిర్దిష్ట అంశాలతో సహకరిస్తే
- **సంధిస్తుంది** ఈవెంట్ ఆబ్జెక్ట్ల ద్వారా వినియోగదారుల చర్యలకు సంబంధించిన వివరాలను
- **అనుమతిస్తుంది** ప్రతిస్పందించే, ఇంటరాక్టివ్ వెబ్ అప్లికేషన్లను సృష్టించడానికి
- **ఇప్పటికీ పనిచేస్తుంది** అనేక బ్రౌజర్లు మరియు పరికరాలలో సమానంగా
## గేమ్ సృష్టించడం
ఈవెంట్లు ఎలా పని చేస్తాయో మీరు అర్థం చేసుకున్నందున, ఈ జ్ఞానాన్ని ఉపయోగించి ఒక ఉపయోగకరమైనవి తయారు చేద్దాం. మేము ఈవెంట్ హ్యాండ్లింగ్ను చూపించే టైపింగ్ స్పీడ్ గేమ్ను సృష్టిస్తాము, ఇది ఒక ముఖ్యమైన డెవలపర్ నైపుణ్యాన్ని అభివృద్ధి చేసేందుకు సహాయపడుతుంది.
మేము జావాస్క్రిప్ట్లో ఈవెంట్లు ఎలా పని చేస్తాయో తెలుసుకోవడానికి ఒక గేమ్ను సృష్టించబోతున్నాము. మా గేమ్ ఒక ప్లేయర్ టైపింగ్ నైపుణ్యాన్ని పరీక్షిస్తుంది, ఇది అన్ని డెవలపర్లు కలిగి ఉండాల్సిన అత్యంత అణచివేత నైపుణ్యాల్లో ఒకటి. సరదా విషయం: మనం ఈ రోజు ఉపయోగించే QWERTY కీబోర్డు లేఅవుట్ 1870లలో టైపర్ల కోసం డిజైన్ చేయబడింది - మరియు మంచి టైపింగ్ నైపుణ్యాలు ఇప్పటికీ ప్రోగ్రామర్లకు ఎంతో విలువైనవి! గేమ్ యొక్క సాధారణ ప్రవాహం ఇలా ఉంటుంది:
```mermaid
flowchart TD
A[ఆటగాడు ఆరంభం పైన క్లిక్ చేస్తాడు] --> B[యాదృచ్ఛిక ఉధ్యరణ ప్రదర్శిస్తుంది]
B --> C[ఆటగాడు టెక్స్ట్ బాక్స్ లో టైప్ చేస్తాడు]
C --> D{పదం పూర్తయింది?}
D -->|అవును| E[తదుపరి పదం హైలైట్ చేయండి]
D -->|కాదు| F{ఇప్పటికీ సరియైనదా?}
F -->|అవును| G[సాధారణ శైలి కొనసాగించండి]
F -->|కాదు| H[పొరపాటు శైలి చూపించండి]
E --> I{ఉధ్యరణ పూర్తయ్యిందా?}
I -->|కాదు| C
I -->|అవును| J[సమయం తో విజయ సందేశం చూపించండి]
G --> C
H --> C
```
**మా గేమ్ ఎలా పనిచేస్తుంది:**
- **ప్రారంభమవుతుంది** ప్లేయర్ ప్రారంభ బటన్ క్లిక్ చేసినప్పుడు మరియు ఒక యాదృచ్ఛిక కోట్ ను చూపిస్తుంది
- **ట్రాక్ చేస్తుంది** ప్లేయర్ టైపింగ్ పురోగతిని పదం వారీగా రియల్-టైమ్లో
- **హైలైట్ చేస్తుంది** ప్రస్తుత పదాన్ని ప్లేయర్ దృష్టిని మార్గనిర్దేశం చేయడానికి
- **తక్షణ ప్రతిస్పందన అందిస్తుంది** టైపింగ్ లోపాలకు
- **ఎన్నుకుంటుంది** మరియు చూపిస్తుంది మొత్తం సమయం కోట్ పూర్తి అయినప్పుడల్లా
మా గేమ్ను నిర్మించుకుందాం, మరియు ఈవెంట్ల గురించి నేర్చుకుందాం!
### ఫైల్ నిర్మాణం
కోడ్ రాయడం మొదలుపెట్టేముందు, మనం వ్యవస్థీకృతంగా ఉండాలి! ప్రారంభం నుండి స్వచ్ఛమైన ఫైల్ నిర్మాణం ఉండటం తర్వాత తలనొప్పులు తగ్గించి, మీ ప్రాజెక్టును మరింత ప్రొఫెషనల్గా చేస్తుంది. 😊
మనం మూడు ఫైళ్ళతోనే సరిపోతాం: మా పేజీ నిర్మాణానికి `index.html`, మా గేమ్ లాజిక్ కోసం `script.js`, మరియు అంతా బాగుండేందుకు `style.css`. ఇది ఎక్కువగా వెబ్ని శక్తివంతం చేసే క్లాసిక్ ముగ్గురు!
**కన్సోల్ లేదా టెర్మినల్ విండో ఓపెన్ చేసి ఈ క్రింది కమాండ్లు ఇవ్వడం ద్వారా మీ పనికి కొత్త ఫోల్డర్ సృష్టించండి:**
```bash
# లినక్స్ లేదా మ్యాక్OS
mkdir typing-game && cd typing-game
# విండోస్
md typing-game && cd typing-game
```
**ఈ కమాండ్లు ఏమి చేస్తాయో:**
- **సృష్టిస్తుంది** ఒక కొత్త డైరెక్టరీ పేరుతో `typing-game` మీ ప్రాజెక్ట్ ఫైళ్ళ కోసం
- **దానిలోకి ప్రవేశిస్తుంది** ఆటోమేటీగా నూతనంగా సృష్టించబడిన డైరెక్టరీలోకి
- **సెట్ చేస్తుంది** మీ గేమ్ అభివృద్ధికి స్వచ్ఛమైన వర్క్ప్లేస్
**విజువల్ స్టూడియో కోడ్ ఓపెన్ చేయండి:**
```bash
code .
```
**ఈ కమాండ్:**
- **ప్రారంభిస్తుంది** కారెంట్ డైరెక్టరీలో Visual Studio Code ను
- **మీ ప్రాజెక్ట్ ఫోల్డర్ను ఎడిటర్ లో తెరవడం**
- **మీకు అవసరమైన అభివృద్ధి ఉపకరణాలను అందిస్తుంది**
**విజువల్ స్టూడియో కోడ్లో ఆ ఫోల్డర్లో ఈ క్రింది పేర్లతో మూడు ఫైళ్లను జోడించండి:**
- `index.html` - మీ గేమ్ నిర్మాణం మరియు కంటెంట్ కలిపివుంది
- `script.js` - అన్ని గేమ్ లాజిక్ మరియు ఈవెంట్ లిసనర్లను నిర్వహిస్తుంది
- `style.css` - దృశ్య రూపం మరియు శైలీకరణ నిర్వచిస్తుంది
## యూజర్ ఇంటర్ఫేస్ను సృష్టించండి
ఇప్పుడు మన గేమ్ చర్య జరుగుతుంది స్థలాన్ని నిర్మిద్దాం! ఇంగ్లీష్లో స్పేస్షిప్కి కంట్రోల్ ప్యానెల్ రూపకల్పన చేయడం లాంటిది - మన ఆటగాళ్లకు అవసరమైన ప్రతిదీ వారి ఆశించిన చోట ఉండటానికి చూసుకోవాలి.
మన గేమ్కు ఏది అవసరమో మనం తెలుసుకుందాం. మీరు టైపింగ్ గేమ్ ఆడుతున్నట్లయితే, మీరు స్క్రీన్పై ఏమి చూడాలని అనుకొంటారు? మెనూ ఇక్కడ ఉంది:
| UI అంశం | ఉద్దేశ్యం | HTML అంశం |
|------------|---------|-------------|
| Quote Display | టైపు చేయవలసిన టెక్స్ట్ చూపిస్తుంది | `
` with `id="quote"` |
| Message Area | స్థితి మరియు విజయ సందేశాలు చూపిస్తుంది | `
` with `id="message"` |
| Text Input | ప్లేయర్లు కోట్ టైప్ చేసే విభాగం | `` with `id="typed-value"` |
| Start Button | గేమ్ ప్రారంభిస్తుంది | `