# ਖੇਡ ਬਣਾਉਣਾ ਇਵੈਂਟਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ
ਕੀ ਤੁਸੀਂ ਕਦੇ ਸੋਚਿਆ ਹੈ ਕਿ ਵੈਬਸਾਈਟਾਂ ਨੂੰ ਕਿਵੇਂ ਪਤਾ ਹੁੰਦਾ ਹੈ ਕਿ ਤੁਸੀਂ ਬਟਨ 'ਤੇ ਕਲਿਕ ਕੀਤਾ ਜਾਂ ਟੈਕਸਟ ਬਾਕਸ ਵਿੱਚ ਕੁਝ ਟਾਈਪ ਕੀਤਾ? ਇਹ ਸਾਰਾ ਜਾਦੂ ਇਵੈਂਟ-ਡ੍ਰਿਵਨ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦਾ ਹੈ! ਇਸ ਮਹੱਤਵਪੂਰਨ ਹੁਨਰ ਨੂੰ ਸਿੱਖਣ ਦਾ ਸਭ ਤੋਂ ਵਧੀਆ ਤਰੀਕਾ ਹੈ ਕੁਝ ਉਪਯੋਗੀ ਬਣਾਉਣਾ - ਇੱਕ ਟਾਈਪਿੰਗ ਸਪੀਡ ਗੇਮ ਜੋ ਤੁਹਾਡੇ ਹਰ ਕੀ-ਸਟ੍ਰੋਕ 'ਤੇ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦਿੰਦੀ ਹੈ।
ਤੁਸੀਂ ਖੁਦ ਵੇਖੋਗੇ ਕਿ ਵੈਬ ਬ੍ਰਾਊਜ਼ਰ ਤੁਹਾਡੇ ਜਾਵਾਸਕ੍ਰਿਪਟ ਕੋਡ ਨਾਲ "ਗੱਲਬਾਤ" ਕਿਵੇਂ ਕਰਦੇ ਹਨ। ਹਰ ਵਾਰ ਜਦੋਂ ਤੁਸੀਂ ਕਲਿਕ ਕਰਦੇ ਹੋ, ਟਾਈਪ ਕਰਦੇ ਹੋ ਜਾਂ ਮਾਊਸ ਨੂੰ ਹਿਲਾਉਂਦੇ ਹੋ, ਬ੍ਰਾਊਜ਼ਰ ਤੁਹਾਡੇ ਕੋਡ ਨੂੰ ਛੋਟੇ ਸੁਨੇਹੇ ਭੇਜਦਾ ਹੈ (ਜਿਨ੍ਹਾਂ ਨੂੰ ਅਸੀਂ ਇਵੈਂਟਸ ਕਹਿੰਦੇ ਹਾਂ), ਅਤੇ ਤੁਸੀਂ ਫੈਸਲਾ ਕਰਦੇ ਹੋ ਕਿ ਕਿਵੇਂ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦੇਣੀ ਹੈ!
ਜਦੋਂ ਤੱਕ ਅਸੀਂ ਇਹ ਖਤਮ ਕਰਾਂਗੇ, ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਅਸਲੀ ਟਾਈਪਿੰਗ ਗੇਮ ਹੋਵੇਗੀ ਜੋ ਤੁਹਾਡੀ ਸਪੀਡ ਅਤੇ ਸਹੀਤਾ ਨੂੰ ਟ੍ਰੈਕ ਕਰਦੀ ਹੈ। ਸਭ ਤੋਂ ਮਹੱਤਵਪੂਰਨ ਗੱਲ, ਤੁਸੀਂ ਉਹ ਬੁਨਿਆਦੀ ਧਾਰਨਾਵਾਂ ਨੂੰ ਸਮਝੋਗੇ ਜੋ ਹਰ ਇੰਟਰਐਕਟਿਵ ਵੈਬਸਾਈਟ ਨੂੰ ਤਾਕਤ ਦਿੰਦੇ ਹਨ। ਚਲੋ ਸ਼ੁਰੂ ਕਰੀਏ!
## ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼
[ਪ੍ਰੀ-ਲੈਕਚਰ ਕਵਿਜ਼](https://ff-quizzes.netlify.app/web/quiz/21)
## ਇਵੈਂਟ-ਡ੍ਰਿਵਨ ਪ੍ਰੋਗਰਾਮਿੰਗ
ਆਪਣੇ ਮਨਪਸੰਦ ਐਪ ਜਾਂ ਵੈਬਸਾਈਟ ਬਾਰੇ ਸੋਚੋ - ਇਸਨੂੰ ਜ਼ਿੰਦਾ ਅਤੇ ਪ੍ਰਤੀਕ੍ਰਿਆਸ਼ੀਲ ਬਣਾਉਣ ਵਾਲੀ ਚੀਜ਼ ਕੀ ਹੈ? ਇਹ ਸਾਰਾ ਇਸ ਗੱਲ 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ ਕਿ ਇਹ ਤੁਹਾਡੇ ਕੀ ਕਰਨ 'ਤੇ ਕਿਵੇਂ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦਿੰਦਾ ਹੈ! ਹਰ ਟੈਪ, ਕਲਿਕ, ਸਵਾਈਪ ਜਾਂ ਕੀ-ਸਟ੍ਰੋਕ "ਇਵੈਂਟ" ਬਣਾਉਂਦਾ ਹੈ, ਅਤੇ ਇਹੀ ਹੈ ਜਿੱਥੇ ਵੈਬ ਡਿਵੈਲਪਮੈਂਟ ਦਾ ਅਸਲੀ ਜਾਦੂ ਹੁੰਦਾ ਹੈ।
ਇਹ ਹੈ ਜੋ ਵੈਬ ਲਈ ਪ੍ਰੋਗਰਾਮਿੰਗ ਨੂੰ ਬਹੁਤ ਦਿਲਚਸਪ ਬਣਾਉਂਦਾ ਹੈ: ਅਸੀਂ ਕਦੇ ਨਹੀਂ ਜਾਣਦੇ ਕਿ ਕੋਈ ਵਿਅਕਤੀ ਉਸ ਬਟਨ 'ਤੇ ਕਦੋਂ ਕਲਿਕ ਕਰੇਗਾ ਜਾਂ ਟੈਕਸਟ ਬਾਕਸ ਵਿੱਚ ਟਾਈਪ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੇਗਾ। ਉਹ ਤੁਰੰਤ ਕਲਿਕ ਕਰ ਸਕਦੇ ਹਨ, ਪੰਜ ਮਿੰਟਾਂ ਦੀ ਉਡੀਕ ਕਰ ਸਕਦੇ ਹਨ, ਜਾਂ ਸ਼ਾਇਦ ਕਦੇ ਵੀ ਕਲਿਕ ਨਾ ਕਰਨ। ਇਸ ਅਣਪਛਾਤੇਪਣ ਦਾ ਮਤਲਬ ਹੈ ਕਿ ਅਸੀਂ ਆਪਣੇ ਕੋਡ ਨੂੰ ਲਿਖਣ ਬਾਰੇ ਵੱਖਰੇ ਤਰੀਕੇ ਨਾਲ ਸੋਚਣ ਦੀ ਲੋੜ ਹੈ।
ਇੱਕ ਰਸੋਈ ਦੀ ਰੀਸਿਪੀ ਵਾਂਗ ਉੱਪਰ ਤੋਂ ਹੇਠਾਂ ਚੱਲਣ ਵਾਲਾ ਕੋਡ ਲਿਖਣ ਦੀ ਬਜਾਏ, ਅਸੀਂ ਕੋਡ ਲਿਖਦੇ ਹਾਂ ਜੋ ਕੁਝ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰਦਾ ਹੈ। ਇਹ ਕੁਝ ਇਸ ਤਰ੍ਹਾਂ ਹੈ ਜਿਵੇਂ 1800 ਦੇ ਦਹਾਕੇ ਵਿੱਚ ਟੈਲੀਗ੍ਰਾਫ ਓਪਰੇਟਰ ਆਪਣੇ ਮਸ਼ੀਨਾਂ ਦੇ ਕੋਲ ਬੈਠਦੇ ਸਨ, ਤੁਰੰਤ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦੇਣ ਲਈ ਤਿਆਰ ਹੁੰਦੇ ਸਨ ਜਦੋਂ ਵੀ ਤਾਰ ਆਉਂਦੀ ਸੀ।
ਤਾਂ ਫਿਰ "ਇਵੈਂਟ" ਅਸਲ ਵਿੱਚ ਕੀ ਹੈ? ਸਧਾਰਨ ਤੌਰ 'ਤੇ, ਇਹ ਕੁਝ ਹੈ ਜੋ ਹੁੰਦਾ ਹੈ! ਜਦੋਂ ਤੁਸੀਂ ਬਟਨ 'ਤੇ ਕਲਿਕ ਕਰਦੇ ਹੋ - ਇਹ ਇੱਕ ਇਵੈਂਟ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਅੱਖਰ ਟਾਈਪ ਕਰਦੇ ਹੋ - ਇਹ ਇੱਕ ਇਵੈਂਟ ਹੈ। ਜਦੋਂ ਤੁਸੀਂ ਆਪਣਾ ਮਾਊਸ ਹਿਲਾਉਂਦੇ ਹੋ - ਇਹ ਇੱਕ ਹੋਰ ਇਵੈਂਟ ਹੈ।
ਇਵੈਂਟ-ਡ੍ਰਿਵਨ ਪ੍ਰੋਗਰਾਮਿੰਗ ਸਾਨੂੰ ਆਪਣੇ ਕੋਡ ਨੂੰ ਸੁਣਨ ਅਤੇ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦੇਣ ਲਈ ਸੈਟ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ। ਅਸੀਂ ਵਿਸ਼ੇਸ਼ ਫੰਕਸ਼ਨ ਬਣਾਉਂਦੇ ਹਾਂ ਜਿਨ੍ਹਾਂ ਨੂੰ **ਇਵੈਂਟ ਲਿਸਨਰ** ਕਿਹਾ ਜਾਂਦਾ ਹੈ ਜੋ ਵਿਸ਼ੇਸ਼ ਚੀਜ਼ਾਂ ਦੇ ਹੋਣ ਦੀ ਉਡੀਕ ਕਰਦੇ ਹਨ, ਫਿਰ ਜਦੋਂ ਉਹ ਹੁੰਦੇ ਹਨ ਤਾਂ ਤੁਰੰਤ ਕਾਰਵਾਈ ਕਰਦੇ ਹਨ।
ਇਵੈਂਟ ਲਿਸਨਰ ਨੂੰ ਆਪਣੇ ਕੋਡ ਲਈ ਡੋਰਬੈਲ ਹੋਣ ਵਾਂਗ ਸੋਚੋ। ਤੁਸੀਂ ਡੋਰਬੈਲ ਸੈਟ ਕਰਦੇ ਹੋ (`addEventListener()`), ਇਸਨੂੰ ਦੱਸਦੇ ਹੋ ਕਿ ਕਿਹੜੀ ਆਵਾਜ਼ ਸੁਣਨੀ ਹੈ (ਜਿਵੇਂ 'ਕਲਿਕ' ਜਾਂ 'ਕੀਪ੍ਰੈਸ'), ਅਤੇ ਫਿਰ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦੇ ਹੋ ਕਿ ਜਦੋਂ ਕੋਈ ਇਸਨੂੰ ਬਜਾਉਂਦਾ ਹੈ ਤਾਂ ਕੀ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ (ਤੁਹਾਡਾ ਕਸਟਮ ਫੰਕਸ਼ਨ)।
**ਇਵੈਂਟ ਲਿਸਨਰ ਕਿਵੇਂ ਕੰਮ ਕਰਦੇ ਹਨ:**
- **ਸੁਣਦੇ ਹਨ** ਵਿਸ਼ੇਸ਼ ਯੂਜ਼ਰ ਐਕਸ਼ਨ ਜਿਵੇਂ ਕਿ ਕਲਿਕ, ਕੀ-ਸਟ੍ਰੋਕ ਜਾਂ ਮਾਊਸ ਮੂਵਮੈਂਟ
- **ਤੁਰੰਤ ਚਲਾਉਂਦੇ ਹਨ** ਤੁਹਾਡਾ ਕਸਟਮ ਕੋਡ ਜਦੋਂ ਨਿਰਧਾਰਤ ਇਵੈਂਟ ਹੁੰਦਾ ਹੈ
- **ਤੁਰੰਤ ਪ੍ਰਤੀਕ੍ਰਿਆ ਦਿੰਦੇ ਹਨ** ਯੂਜ਼ਰ ਇੰਟਰਐਕਸ਼ਨ ਲਈ, ਇੱਕ ਸਹੀਮਲ ਅਨੁਭਵ ਬਣਾਉਂਦੇ ਹਨ
- **ਇਕੋ ਐਲੀਮੈਂਟ 'ਤੇ ਕਈ ਇਵੈਂਟਸ ਨੂੰ ਸੰਭਾਲਦੇ ਹਨ** ਵੱਖਰੇ ਲਿਸਨਰ ਦੀ ਵਰਤੋਂ ਕਰਕੇ
> **NOTE:** ਇਹ ਗੱਲ ਉਜਾਗਰ ਕਰਨ ਵਾਲੀ ਹੈ ਕਿ ਇਵੈਂਟ ਲਿਸਨਰ ਬਣਾਉਣ ਦੇ ਕਈ ਤਰੀਕੇ ਹਨ। ਤੁਸੀਂ ਗੁਮਨਾਮ ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ, ਜਾਂ ਨਾਮਿਤ ones ਬਣਾਉਣ। ਤੁਸੀਂ ਵੱਖ-ਵੱਖ ਸ਼ਾਰਟਕਟ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ, ਜਿਵੇਂ `click` ਪ੍ਰਾਪਰਟੀ ਸੈਟ ਕਰਨਾ, ਜਾਂ `addEventListener()` ਦੀ ਵਰਤੋਂ ਕਰਨਾ। ਸਾਡੇ ਅਭਿਆਸ ਵਿੱਚ ਅਸੀਂ `addEventListener()` ਅਤੇ ਗੁਮਨਾਮ ਫੰਕਸ਼ਨ 'ਤੇ ਧਿਆਨ ਦੇਣ ਜਾ ਰਹੇ ਹਾਂ, ਕਿਉਂਕਿ ਇਹ ਵੈਬ ਡਿਵੈਲਪਰਾਂ ਦੁਆਰਾ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਸਭ ਤੋਂ ਆਮ ਤਰੀਕਾ ਹੈ। ਇਹ ਸਭ ਤੋਂ ਲਚਕਦਾਰ ਵੀ ਹੈ, ਕਿਉਂਕਿ `addEventListener()` ਸਾਰੇ ਇਵੈਂਟਸ ਲਈ ਕੰਮ ਕਰਦਾ ਹੈ, ਅਤੇ ਇਵੈਂਟ ਦਾ ਨਾਮ ਪੈਰਾਮੀਟਰ ਵਜੋਂ ਦਿੱਤਾ ਜਾ ਸਕਦਾ ਹੈ।
### ਆਮ ਇਵੈਂਟਸ
ਜਦੋਂ ਕਿ ਵੈਬ ਬ੍ਰਾਊਜ਼ਰ ਤੁਹਾਡੇ ਲਈ ਸੁਣਨ ਲਈ ਕਈ ਵੱਖਰੇ ਇਵੈਂਟਸ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰਦੇ ਹਨ, ਜ਼ਿਆਦਾਤਰ ਇੰਟਰਐਕਟਿਵ ਐਪਲੀਕੇਸ਼ਨ ਸਿਰਫ ਕੁਝ ਮੁੱਖ ਇਵੈਂਟਸ 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ। ਇਹ ਮੁੱਖ ਇਵੈਂਟਸ ਨੂੰ ਸਮਝਣਾ ਤੁਹਾਨੂੰ ਉੱਚ-ਦਰਜੇ ਦੇ ਯੂਜ਼ਰ ਇੰਟਰਐਕਸ਼ਨ ਬਣਾਉਣ ਲਈ ਬੁਨਿਆਦ ਮੁਹੱਈਆ ਕਰੇਗਾ।
ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਉਂਦੇ ਹੋ ਤਾਂ ਸੁਣਨ ਲਈ [ਕਈ ਇਵੈਂਟਸ](https://developer.mozilla.org/docs/Web/Events) ਉਪਲਬਧ ਹਨ। ਅਸਲ ਵਿੱਚ, ਪੇਜ 'ਤੇ ਯੂਜ਼ਰ ਦੁਆਰਾ ਕੀਤੀ ਗਈ ਕੋਈ ਵੀ ਚੀਜ਼ ਇੱਕ ਇਵੈਂਟ ਪੈਦਾ ਕਰਦੀ ਹੈ, ਜੋ ਤੁਹਾਨੂੰ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਬਹੁਤ ਤਾਕਤ ਦਿੰਦੀ ਹੈ ਕਿ ਉਹ ਉਹ ਅਨੁਭਵ ਪ੍ਰਾਪਤ ਕਰਦੇ ਹਨ ਜੋ ਤੁਸੀਂ ਚਾਹੁੰਦੇ ਹੋ। ਖੁਸ਼ਕਿਸਮਤੀ ਨਾਲ, ਤੁਹਾਨੂੰ ਆਮ ਤੌਰ 'ਤੇ ਸਿਰਫ ਕੁਝ ਮੁੱਖ ਇਵੈਂਟਸ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਇੱਥੇ ਕੁਝ ਆਮ ਹਨ (ਜਿਨ੍ਹਾਂ ਵਿੱਚੋਂ ਦੋ ਅਸੀਂ ਆਪਣੀ ਗੇਮ ਬਣਾਉਣ ਵੇਲੇ ਵਰਤਾਂਗੇ):
| ਇਵੈਂਟ | ਵੇਰਵਾ | ਆਮ ਵਰਤੋਂ ਦੇ ਕੇਸ |
|-------|-------------|------------------|
| `click` | ਯੂਜ਼ਰ ਨੇ ਕੁਝ 'ਤੇ ਕਲਿਕ ਕੀਤਾ | ਬਟਨ, ਲਿੰਕ, ਇੰਟਰਐਕਟਿਵ ਐਲੀਮੈਂਟਸ |
| `contextmenu` | ਯੂਜ਼ਰ ਨੇ ਸੱਜੇ ਮਾਊਸ ਬਟਨ 'ਤੇ ਕਲਿਕ ਕੀਤਾ | ਕਸਟਮ ਰਾਈਟ-ਕਲਿਕ ਮੀਨੂ |
| `select` | ਯੂਜ਼ਰ ਨੇ ਕੁਝ ਟੈਕਸਟ ਹਾਈਲਾਈਟ ਕੀਤਾ | ਟੈਕਸਟ ਐਡਿਟਿੰਗ, ਕਾਪੀ ਓਪਰੇਸ਼ਨ |
| `input` | ਯੂਜ਼ਰ ਨੇ ਕੁਝ ਟੈਕਸਟ ਇਨਪੁਟ ਕੀਤਾ | ਫਾਰਮ ਵੈਲੀਡੇਸ਼ਨ, ਰੀਅਲ-ਟਾਈਮ ਸਰਚ |
**ਇਹ ਇਵੈਂਟ ਟਾਈਪਸ ਨੂੰ ਸਮਝਣਾ:**
- **ਟ੍ਰਿਗਰ** ਜਦੋਂ ਯੂਜ਼ਰ ਪੇਜ 'ਤੇ ਵਿਸ਼ੇਸ਼ ਐਲੀਮੈਂਟਸ ਨਾਲ ਇੰਟਰਐਕਟ ਕਰਦੇ ਹਨ
- **ਯੂਜ਼ਰ ਦੇ ਐਕਸ਼ਨ ਬਾਰੇ ਵਿਸਤ੍ਰਿਤ ਜਾਣਕਾਰੀ ਪ੍ਰਦਾਨ ਕਰਦੇ ਹਨ** ਇਵੈਂਟ ਓਬਜੈਕਟਸ ਰਾਹੀਂ
- **ਤੁਹਾਨੂੰ ਪ੍ਰਤੀਕ੍ਰਿਆਸ਼ੀਲ, ਇੰਟਰਐਕਟਿਵ ਵੈਬ ਐਪਲੀਕੇਸ਼ਨ ਬਣਾਉਣ ਦੀ ਆਗਿਆ ਦਿੰਦੇ ਹਨ**
- **ਵੱਖਰੇ ਬ੍ਰਾਊਜ਼ਰ ਅਤੇ ਡਿਵਾਈਸ 'ਤੇ ਸਥਿਰ ਤਰੀਕੇ ਨਾਲ ਕੰਮ ਕਰਦੇ ਹਨ**
## ਗੇਮ ਬਣਾਉਣਾ
ਹੁਣ ਜਦੋਂ ਤੁਸੀਂ ਸਮਝ ਗਏ ਹੋ ਕਿ ਇਵੈਂਟਸ ਕਿਵੇਂ ਕੰਮ ਕਰਦੇ ਹਨ, ਆਓ ਇਸ ਗਿਆਨ ਨੂੰ ਅਮਲ ਵਿੱਚ ਲਿਆਉਣ ਲਈ ਕੁਝ ਉਪਯੋਗੀ ਬਣਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੀਏ। ਅਸੀਂ ਇੱਕ ਟਾਈਪਿੰਗ ਸਪੀਡ ਗੇਮ ਬਣਾਉਣ ਜਾ ਰਹੇ ਹਾਂ ਜੋ ਇਵੈਂਟ ਹੈਂਡਲਿੰਗ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ ਜਦੋਂ ਕਿ ਤੁਹਾਨੂੰ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਡਿਵੈਲਪਰ ਹੁਨਰ ਵਿਕਸਿਤ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।
ਅਸੀਂ ਇੱਕ ਗੇਮ ਬਣਾਉਣ ਜਾ ਰਹੇ ਹਾਂ ਜੋ ਜਾਵਾਸਕ੍ਰਿਪਟ ਵਿੱਚ ਇਵੈਂਟਸ ਕਿਵੇਂ ਕੰਮ ਕਰਦੇ ਹਨ ਦੀ ਪੜਚੋਲ ਕਰੇਗਾ। ਸਾਡੀ ਗੇਮ ਇੱਕ ਖਿਡਾਰੀ ਦੀ ਟਾਈਪਿੰਗ ਸਿੱਧਤਾ ਦੀ ਜਾਂਚ ਕਰੇਗੀ, ਜੋ ਕਿ ਸਾਰੇ ਡਿਵੈਲਪਰਾਂ ਲਈ ਇੱਕ ਬਹੁਤ ਹੀ ਅਣਡਿੱਠਾ ਹੁਨਰ ਹੈ। ਦਿਲਚਸਪ ਗੱਲ: 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` - ਵਿਜ਼ੂਅਲ ਦਿੱਖ ਅਤੇ ਸਟਾਈਲਿੰਗ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ
## ਯੂਜ਼ਰ ਇੰਟਰਫੇਸ ਬਣਾਉਣਾ
ਹੁਣ ਆਓ ਉਹ ਮੰਚ ਬਣਾਈਏ ਜਿੱਥੇ ਸਾਰੀ ਗੇਮ ਐਕਸ਼ਨ ਹੋਵੇਗੀ! ਇਸਨੂੰ ਇੱਕ ਅੰਤਰਿਕਸ਼ ਜਹਾਜ਼ ਦੇ ਕੰਟਰੋਲ ਪੈਨਲ ਨੂੰ ਡਿਜ਼ਾਈਨ ਕਰਨ ਵਾਂਗ ਸੋਚੋ - ਸਾਨੂੰ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਹੈ ਕਿ ਸਾਡੀ ਗੇਮ ਖੇਡਣ ਵਾਲੇ ਨੂੰ ਜੋ ਕੁਝ ਚਾਹੀਦਾ ਹੈ ਉਹ ਉਨ੍ਹਾਂ ਦੀ ਉਮੀਦ ਦੇ ਅਨੁਸਾਰ ਹੋਵੇ।
ਆਓ ਇਹ ਪਤਾ ਕਰੀਏ ਕਿ ਸਾਡੀ ਗੇਮ ਨੂੰ ਅਸਲ ਵਿੱਚ ਕੀ ਚਾਹੀਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਇੱਕ ਟਾਈਪਿੰਗ ਗੇਮ ਖੇਡ ਰਹੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਸਕ੍ਰੀਨ 'ਤੇ ਕੀ ਦੇਖਣਾ ਚਾਹੋਗੇ? ਇੱਥੇ ਹੈ ਜੋ ਸਾਨੂੰ ਚਾਹੀਦਾ ਹੈ:
| ਯੂਆਈ ਐਲੀਮੈਂਟ | ਉਦੇਸ਼ | HTML ਐਲੀਮੈਂਟ |
|------------|---------|-------------|
| Quote Display | ਟਾਈਪ ਕਰਨ ਲਈ ਟੈਕਸਟ ਦਿਖਾਉਂਦਾ ਹੈ | `
` with `id="quote"` |
| Message Area | ਸਥਿਤੀ ਅਤੇ ਸਫਲਤਾ ਦੇ ਸੁਨੇਹੇ ਦਿਖਾਉਂਦਾ ਹੈ | `
` with `id="message"` |
| Text Input | ਜਿੱਥੇ ਖਿਡਾਰੀ ਕੋਟ ਟਾਈਪ ਕਰਦੇ ਹਨ | `` with `id="typed-value"` |
| Start Button | ਗੇਮ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ | `