🏁 Racing Tools - Инструменты для "Гонки на бумаге"
Веб-приложения для создания карт и визуализации решений. Работают без сервера, просто откройте в браузере.
📦 Что внутри
Два веб-приложения в одном проекте:
- 🏁 Редактор карт (
editor.html) - создание и редактирование игровых карт - 🎬 Визуализатор решений (
player.html) - анимация траекторий движения
🚀 Быстрый старт
Вариант 1: Через скрипты
# Редактор карт
./open-editor.sh
# Визуализатор решений
./open-player.sh
Вариант 2: Напрямую в браузере
firefox editor.html # Редактор карт
firefox player.html # Визуализатор решений
Вариант 3: Через Python HTTP сервер
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 |
Быстрый старт редактора
- Откройте
editor.html - Установите размеры (по умолчанию 15×15)
- Выберите тип ячейки из палитры
- Рисуйте мышью на карте (обязательно добавьте точку старта - тип 5)
- Нажмите "Экспорт JSON" - файл скачается автоматически
🎬 Визуализатор решений
Возможности
- Загрузка карты и решения из JSON
- Пошаговая анимация траектории
- Контроль скорости воспроизведения (1x - 10x)
- Ручное управление (шаг вперед/назад)
- Отображение позиции, скорости и ускорения
Элементы визуализации
- 🔵 Синяя линия и точки - пройденная траектория
- 🔴 Красный круг - текущая позиция
- ➡️ Красная стрелка - вектор скорости (направление и величина)
- Панель информации - шаг, позиция (x, y), скорость (vx, vy), ускорение (ax, ay)
Управление
| Кнопка | Действие |
|---|---|
| ▶ Play | Автоматическое воспроизведение |
| ⏸ Pause | Пауза |
| ⏮ Reset | Сброс к началу |
| ⏪ Back | Шаг назад |
| ⏩ Forward | Шаг вперед |
| Слайдер | Скорость 1x - 10x |
Быстрый старт визуализатора
- Откройте
player.html - Загрузите карту (📂 Загрузить карту)
- Загрузите решение (🎬 Загрузить решение)
- Нажмите ▶ Play и наблюдайте за движением
📄 Форматы файлов
Формат карты (map)
{
"map": [
[5, 0, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 0, 2, 2, 4]
]
}
Структура:
map- двумерный массив целых чисел (int[][])- Первая строка = верхняя строка карты
- Первый элемент в строке = левая ячейка
- Значения: 0-5 (типы ячеек)
- Обязательно наличие точки старта (5)
Формат решения (solution)
{
"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#
Чтение карты
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; }
}
Запись решения
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
- Работает в любом современном браузере
🧪 Быстрый тест
Тест редактора
- Откройте
editor.html - Нарисуйте простую карту с точкой старта
- Экспортируйте в JSON
- Импортируйте обратно - данные должны сохраниться
Тест визуализатора
- Откройте
player.html - Загрузите
demo-with-start.json - Загрузите
demo-with-start-solution.json - Нажмите ▶ Play и экспериментируйте с кнопками и скоростью
📚 Примеры использования
Создание карты с чекпоинтами
- Создайте дорогу (тип 0) в виде трассы
- Добавьте препятствия (тип 1) по краям
- Разместите чекпоинты (тип 4) вдоль трассы
- Обозначьте старт (тип 5) в начале
- Экспортируйте и используйте в решателе
Визуализация решения A*
- Запустите C# решатель, получите JSON с решением
- Откройте визуализатор
- Загрузите карту и решение
- Наблюдайте за оптимальным путем
🔗 Связанные проекты
- Основной проект C# - решатель на основе A*
- Примеры карт - коллекция готовых карт
- Документация формата - подробное описание формата
🤝 Советы и трюки
Редактор
- Используйте Enter в полях размера для быстрого применения
- Удерживайте мышь для быстрого рисования линий
- JSON также выводится в консоль (F12) для быстрого копирования
- При изменении размера существующие данные сохраняются
Визуализатор
- Используйте пошаговый режим для детального анализа
- Скорость 1x подходит для медленного разбора
- Скорость 10x для быстрого просмотра длинных решений
- Можно загрузить новое решение без перезагрузки карты
🐛 Решение проблем
Карта не загружается?
- Проверьте формат JSON
- Убедитесь, что все значения от 0 до 5
- Размеры должны быть от 5×5 до 100×100
Решение не работает?
- Убедитесь, что на карте есть точка старта (5)
- Проверьте формат: массив массивов [[ax, ay], ...]
- Сначала загрузите карту, потом решение
Визуализация странная?
- Возможно, решение выходит за границы карты
- Проверьте корректность векторов ускорений
Версия: 2.0 (Объединенная)
Дата: 2025
Лицензия: MIT
Автор: Racing Team