81 lines
5.1 KiB
Markdown
81 lines
5.1 KiB
Markdown
# 🎮 Test Project: Module C - CyberTyper 2026
|
|
|
|
## 1. Project Overview
|
|
The objective of this task is to develop a high-performance arcade game based on English typing. Competitors must analyze the provided `words_data.json` file to design a **Database (MySQL)** and complete a dynamic front-end engine that tracks real-time coordinates to destroy words by integrating it with an API.
|
|
|
|
## 2. Technical Definitions
|
|
* **VFX (Visual Effects)**: Visual special effects within the game. This refers to effects such as letters breaking into fragments upon bullet collision.
|
|
* **WPM (Words Per Minute)**: An index of typing speed. (Calculation: `Total words typed / Play time in minutes`)
|
|
* **HP (Health Point)**: The player's vitality (starting at 100%). It decreases when words are missed, and the game ends when it reaches 0%.
|
|
|
|
## 3. Step 1: Backend API and Database Design (Server-side)
|
|
All API endpoints must use the `/module_c/api/` path, and data persistence must be guaranteed.
|
|
|
|
### **A. Database Configuration (Mandatory)**
|
|
* **Word Table**: You must create a table that stores the word text, difficulty level, and unique points based on the contents of the provided `words_data.json`.
|
|
* **Ranking Table**: You must design a table to store player names, final scores, and max combos. This data must be maintained even after a server restart.
|
|
|
|
### **B. API Logic Requirements**
|
|
* **Word Supply API (`GET /module_c/api/words?level=n`)**:
|
|
1. Randomly extract words corresponding to the requested difficulty (`level`).
|
|
2. **Duplicate Prevention**: Words already appearing on the current game screen must not be duplicated in the API call.
|
|
* **Ranking API**: Records must be stored in the DB via `POST` requests, and the **Global TOP 5** records must be returned in descending order of score upon `GET` requests.
|
|
|
|
## 4. Step 2: Game Engine and Scoring Logic (Front-end Development)
|
|
|
|
### **A. Difficulty Settings (Spawn Interval & Fall Speed)**
|
|
Words are generated at **random horizontal positions** at the top of the screen (y=0) and move downwards.
|
|
|
|
| Difficulty (Level) | Spawn Interval | Fall Speed | Multiplier ($Multiplier$) |
|
|
| :--- | :--- | :--- | :--- |
|
|
| **Level 1** | Every 2.0s | Slow (50px/sec) | 1.0 |
|
|
| **Level 2** | Every 1.5s | Normal (80px/sec) | 1.5 |
|
|
| **Level 3** | Every 1.0s | Fast (120px/sec) | 2.0 |
|
|
|
|
### **B. Detailed Scoring Formula ($FinalScore$)**
|
|
$$FinalScore = BasePoints + (CurrentCombo \times LevelMultiplier)$$
|
|
* **$BasePoints$**: The unique points assigned to the matched word in the DB.
|
|
* **$CurrentCombo$**: The number of consecutive successes. (Increments by 1 on success; resets to 0 immediately if a word hits the bottom).
|
|
* **Display**: The calculated score must be displayed as a real-time cumulative value in the **Score** area of the game screen.
|
|
|
|
### **C. HP System and Recovery**
|
|
* **Deduction**: HP decreases by **10%** whenever a word hits the bottom line.
|
|
* **Recovery**: Every time a **20 Combo** is achieved, **5%** of the currently lost HP is restored as a bonus.
|
|
|
|
## 5. Step 3: UI/UX and Scene Specifications (Design Implementation)
|
|
|
|
### **A. 3-Scene SPA (Single Page Application) Structure**
|
|
* This task must be developed as an **SPA structure** where screens transition without a full page refresh using JavaScript.
|
|
* **Scene 1 (Start)**: Player name entry and difficulty selection.
|
|
* **Scene 2 (Play)**: The actual game progression screen.
|
|
* **Scene 3 (Result)**: Final score summary and Global TOP 5 ranking display.
|
|
|
|
### **B. Start Scene Requirements**
|
|
* **Input Elements**: Game title (CyberTyper 2026), **Player Name input field (Required)**, **Difficulty Selection (Level 1, 2, 3)** via radio buttons or a select box.
|
|
* **Start Button**: Becomes active only when all information is entered; clicking it enters the game screen.
|
|
|
|
### **C. Game Screen Mandatory Components (Marking Items)**
|
|
* **Score**: Real-time cumulative scoreboard.
|
|
* **Combo**: Current consecutive success count.
|
|
* **WPM**: Real-time calculated words per minute.
|
|
* **HP Gauge**: A visually changing health bar.
|
|
* **Input Field**: Text area for the player to type English words.
|
|
* **Falling Words**: Words falling from random top positions.
|
|
|
|
### **D. Projectile and Fever Effects**
|
|
* **Bullet and Collision**: Upon pressing Enter, a bullet is fired from the bottom toward the **real-time coordinates** of the target word. When a collision occurs, a letter-fragment VFX is generated and the word is destroyed.
|
|
* **Fever Mode**: Achieving a 20 Combo reduces the fall speed by 50% for 5 seconds and activates a neon background effect.
|
|
|
|
### **E. Ranking Scene (Result Scene)**
|
|
* Displays the **Global TOP 5** leaderboard retrieved from the database.
|
|
* **[New Game]** Button: Clicking this resets all settings and returns to the Name Input screen.
|
|
|
|
---
|
|
|
|
## 6. Marking Scheme Summary (Total 25.00)
|
|
|
|
| Category | Detailed Criteria | Marks |
|
|
| :--- | :--- | :--- |
|
|
| **Design (7.0)** | Dynamic projectile/particle effects, visibility of essential UI (HP, Score), and VFX completion. | 7.0 |
|
|
| **Front-end (11.0)** | Difficulty-specific logic (Interval/Speed), duplicate-free word management, and bullet coordinate calculation. | 11.0 |
|
|
| **Back-end (7.0)** | **DB table design and data persistence**, Global TOP 5 Ranking API design. | 7.0 | |