Files
paper-racing-gpi/racing-tools/README.md
2025-10-20 21:07:28 +05:00

295 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🏁 Racing Tools - Инструменты для "Гонки на бумаге"
Веб-приложения для создания карт и визуализации решений. Работают без сервера, просто откройте в браузере.
## 📦 Что внутри
Два веб-приложения в одном проекте:
- **🏁 Редактор карт** (`editor.html`) - создание и редактирование игровых карт
- **🎬 Визуализатор решений** (`player.html`) - анимация траекторий движения
## 🚀 Быстрый старт
### Вариант 1: Через скрипты
```bash
# Редактор карт
./open-editor.sh
# Визуализатор решений
./open-player.sh
```
### Вариант 2: Напрямую в браузере
```bash
firefox editor.html # Редактор карт
firefox player.html # Визуализатор решений
```
### Вариант 3: Через Python HTTP сервер
```bash
python3 -m http.server 8000
# Откройте http://localhost:8000/editor.html или http://localhost:8000/player.html
```
## 🏁 Редактор карт
### Возможности
- Создание карт размером от 5×5 до 100×100
- Интуитивное рисование мышью (клик или удержание)
- 6 типов ячеек: дорога, камень, снег, лёд, чекпоинт, старт
- Экспорт/импорт в JSON формате
- Изменение размера с сохранением данных
### Типы ячеек
| Код | Тип | Описание | Цвет | Маркер |
|-----|-----|----------|------|--------|
| 0 | Дорога | Обычная дорога | Светло-серый | - |
| 1 | Камень | Препятствие (непроходимо) | Тёмно-серый | - |
| 2 | Снег | Замедление движения | Голубой | - |
| 3 | Лёд | Скользкая поверхность | Светло-голубой | - |
| 4 | Чекпоинт | Контрольная точка | Жёлтый | C |
| 5 | Старт | Точка старта (обязательно!) | Зелёный | S |
### Быстрый старт редактора
1. Откройте `editor.html`
2. Установите размеры (по умолчанию 15×15)
3. Выберите тип ячейки из палитры
4. Рисуйте мышью на карте (обязательно добавьте точку старта - тип 5)
5. Нажмите "Экспорт JSON" - файл скачается автоматически
## 🎬 Визуализатор решений
### Возможности
- Загрузка карты и решения из JSON
- Пошаговая анимация траектории
- Контроль скорости воспроизведения (1x - 10x)
- Ручное управление (шаг вперед/назад)
- Отображение позиции, скорости и ускорения
### Элементы визуализации
- 🔵 **Синяя линия и точки** - пройденная траектория
- 🔴 **Красный круг** - текущая позиция
- ➡️ **Красная стрелка** - вектор скорости (направление и величина)
- **Панель информации** - шаг, позиция (x, y), скорость (vx, vy), ускорение (ax, ay)
### Управление
| Кнопка | Действие |
|--------|----------|
| ▶ Play | Автоматическое воспроизведение |
| ⏸ Pause | Пауза |
| ⏮ Reset | Сброс к началу |
| ⏪ Back | Шаг назад |
| ⏩ Forward | Шаг вперед |
| Слайдер | Скорость 1x - 10x |
### Быстрый старт визуализатора
1. Откройте `player.html`
2. Загрузите карту (📂 Загрузить карту)
3. Загрузите решение (🎬 Загрузить решение)
4. Нажмите ▶ Play и наблюдайте за движением
## 📄 Форматы файлов
### Формат карты (map)
```json
{
"map": [
[5, 0, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 0, 2, 2, 4]
]
}
```
**Структура:**
- `map` - двумерный массив целых чисел (int[][])
- Первая строка = верхняя строка карты
- Первый элемент в строке = левая ячейка
- Значения: 0-5 (типы ячеек)
- **Обязательно наличие точки старта (5)**
### Формат решения (solution)
```json
{
"solution": [
[1, 1],
[1, 0],
[0, 1],
[-1, 0]
]
}
```
**Структура:**
- `solution` - массив векторов ускорения `[[ax, ay], ...]`
- `ax`, `ay` - целые числа (обычно от -1 до 1)
- Каждый элемент = одно действие игрока
### Физика движения
На каждом шаге применяется:
```
velocity += acceleration
position += velocity
```
**Пример:**
```
Шаг 0: pos=(0,0), vel=(0,0)
Шаг 1: acc=(1,1) → vel=(1,1) → pos=(1,1)
Шаг 2: acc=(1,0) → vel=(2,1) → pos=(3,2)
Шаг 3: acc=(0,0) → vel=(2,1) → pos=(5,3)
```
## 🔗 Интеграция с C#
### Чтение карты
```csharp
using System.Text.Json;
var json = File.ReadAllText("racing-map-15x15.json");
var mapData = JsonSerializer.Deserialize<MapData>(json);
int[][] map = mapData.map;
public class MapData
{
public int[][] map { get; set; }
}
```
### Запись решения
```csharp
var solution = new { solution = new int[][] {
new[] { 1, 1 },
new[] { 1, 0 },
new[] { 0, 1 }
}};
var json = JsonSerializer.Serialize(solution, new JsonSerializerOptions
{
WriteIndented = true
});
File.WriteAllText("solution.json", json);
```
## 🎯 Структура проекта
```
racing-tools/
├── editor.html # Страница редактора карт
├── player.html # Страница визуализатора решений
├── styles.css # Общие стили для обоих приложений
├── common.js # Общие функции и константы
├── editor.js # Логика редактора
├── player.js # Логика визуализатора
├── open-editor.sh # Скрипт запуска редактора
├── open-player.sh # Скрипт запуска визуализатора
├── demo-with-start.json # Демо-карта 15×15
├── demo-with-start-solution.json # Демо-решение
└── README.md # Этот файл
```
## 🎨 Технические детали
### Технологии
- **HTML5** - структура страниц
- **CSS3** - современный градиентный дизайн
- **JavaScript (ES6+)** - вся логика на клиенте
- **Canvas API** - отрисовка карт и визуализация
### Особенности
- ✅ Работает без сервера (статические файлы)
- ✅ Валидация данных при импорте
- ✅ Адаптивная сетка интерфейса
- ✅ Общий CSS и JS для уменьшения дублирования
- ✅ Модульная архитектура (common.js для общего кода)
- ✅ Навигация между страницами
- ✅ Визуальная обратная связь (анимации, подсветка)
### Зависимости
- Нет внешних зависимостей
- Чистый Vanilla JavaScript
- Работает в любом современном браузере
## 🧪 Быстрый тест
### Тест редактора
1. Откройте `editor.html`
2. Нарисуйте простую карту с точкой старта
3. Экспортируйте в JSON
4. Импортируйте обратно - данные должны сохраниться
### Тест визуализатора
1. Откройте `player.html`
2. Загрузите `demo-with-start.json`
3. Загрузите `demo-with-start-solution.json`
4. Нажмите ▶ Play и экспериментируйте с кнопками и скоростью
## 📚 Примеры использования
### Создание карты с чекпоинтами
1. Создайте дорогу (тип 0) в виде трассы
2. Добавьте препятствия (тип 1) по краям
3. Разместите чекпоинты (тип 4) вдоль трассы
4. Обозначьте старт (тип 5) в начале
5. Экспортируйте и используйте в решателе
### Визуализация решения A*
1. Запустите C# решатель, получите JSON с решением
2. Откройте визуализатор
3. Загрузите карту и решение
4. Наблюдайте за оптимальным путем
## 🔗 Связанные проекты
- [Основной проект C#](../README.md) - решатель на основе A*
- [Примеры карт](../maps/) - коллекция готовых карт
- [Документация формата](../MAP-FORMAT.md) - подробное описание формата
## 🤝 Советы и трюки
### Редактор
- Используйте Enter в полях размера для быстрого применения
- Удерживайте мышь для быстрого рисования линий
- JSON также выводится в консоль (F12) для быстрого копирования
- При изменении размера существующие данные сохраняются
### Визуализатор
- Используйте пошаговый режим для детального анализа
- Скорость 1x подходит для медленного разбора
- Скорость 10x для быстрого просмотра длинных решений
- Можно загрузить новое решение без перезагрузки карты
## 🐛 Решение проблем
**Карта не загружается?**
- Проверьте формат JSON
- Убедитесь, что все значения от 0 до 5
- Размеры должны быть от 5×5 до 100×100
**Решение не работает?**
- Убедитесь, что на карте есть точка старта (5)
- Проверьте формат: массив массивов [[ax, ay], ...]
- Сначала загрузите карту, потом решение
**Визуализация странная?**
- Возможно, решение выходит за границы карты
- Проверьте корректность векторов ускорений
---
**Версия:** 2.0 (Объединенная)
**Дата:** 2025
**Лицензия:** MIT
**Автор:** Racing Team