# 🎮 Test Project: Module C - CyberTyper 2026

## 1. Loyiha sharhi (Project Overview)
Ushbu topshiriqning maqsadi ingliz tili bo'yicha yuqori mahsuldorlikka ega arkada o'yinini ishlab chiqishdir. Ishtirokchilar taqdim etilgan `words_data.json` faylini tahlil qilib, **Ma'lumotlar bazasi (MySQL)**ni loyihalashlari hamda so'zlarni yo'q qilish uchun real vaqt rejimida koordinatalarni kuzatuvchi dinamik front-end dvigatelini API bilan integratsiya qilgan holda yakunlashlari kerak.

## 2. Texnik tushunchalar (Technical Definitions)
* **VFX (Visual Effects)**: O'yindagi vizual maxsus effektlar. Bu o'q urilishi natijasida so'z harflarining parchalanib ketishi kabi effektlarni anglatadi.
* **WPM (Words Per Minute)**: Daqiqasiga yozilgan so'zlar tezligi ko'rsatkichi. (Hisoblash: `Yozilgan umumiy so'zlar / O'yin vaqti (daqiqada)`)
* **HP (Health Point)**: O'yinchining hayot darajasi (100% dan boshlanadi). So'zlar o'tkazib yuborilganda u kamayadi va 0% ga yetganda o'yin yakunlanadi.

## 3. 1-qadam: Backend API va ma'lumotlar bazasi dizayni (Server-side)
Barcha API nuqtalari (endpoints) `/module_c/api/` yo'lidan foydalanishi va ma'lumotlarning saqlanishi (persistence) kafolatlanishi kerak.

### **A. Ma'lumotlar bazasi konfiguratsiyasi (Majburiy)**
* **Word Table**: Taqdim etilgan `words_data.json` fayli asosida so'z matni, qiyinchilik darajasi va unikal ballarni saqlaydigan jadval yaratishingiz kerak.
* **Ranking Table**: O'yinchi ismlari, yakuniy ballar va maksimal kombolarni saqlash uchun jadval loyihalashingiz kerak. Ushbu ma'lumotlar server qayta ishga tushirilgandan keyin ham saqlanib qolishi shart.

### **B. API mantiqiy talablari**
* **So'zlarni yetkazib berish API (`GET /module_c/api/words?level=n`)**: 
    1. So'ralgan qiyinchilik darajasiga (`level`) mos keladigan so'zlarni tasodifiy tarzda chiqarish.
    2. **Takrorlanishning oldini olish**: Hozirgi o'yin ekranida mavjud bo'lgan so'zlar API so'rovida qayta takrorlanmasligi kerak.
* **Ranking API**: Rekordlar `POST` so'rovlari orqali MBda saqlanishi va `GET` so'rovlari orqali ballarning kamayish tartibida **Global TOP 5** rekordlari qaytarilishi kerak.

## 4. 2-qadam: O'yin dvigateli va ballar hisobi mantiqi (Front-end Development)

### **A. Qiyinchilik darajasi sozlamalari (Yaratilish oralig'i va tushish tezligi)**
So'zlar ekranning yuqori qismida (y=0) **tasodifiy gorizontal pozitsiyalarda** yaratiladi va pastga qarab harakatlanadi.

| Qiyinchilik (Daraja) | Yaratilish oralig'i | Tushish tezligi | Ko'paytiruvchi ($Multiplier$) |
| :--- | :--- | :--- | :--- |
| **Level 1** | Har 2.0s da | Sekin (50px/sek) | 1.0 |
| **Level 2** | Har 1.5s da | O'rta (80px/sek) | 1.5 |
| **Level 3** | Har 1.0s da | Tez (120px/sek) | 2.0 |

