BattleResultPage.tsx

Обзор

BattleResultPage.tsx — это React-компонент, предназначенный для отображения итогов завершившейся битвы в игре с элементалями. Компонент визуализирует подробную статистику боя, включая исход (победа, поражение или ничья), изменение ресурсов игрока (например, мана), серию побед, а также детальный боевой лог с выбранными стихиями и использованными элементалями.

Основная задача компонента — предоставить игроку наглядную и понятную обратную связь о результатах поединка и сформировать интерфейс с итоговыми данными и возможностью начать новый бой.


Описание компонента

BattleResultPage

Назначение

Отображает детальный результат боя, используя данные из состояния игры (gameState), и предоставляет кнопку для возврата к меню или началу нового боя.

Параметры (Props)

Название

Тип

Описание

gameState

GameState

Текущее состояние игры, содержащее информацию о игроке, оппоненте и логе боя.

onReturnToMenu

() => void

Функция обратного вызова, вызываемая при нажатии кнопки "Battle Again" для возврата в меню.

Возвращаемое значение

React-элемент, визуализирующий страницу с результатами боя. Если данные о логе боя или текущем оппоненте отсутствуют, компонент ничего не рендерит (null).

Использование

<BattleResultPage
  gameState={currentGameState}
  onReturnToMenu={() => setView('menu')}
/>

Важные детали реализации


Структура компонента и ключевые части

Основные части интерфейса:

  1. Заголовок результата — отображает итог боя (Победа, Поражение или Ничья) с подходящей иконкой.

  2. Статистика боя — изменение маны, новый итоговый баланс и серия побед.

  3. Кнопка повторного боя — для возврата в меню или начала нового поединка.

  4. Боевый журнал — подробное разбиение по:

    • Элементной битве (стихии игрока и оппонента).

    • Использованным элементалям с их уровнем защиты.

    • Финальным вычислениям изменений ресурсов с учётом ставок и защиты.


Взаимодействие с другими частями системы

Таким образом, BattleResultPage — завершающий этап отображения боевого процесса, предоставляющий детальную обратную связь игроку.


Пример ключевого фрагмента кода

const isVictory = battleLog.winner === 'player';
const isDefeat = battleLog.winner === 'opponent';

return (
  <div className='results-title'>
    {isVictory ? 'Victory!' : isDefeat ? 'Defeat!' : 'Draw!'}
  </div>
);

Визуальное представление структуры компонента

classDiagram
    class BattleResultPage {
        +gameState: GameState
        +onReturnToMenu(): void
        +render()
    }
    BattleResultPage o-- GameState : gameState
    class GameState {
        +player
        +currentOpponent
        +battleLog
    }
    class BattleLog {
        +winner: 'player'|'opponent'|'draw'
        +playerElement: string
        +opponentElement: string
        +playerElemental: string|null
        +opponentElemental: string|null
        +baseWager: number
        +finalChange: number
        +protectionSaved: number
    }
    BattleResultPage ..> getElementalData : uses
    BattleResultPage ..> ELEMENTS : uses

Итог

Компонент BattleResultPage.tsx является важным элементом интерфейса игры, предоставляя игроку подробный и наглядный отчет о результатах боя. Он использует данные из бизнес-логики и состояния игры, интегрируясь с остальными компонентами поединка, обеспечивая удобный и информативный пользовательский опыт.


Диаграмма процесса отображения результатов

flowchart TD
    BattleEnd[Завершение боя]
    FetchData[Получение данных боя из gameState]
    CheckData{Данные боя доступны?}
    RenderResult[Отрисовка результата боя]
    ShowStats[Отображение статистики и ресурсов]
    ShowBattleLog[Отображение детального лога боя]
    UserAction[Действия пользователя]
    ReturnToMenu[Возврат в меню/выбор боя]

    BattleEnd --> FetchData --> CheckData
    CheckData -->|Да| RenderResult
    CheckData -->|Нет| UserAction
    RenderResult --> ShowStats --> ShowBattleLog --> UserAction
    UserAction --> ReturnToMenu