page.tsx
Обзор
Файл page.tsx содержит React-компонент страницы главного экрана веб-приложения игры на основе Web3 с названием "Mana Game". Его основная задача — отобразить приветственный интерфейс для неавторизованных пользователей и основной игровой интерфейс для подключенных игроков. Компонент использует пользовательский хук useGame для получения информации о состоянии подключения и данных игрока, а также включает несколько дочерних компонентов, отвечающих за отображение статистики игрока, действий в игре, недавней активности и объяснения технологии газлесс транзакций.
Подробное описание компонентов и функций
Компонент HomePage
export default function HomePage()
Назначение
Главный React-компонент страницы, который рендерит разные интерфейсы в зависимости от состояния подключения пользователя к игре.
Подробности работы
Использует хук
useGame()из провайдераGameProviderдля получения:player— объект с данными текущего игрока.isConnected— булево значение, указывающее, подключен ли игрок к игре.
Если игрок не подключен (
!isConnected):Отображается приветственный экран с заголовком, описанием и кнопкой перехода на демонстрационную страницу (
/demo).Включается компонент
<GaslessExplanation />, объясняющий преимущества газлесс транзакций.
Если игрок подключен:
Отображается персонализированное приветствие с именем игрока (если имя отсутствует — выводится "Player").
Показывается подтекст "Ready for your next adventure?"
Размечается сетка из 3 колонок (в мобильной — 1 колонка), где:
В первых двух колонках располагаются компоненты
<PlayerStats />и<GameActions />.В третьей колонке отображается
<RecentActivity />.
Возвращаемое значение
JSX-элементы для рендеринга страницы.
Пример использования
import HomePage from './page';
function App() {
return <HomePage />;
}
Используемые компоненты и их назначение
useGame— кастомный хук из./providers/GameProvider, обеспечивает доступ к состоянию игры и игрока.PlayerStats— компонент, отображающий статистику игрока (например, уровень, очки, ресурсы).GameActions— компонент с возможными действиями игрока в игре (например, начать миссию, улучшить экипировку).RecentActivity— показывает последние события или действия игрока.GaslessExplanation— компонент с объяснением технологии газлесс транзакций, которая обеспечивает удобство Web3 игр без необходимости платить газ за каждое действие.
Важные детали реализации
Используется условный рендеринг на основе состояния подключения
isConnected.Кнопка запуска демонстрации реализована через программное изменение
window.location.href.Стилизация выполнена с помощью Tailwind CSS классов (
flex,grid,text-5xl,mana-glowи др.), обеспечивая адаптивность и современный дизайн.Файл помечен директивой
'use client';, что указывает на клиентский рендеринг компонента в Next.js 13+.
Взаимодействие с другими частями системы
Провайдер
GameProviderреализует логику подключения и хранит состояние игры, которое используется вHomePage.Дочерние компоненты (
PlayerStats,GameActions,RecentActivity,GaslessExplanation) отвечают за отображение отдельных блоков интерфейса и, вероятно, реализованы в отдельных файлах внутри папкиcomponents.Переход по кнопке "Start Playing Now" ведет на
/demo— возможно, это отдельная страница или режим игры для новых пользователей.Использование газлесс транзакций намекает на интеграцию с Web3-сервисами, позволяющими игрокам взаимодействовать с блокчейном без необходимости прямой оплаты газа.
Визуальное представление структуры компонента
componentDiagram
direction TB
HomePage --> useGame
HomePage --> PlayerStats
HomePage --> GameActions
HomePage --> RecentActivity
HomePage --> GaslessExplanation
HomePage : - player
HomePage : - isConnected
HomePage : + render()
Итог
Файл page.tsx — это точка входа для пользовательского интерфейса главной страницы Web3-игры "Mana Game". Он динамически отображает содержимое в зависимости от подключения игрока, предоставляя интуитивный и информативный интерфейс как для новых, так и для возвращающихся пользователей. Использование современных React-подходов и модульной архитектуры компонентов обеспечивает простоту поддержки и расширяемость приложения.