### **B. Ballarni hisoblashning batafsil formulasi ($FinalScore$)**
$$FinalScore = BasePoints + (CurrentCombo \times LevelMultiplier)$$
* **$BasePoints$**: MBdagi mos kelgan so'zga biriktirilgan unikal ball.
* **$CurrentCombo$**: Ketma-ket muvaffaqiyatlar soni. (Muvaffaqiyatda 1 ga oshadi; so'z pastki qismga tegsa, darhol 0 ga qaytadi).
* **Ko'rsatkich**: Hisoblangan ball o'yin ekranining **Score** qismida real vaqt rejimida yig'ilib borishi kerak.

### **C. HP tizimi va tiklanish**
* **Kamayish**: So'z pastki chiziqqa tegsa, HP **10%** ga kamayadi.
* **Tiklanish**: Har safar **20 Combo** ga erishilganda, yo'qotilgan HPning **5%** miqdori bonus sifatida tiklanadi.

## 5. 3-qadam: UI/UX va sahna spetsifikatsiyalari (Design Implementation)

### **A. 3-Scene SPA (Single Page Application) tuzilmasi**
* Ushbu topshiriq JavaScript yordamida sahifani to'liq yangilamasdan almashadigan **SPA tuzilmasida** ishlab chiqilishi kerak.
* **Scene 1 (Start)**: O'yinchi ismini kiritish va qiyinchilik darajasini tanlash.
* **Scene 2 (Play)**: Haqiqiy o'yin jarayoni ekrani.
* **Scene 3 (Result)**: Yakuniy ball xulosasi va Global TOP 5 reyting ekrani.

### **B. Boshlang'ich sahna talablari**
* **Kiritish elementlari**: O'yin nomi (CyberTyper 2026), **O'yinchi ismi maydoni (Majburiy)**, radio-tugmalar yoki tanlash qutisi orqali **Qiyinchilikni tanlash (Level 1, 2, 3)**.
* **Start tugmasi**: Barcha ma'lumotlar kiritilgandagina faollashadi; uni bosish o'yin ekraniga olib kiradi.

### **C. O'yin ekranining majburiy komponentlari (Baholash elementlari)**
* **Score**: Real vaqt rejimidagi ballar jadvali.
* **Combo**: Ketma-ket muvaffaqiyatli urishlar soni.
* **WPM**: Real vaqtda hisoblangan daqiqalik so'zlar soni.
* **HP Gauge**: Vizual tarzda o'zgarib turadigan hayot bari.
* **Input Field**: O'yinchi inglizcha so'zlarni yozishi uchun matn maydoni.
* **Falling Words**: Yuqoridan tasodifiy joylardan tushayotgan so'zlar.

### **D. Proyektil (o'q) va Fever effektlari**
* **O'q va to'qnashuv**: Enter tugmasi bosilganda, pastdan maqsadli so'zning **real vaqt koordinatalari** tomon o'q otiladi. To'qnashuv sodir bo'lganda, harflar parchalanishi VFX hosil bo'ladi va so'z yo'q qilinadi.
* **Fever Mode**: 20 ta komboga erishish tushish tezligini 5 soniya davomida 50% ga kamaytiradi va neon fon effektini faollashtiradi.

### **E. Reyting sahnasi (Natija sahifasi)**
* Ma'lumotlar bazasidan olingan **Global TOP 5** yetakchilar jadvalini ko'rsatadi.
* **[New Game]** tugmasi: Buni bosish barcha sozlamalarni tiklaydi va ism kiritish ekraniga qaytaradi.

---

## 6. Baholash sxemasi xulosasi (Jami 25.00)

| Toifa | Batafsil mezonlar | Ballar |
| :--- | :--- | :--- |
| **Design (7.0)** | Dinamik proyektil/zarracha effektlari, muhim UI elementlari (HP, Score) ko'rinishi va VFX sifati. | 7.0 |
| **Front-end (11.0)** | Qiyinchilikka xos mantiq (Interval/Tezlik), takrorlanishsiz so'zlar boshqaruvi va o'q koordinatalarini hisoblash. | 11.0 |
| **Back-end (7.0)** | **MB jadvali dizayni va ma'lumotlar barqarorligi**, Global TOP 5 reyting API dizayni. | 7.0 |