# நிகழ்வுகளைப் பயன்படுத்தி ஒரு கேம் உருவாக்குதல்
நீங்கள் எப்போதாவது ஒரு இணையதளம் நீங்கள் ஒரு பொத்தானை அழுத்தும் போது அல்லது ஒரு எழுத்துப்பெட்டியில் டைப் செய்யும் போது எப்படி தெரிந்து கொள்கிறது என்று ஆச்சரியப்பட்டிருக்கிறீர்களா? அதுவே நிகழ்வுசார் நிரலாக்கத்தின் மாயாஜாலம்! நீங்கள் செய்யும் ஒவ்வொரு விசையைப் பற்றியும் பிரதிபலிக்கும் ஒரு பயனுள்ளதை உருவாக்குவதன் மூலம் இந்த மிக அவசியமான திறனை கற்றுக்கொள்ள சிறந்த வழி என்னவென்றால் - ஒரு டைப்பிங் வேகம் கேம்.
நீங்கள் நேரடியாக எப்படி வலை உலாவிகள் உங்கள் ஜாவா ஸ்கிரிப்ட் குறியீட்டுடன் "பேசுகின்றன" என்பதைப் பார்க்கப்போகிறீர்கள். நீங்கள் ஒவ்வொரு முறையும் கிளிக் செய்யும் போது, டைப் செய்யும் போது அல்லது உங்கள் மவுஸை நகர்த்தும் போது, உலாவி உங்கள் குறியீட்டிற்கு சிறிய செய்திகளை (நாம் அவற்றை நிகழ்வுகள் என்று அழைக்கிறோம்) அனுப்புகிறது, மற்றும் எப்படி பதிலளிக்க வேண்டும் என்பதைக் நீங்கள் தீர்மானிக்க வேண்டும்!
இங்கே நிறைவடையும்போது, நீங்கள் உங்கள் வேகம் மற்றும் துல்லியத்தை கண்காணிக்கும் ஒரு உண்மையான டைப்பிங் கேம் ஒன்றை உருவாக்கி இருப்பீர்கள். மேலும் முக்கியமாக, நீங்கள் சமைத்துள்ள ஒவ்வொரு இடைமுக வலைத்தளத்தையும் இயக்கும் அடிப்படைக் கருத்துக்களைப் புரிந்து கொள்ளப்போகிறீர்கள். வாருங்கள், தள்ளிச் செல்லலாம்!
## முன்-பாடம் விடுகை
[Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/21)
## நிகழ்வுகளால் இயக்கப்படும் நிரலாக்கம்
உங்கள் விரும்பும் செயலி அல்லது இணையதளம் நினைத்துப் பாருங்கள் - அது உயிரோடு இருப்பதையும் நேர்மறையாக உள்ளதையும் உணரச் செய்வது என்ன? நீங்கள் செய்யும் செயலுக்கு அது எப்படி பதிலளிப்பதையே அது சார்ந்தது! ஒவ்வொரு தட்டி, கிளிக், ஸ்வைப் அல்லது விசை அழுத்தம் ஒரு "நிகழ்வு" உருவாக்குகிறது, அங்கே தான் வலை அபிவிருத்தியின் உண்மை மாயாஜாலம் நடக்கிறது.
வலைத்தளத்திற்கான நிரலாக்கம் எப்படி அசத்தலாக இருக்கிறது என்பதை இங்கே பாருங்கள்: எப்போது யாராவது அந்த பொத்தானை அழுத்துவார் அல்லது எழுத்துப்பெட்டியில் அறிமுகப்படுத்த ஆரம்பிப்பார் என்று நமக்கு தெரியாது. அவர்கள் உடனே கிளிக் செய்யலாம், ஐந்து நிமிடங்கள் காத்திருக்கலாம் அல்லது ஒருபோதும் கிளிக் செய்யாமலிருக்கலாம்! இந்த எதிர்பாராத தன்மை நமக்கு எவ்வாறு எங்களது குறியீட்டை எழுதுவது என்று வேறுபடியாக நினைக்க வேண்டியதை உண்டாக்குகிறது.
வேப்பவரிசையாக நிற்கும் வகையில் நிரல் எழுதுவதற்குப் பதிலாக, நாங்கள் அயல்அனுபவிக்கக் காத்திருக்கும் வகையில் குறியீட்டை எழுதுகிறோம். இது 1800களில் டெலிகிராப் இயக்குநர்கள் தங்கள் மெஷின்களின் அருகில் அமர்ந்து, ஒரு செய்தி வயரில் வந்த உடனே பதிலளிக்க தயாராக நிற்கின்றனர் போல் இருக்கிறது.
ஆக, "நிகழ்வு" என்றால் என்ன? எளிதாகச் சொல்வோமாக, அது நடக்கும் ஏதோ ஒன்று! நீங்கள் ஒரு பொத்தானை அழுத்தும் போது - அது ஒரு நிகழ்வு. நீங்கள் ஒரு எழுத்தை டைப் செய்யும் போது - அது ஒரு நிகழ்வு. நீங்கள் உங்கள் மவுஸை நகர்த்தும் போது - அது மற்றொரு நிகழ்வு.
நிகழ்வுகளால் இயக்கப்படும் நிரலாக்கம் நமக்கு எங்கள் குறியீட்டை கேட்கவும் பதிலளிக்கவும் அமைக்க உதவுகிறது. நாம் **நிகழ்வு காத்திருப்பாளர்கள்** எனும் சிறப்பு செயல்பாடுகளை உருவாக்குகிறோம், அவை சில நிகழ்வுகள் நடக்க இணைத்து காத்திருக்கின்றன, பிறகு அவை நடக்கும் போது உடனடியாக செயல்படுகின்றன.
நிகழ்வு காத்திருப்பாளர்களை உங்கள் குறியீட்டிற்கான கதவு மணி போன்றதாகக் கருதுங்கள். நீங்கள் கதவு மணியைக் `addEventListener()` மூலம் அமைக்கிறீர்கள், அது கேட்டுக் கொள்ளத் தேவையான இரைச்சலை (போன்ற 'click' அல்லது 'keypress') தெரிவிக்கிறீர்கள், பின்னர் யார் அழுத்தினாலும் என்ன நடக்க வேண்டும் என்று உங்கள் தனிப்பட்ட செயல்பாட்டை குறிப்பிடுகிறீர்கள்.
**நிகழ்வு காத்திருப்பாளர்கள் எப்படி செயல்படுகின்றன என்பதைப் பார்க்கலாம்:**
- **கேட்கின்றனர்** நடைமுறை பயனர் செயல்களில் கடந்த அல்லது விசைகளைச் சார்ந்த செயல்கள்
- **செயல்படுத்துகின்றனர்** குறிப்பிடப்பட்ட நிகழ்வு நேர்ந்தால் உங்கள் தனிப்பட்ட குறியீட்டை
- **நேரடியாக** பயனர் தொடர்புகளுக்கு பதிலளித்து ஒரு தொடர்சியான அனுபவத்தை உருவாக்குகின்றனர்
- **ஒன்றே கூறு மீது** பல நிகழ்வுகளை வெவ்வேறு காத்திருப்பாளர்களைப் பயன்படுத்தி கையாள்கின்றனர்
> **NOTICE:** நிகழ்வு காத்திருப்பாளர்களை உருவாக்க பல வழிகள் உள்ளன. நீங்கள் அது பெயரிடப்பட்ட செயல்பாடுகளாகவும், பெயர் இல்லாதனாகவும் செய்யலாம். `click` என்ற சொத்தானை அமைக்க அல்லது `addEventListener()` பயன்படுத்துவது போன்ற குறுக்கு வழிகளும் உண்டு. எங்கள் பயிற்சியில் நாங்கள் `addEventListener()` மற்றும் பெயர் இல்லாத செயல்பாடுகளுக்கு கவனம் செலுத்தப்போகிறோம், ஏனெனில் அது வெப்தொகுநர்கள் அதிகப்படியான வகை பயன்படுத்துவதாக இருக்கிறது. மேலும் இது மிகவும் தனிச்சிறந்தது, ஏனெனில் `addEventListener()` அனைத்து நிகழ்வுகளுக்கும் வேலை செய்யும், மற்றும் நிகழ்வு பெயரை ஒரு அளவுருவாக வழங்கலாம்.
### பொதுவான நிகழ்வுகள்
வலை உலாவிகள் நீங்கள் கேட்கும் தரப்படும் பல நேர்வைகளை வழங்கினாலும், பெரும்பாலான இடைமுக பயன்பாடுகள் சில முக்கிய நிகழ்வுகளை மட்டுமே சார்ந்திருக்கின்றன. இந்த அடிப்படை நிகழ்வுக்களைப் புரிந்து கொள்வதால் மிக நுட்பமான பயனர் தொடர்புகளை உருவாக்க அடிப்படையை பெறுவீர்கள்.
நீங்கள் ஒரு செயலி உருவாக்கும்போது கேட்கக்கூடிய [பல் நிகழ்வுகள்](https://developer.mozilla.org/docs/Web/Events) உள்ளன. அடிப்படையாக, ஒரு பக்கம் பயனர் செய்யும் எதுவும் ஒரு நிகழ்வை ஏற்படுத்தும், இது உங்கள் விருப்பம் நிகழச் செய்ய அதீத சக்தியைக் கொடுக்கிறது. அதிர்ஷ்டவசமாக, நீங்கள் பெரும்பாலும் சில நிகழ்வுகளைக் மட்டும் பயன்படுத்த மோதிரவும் பின் நடவடிக்கையும் தேவை. இவை சில பொதுவானவை (நாம் எங்கள் கேம்மை உருவாக்கும் போது இரண்டு இதில் பயன்படுத்தப்போகிறோம்):
| நிகழ்வு | விளக்கம் | பொதுவான பயன்பாடுகள் |
|---------|-----------|---------------------|
| `click` | பயனர் ஏதோ ஒன்றை கிளிக் செய்தார் | பொத்தான்கள், இணைப்புகள், இடைமுக கூறுகள் |
| `contextmenu` | பயனர் வலது மவுஸ் பொத்தானை அழுத்தினார் | தனிப்பயன் வலது கிளிக் மெனுக்கள் |
| `select` | பயனர் ஒரு எழுத்தைத் தேர்ந்தெடுத்தார் | எழுத்து திருத்தம், நகல் செயல்பாடுகள் |
| `input` | பயனர் எழுத்தை உள்ளிடினார் | படிவம் சரிபார்ப்பு, நேரடி தேடல் |
**இந்த நிகழ்வு வகைகளைப் புரிந்துகொள்வது:**
- **இயக்குகிறது** பயனர்கள் உங்கள் பக்கத்திலுள்ள குறிப்பிட்ட கூறுகளை அணுகும் போது
- **கொடுக்கிறது** பயனரின் செயலின் விரிவான தகவல்களைக் நிகழ்வு பொருள்களின் மூலமாக
- **உதவுகிறது** நீங்கள் பதிலளிக்கக்கூடிய வேடிக்கை மற்றும் இடைமுக வலை செயலிகளை உருவாக்க
- **ஒரே மாதிரியாக செயல்படுகிறது** வெவ்வேறு உலாவிகள் மற்றும் சாதனங்களில்
## கேம் உருவாக்குதல்
நிகழ்வுகள் எப்படி வேலை செய்கிறன என்பதைக் கவனித்து الآن பயிற்சியில் வைக்கின்றோம், பயனுள்ள ஒன்றை உருவாக்கி. நாம் ஒரு டைப்பிங் வேகம் கேம் உருவாக்க போகிறோம், இது நிகழ்வு கையாளுதலை காட்டும் மற்றும் ஒரு முக்கியமான அபிவிருத்தியாளர் திறனை வளர்க்க உதவும்.
நாம் JavaScript இல் நிகழ்வுகள் எப்படி வேலை செய்கின்றன என்பதை ஆராய ஒரு கேம் உருவாக்கப்போகிறோம். நமது கேம் ஒரு வீரரின் டைப்பிங் திறனை பரீட்சிக்கும், இது அனைத்து அபிவிருத்தியாளர்களும் பெற்றிருக்க வேண்டிய மிகக் கவனிக்கப்படாத திறனர் ஒன்று. சுவாரஸ்யம்: நாம் இன்று பயன்படுத்தும் 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
```
**நமது கேம் இவ்வாறு செயல்படுகிறது:**
- **தொடங்கும்** வீரர் தொடக்க பொத்தானை அழுத்தும் போது மற்றும் ஒரு சீரற்ற மேற்கோளை காட்டும்
- **பின்தொடர்கிறது** வீரரின் டைப்பிங் முன்னேற்றத்தை real-timeல் வார்த்தை வாரியாக
- **முடிச்சுவிக்கிறது** தற்போதைய வார்த்தையை பயனர் கவனத்தை வழிநடத்த
- **உடனடி** கூறுபிழை காட்சியை வழங்குகிறது
- **கணக்கு** மேற்கோள் முடிந்த பிறகு மொத்த நேரத்தை காட்டுகிறது
நாம் கேம்ஸை உருவாக்குவோம், மற்றும் நிகழ்வுகளைப் பற்றி கற்போம்!
### கோப்பு அமைப்பு
நாம் குறியீட்டினை எழுத ஆரம்பிப்பதற்கு முன் அமைக்கலாம்! தொடக்கம் முதல் ஒரு சுத்தமான கோப்பு அமைப்பை வைத்திருப்பது பின்னர் தலைவலிகளைக் குறைக்கும் மற்றும் உங்கள் திட்டத்தை விஸ்மயந்திரமாக ஆக்கும். 😊
நாம் மூன்று கோப்புகளுடன் எளிமையாக வைத்து நடைபெறப்போகிறோம்: பக்க அமைப்புக்கு `index.html`, அனைத்து கேம் லாஜிக் க்கும் `script.js`, மற்றும் அனைத்தையும் அழகாக காட்டுமாறு `style.css`. இது பெரும்பாலும் வலைத்தளங்களை இயக்கும் நுட்பமான மூவர் !
**கோடை பயன்படுத்தி உங்கள் வேலைக்கான புதிய கோப்புறை உருவாக்கவும்:**
```bash
# லினிக்ஸ் அல்லது மேக்ஓ.எஸ்
mkdir typing-game && cd typing-game
# வின்டோஸ்
md typing-game && cd typing-game
```
**இந்த கட்டளைகள் என்ன செய்கின்றன:**
- **தெரிகிறது** தயாரிப்பிற்கு `typing-game` என்ற புதிய அடைவைக் உருவாக்கும்
- **தானாக** புதிதாக உருவாக்கப்பட்ட அடைவுக்குள் செல்லும்
- **வரவேற்கிறான்** ஒரு சுத்தமான பணியிடத்தை உங்கள் கேம் அபிவிருத்திக்கு அமைக்கிறது
**Visual Studio Code திறக்கவும்:**
```bash
code .
```
**இந்த கட்டளை:**
- **துவக்குகிறது** அனைத்து கோப்புகளும் உள்ள தற்போதைய அடைவில் Visual Studio Code ஐ
- **திறக்கிறது** உங்கள் திட்ட அடைவைக்
- **கொடுக்கிறது** நீங்கள் தேவையான அனைத்து அபிவிருத்தி கருவிகளையும் அணுகல்
**Visual Studio Code இல் கீழ்காணும் பெயர்களுடன் 3 கோப்புகளை சேர்க்கவும்:**
- `index.html` - உங்கள் கேம் அமைப்பும் உள்ளடக்கமும்
- `script.js` - கேம் லாஜிக்கையும் நிகழ்வு காத்திருப்பாளர்களையும் கையாளும்
- `style.css` - காட்சி தோற்றமும் பாணியும் வரையறுக்கும்
## பயனர் இடைமுகம் உருவாக்குதல்
இப்போது அனைத்து நமது கேம் செயல்பாடுகளும் நடக்கும் மேடையை உருவாக்குவோம்! விண்கலம் கட்டுப்பாட்டுப் பலகை வடிவமைப்பதைப் போன்றதாக நினைத்துக் கொள்ளுங்கள் - எங்கள் வீரர்கள் தேவையான அனைத்தும் எதிர்பார்க்கும் இடத்தில் இருப்பதை உறுதி செய்ய வேண்டும்.
எங்கள் கேம் உண்மையில் என்ன தேவை என்பதைத் தீர்மானிக்கலாம். நீங்கள் ஒரு டைப்பிங் கேம் விளையாடினால், திரையில் என்ன காண விரும்புவீர்கள்? இங்கே நாம் தேவைப்படும் விஷயங்கள்:
| UI கூறு | நோக்கம் | HTML கூறு |
|----------|---------|------------|
| மேற்கோள் காட்சி | டைப் செய்யும் உரையை காட்டுகிறது | `
` உடன் `id="quote"` |
| செய்தி பகுதி | நிலை மற்றும் வெற்றி செய்திகளை காட்டுகிறது | `
` உடன் `id="message"` |
| எழுத்து உள்ளீடு | வீரர்கள் மேற்கோளை டைப் செய்யும் இடம் | `` உடன் `id="typed-value"` |
| தொடக்கம் பொத்தான் | கேம் ஆரம்பிக்கிறது | `