# 🎮 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 |