ProfileTab.tsx
Обзор
Файл ProfileTab.tsx представляет собой React-компонент, отвечающий за отображение профиля игрока в пользовательском интерфейсе. Основная задача компонента — визуализировать ключевые игровые характеристики пользователя: имя, ранг, уровень опыта, статистику (например, количество побед, текущая серия побед, мана и прочее), а также достижения. Компонент формирует структурированный и стилизованный интерфейс с прогрессбаром опыта, сеткой статистики и секцией достижений, что позволяет пользователю быстро оценить свой прогресс и статус в игре.
Подробное описание
Интерфейс ProfileTabProps
Определяет типы пропсов, передаваемых в компонент:
Свойство | Тип | Описание |
|---|---|---|
|
| Объект с игровой статистикой игрока. Включает имя, уровень, опыт, победы и т.д. |
|
| Ранг игрока (например, "Новичок", "Мастер"). |
|
| Заголовок профиля (не используется напрямую, переименован в |
Компонент ProfileTab
const ProfileTab: React.FC<ProfileTabProps> = ({ player, rank, title: _title }) => { ... }
Описание
Функциональный React-компонент, который рендерит профиль игрока на основе переданных данных.
Входные параметры
player: PlayerStats— объект с детальной статистикой игрока.rank: string— ранг игрока.title: string— дополнительный заголовок (не используется в JSX, возможно для будущих целей).
Локальные переменные и вычисления
expNeeded— количество опыта, необходимое для перехода на следующий уровень (player.level * 1000).expPercent— процент заполнения прогресс-бара опыта.winRate— процент побед в боях (если было хотя бы одно сражение).achievementDefinitions— список всех достижений, получаемый из логики игры черезgetAchievementDefinitions().unlockedAchievements— достижения, которые игрок уже разблокировал.lockedAchievements— достижения, которые ещё не разблокированы.displayAchievements— набор достижений для отображения: последние 3 разблокированных и первые 2 заблокированных.
Структура вывода (JSX)
Hero Section — отображение аватара игрока, имени и ранга.
Experience Progress — прогресс-бар опыта с числовым отображением текущего опыта и необходимого для уровня.
Stats Grid — сетка основных игровых показателей: мана, победы, серия побед, общее количество боёв.
Additional Stats — мини-статистика: процент побед, общее количество выигранной маны, любимый элемент.
Achievements Section — секция с достижениями, отображает иконки, имена и описания, визуально выделяет разблокированные.
Используемые функции
getAchievementDefinitions()— импортируется из../gameLogic. Возвращает массив всех определений достижений с их ID, иконками, именами и описаниями.
Пример использования компонента
import ProfileTab from './ProfileTab';
import { PlayerStats } from '../types';
const playerData: PlayerStats = {
name: 'Игрок1',
level: 10,
experience: 7500,
mana: 12345,
wins: 150,
winStreak: 10,
totalBattles: 200,
totalManaWon: 50000,
favoriteElement: 'Огонь',
achievements: ['achv1', 'achv3', 'achv5'],
};
const rank = 'Мастер';
<ProfileTab player={playerData} rank={rank} title="Профиль игрока" />;
Важные детали реализации
Прогресс опыта рассчитывается динамически и отображается с анимацией заполнения.
При отображении достижений берутся последние 3 разблокированных и первые 2 заблокированных, что даёт пользователю понимание как о достигнутом, так и о потенциальных целях.
Используются CSS-классы с суффиксом
-modernдля стилизации — предполагается современный и адаптивный дизайн.Компонент не содержит состояния (stateless) и полностью управляется через пропсы.
Для иконок достижений и мини-статистики используются эмодзи, что упрощает визуализацию без необходимости подключения внешних иконок.
Взаимодействие с другими частями системы
../gameLogic— предоставляет данные о достижениях.../types— описывает типы данных, в частности структуруPlayerStats.Стили и структура предполагают наличие CSS/SCSS файлов, которые оформляют классы, такие как
profile-container,exp-bar-modern,achievement-card-modernи др.Компонент, скорее всего, используется в рамках вкладок или страниц профиля игрока в основном приложении.
Диаграмма структуры компонента
componentDiagram
ProfileTab <|-- React.FC
ProfileTab : props player: PlayerStats
ProfileTab : props rank: string
ProfileTab : props title: string
ProfileTab --> "getAchievementDefinitions()" : получает список достижений
ProfileTab --> HeroSection : отображение имени, ранга, аватара
ProfileTab --> ExperienceSection : прогресс-бар опыта
ProfileTab --> StatsGrid : мана, победы, серия, бои
ProfileTab --> AdditionalStats : мини-статистика (процент побед, мана, элемент)
ProfileTab --> AchievementsSection : отображение достижений
HeroSection --> Avatar
HeroSection --> PlayerName
HeroSection --> PlayerRank
AchievementsSection --> AchievementCard : для каждого отображаемого достижения
Итог
Файл ProfileTab.tsx реализует важный и визуально насыщенный компонент пользовательского интерфейса для отображения информации о профиле игрока. Он аккуратно структурирован, учитывает данные о прогрессе и статистике, а также динамически подгружает информацию о достижениях из бизнес-логики игры. Такой компонент играет ключевую роль в пользовательском опыте, позволяя игрокам следить за своим прогрессом и мотивироваться для дальнейших игровых достижений.