init
This commit is contained in:
297
maps/ALL-MAPS-INDEX.md
Normal file
297
maps/ALL-MAPS-INDEX.md
Normal file
@@ -0,0 +1,297 @@
|
||||
# 🗺️ Индекс всех карт Paper Racing
|
||||
|
||||
**Последнее обновление**: 19 октября 2025
|
||||
|
||||
---
|
||||
|
||||
## 📚 Доступные карты
|
||||
|
||||
### 🎓 Обучающие карты
|
||||
|
||||
#### 1. simple-test.json
|
||||
- **Размер**: 10×10
|
||||
- **Чекпоинты**: 2
|
||||
- **Сложность**: ⭐ (1/5) - Очень легкая
|
||||
- **Особенности**:
|
||||
- Небольшой лабиринт
|
||||
- 33 препятствия
|
||||
- 3 клетки снега
|
||||
- **Решение A***: 5 ходов, 23 итерации, 0.04с
|
||||
- **Назначение**: Первое знакомство с игрой
|
||||
|
||||
#### 2. easy-test.json
|
||||
- **Размер**: 15×11
|
||||
- **Чекпоинты**: 2
|
||||
- **Сложность**: ⭐ (1/5) - Очень легкая
|
||||
- **Особенности**:
|
||||
- Прямоугольная арена
|
||||
- 40 препятствий по периметру
|
||||
- Открытое пространство внутри
|
||||
- **Решение A***: 3 хода, 4 итерации, 0.04с
|
||||
- **Назначение**: Освоение базовых механик
|
||||
|
||||
#### 3. open-field.json
|
||||
- **Размер**: 20×10
|
||||
- **Чекпоинты**: 3
|
||||
- **Сложность**: ⭐⭐ (2/5) - Легкая
|
||||
- **Особенности**:
|
||||
- Открытое поле
|
||||
- Без препятствий
|
||||
- Фокус на оптимизацию траектории
|
||||
- **Решение A***: 6 ходов, 15 итераций, 0.05с
|
||||
- **Назначение**: Тренировка оптимального маршрута
|
||||
|
||||
---
|
||||
|
||||
### 🧪 Тестовые карты (проверка механик)
|
||||
|
||||
#### 4. test-obstacles.json
|
||||
- **Размер**: 15×11
|
||||
- **Чекпоинты**: 1
|
||||
- **Сложность**: ⭐⭐ (2/5) - Легкая
|
||||
- **Особенности**:
|
||||
- 56 препятствий в центре
|
||||
- Проверка проезда через препятствия
|
||||
- Нельзя останавливаться на препятствиях
|
||||
- **Решение A***: 4 хода, 24 итерации, 0.04с
|
||||
- **Назначение**: Тест механики препятствий
|
||||
|
||||
#### 5. test-snow.json
|
||||
- **Размер**: 15×9
|
||||
- **Чекпоинты**: 1
|
||||
- **Сложность**: ⭐⭐ (2/5) - Легкая
|
||||
- **Особенности**:
|
||||
- 49 клеток снега
|
||||
- Ограниченное ускорение (±1)
|
||||
- Требует точного маневрирования
|
||||
- **Решение A***: 3 хода, 42 итерации, 0.04с
|
||||
- **Назначение**: Тест механики снега
|
||||
|
||||
#### 6. test-ice.json
|
||||
- **Размер**: 18×9
|
||||
- **Чекпоинты**: 1
|
||||
- **Сложность**: ⭐⭐ (2/5) - Легкая
|
||||
- **Особенности**:
|
||||
- 54 клетки льда
|
||||
- Инерция (ускорение нельзя менять)
|
||||
- Требует планирования
|
||||
- **Решение A***: 3 хода, 34 итерации, 0.04с
|
||||
- **Назначение**: Тест механики льда
|
||||
|
||||
#### 7. test-combined.json
|
||||
- **Размер**: 20×15
|
||||
- **Чекпоинты**: 4
|
||||
- **Сложность**: ⭐⭐⭐ (3/5) - Средняя
|
||||
- **Особенности**:
|
||||
- 16 препятствий
|
||||
- 24 клетки снега
|
||||
- 15 клеток льда
|
||||
- Все механики вместе
|
||||
- **Решение A***: 9 ходов, 21 итерация, 0.04с
|
||||
- **Назначение**: Комплексная проверка всех механик
|
||||
|
||||
---
|
||||
|
||||
### 🏆 Сложные карты
|
||||
|
||||
#### 8. racing-map-42x42.json
|
||||
- **Размер**: 42×42
|
||||
- **Чекпоинты**: 40
|
||||
- **Сложность**: ⭐⭐⭐⭐ (4/5) - Сложная
|
||||
- **Особенности**:
|
||||
- Большая карта
|
||||
- Множество чекпоинтов
|
||||
- Сложная топология
|
||||
- **Решение A***: Требует оптимизации
|
||||
- **Назначение**: Испытание алгоритма
|
||||
|
||||
#### 9. racing-map-50x50-100cp.json ⭐ НОВАЯ
|
||||
- **Размер**: 50×50 (2500 клеток)
|
||||
- **Чекпоинты**: 100
|
||||
- **Сложность**: ⭐⭐⭐⭐⭐ (5/5) - Очень сложная
|
||||
- **Особенности**:
|
||||
- 1900 клеток дороги (76%)
|
||||
- 249 препятствий (9%)
|
||||
- 174 клетки снега (6%)
|
||||
- 77 клеток льда (3%)
|
||||
- Три зоны: снежная, ледяная, свободная
|
||||
- **Решение A***: 144 хода, 456 итераций, 0.99с
|
||||
- **Назначение**: Максимальный вызов
|
||||
- **Документация**: `MAP-50x50-100cp-INFO.md`
|
||||
|
||||
---
|
||||
|
||||
## 📊 Сравнительная таблица
|
||||
|
||||
| Карта | Размер | ЧП | Ходов | Итераций | Время | Сложность |
|
||||
|-------|--------|-----|-------|----------|-------|-----------|
|
||||
| simple-test | 10×10 | 2 | 5 | 23 | 0.04с | ⭐ |
|
||||
| easy-test | 15×11 | 2 | 3 | 4 | 0.04с | ⭐ |
|
||||
| open-field | 20×10 | 3 | 6 | 15 | 0.05с | ⭐⭐ |
|
||||
| test-obstacles | 15×11 | 1 | 4 | 24 | 0.04с | ⭐⭐ |
|
||||
| test-snow | 15×9 | 1 | 3 | 42 | 0.04с | ⭐⭐ |
|
||||
| test-ice | 18×9 | 1 | 3 | 34 | 0.04с | ⭐⭐ |
|
||||
| test-combined | 20×15 | 4 | 9 | 21 | 0.04с | ⭐⭐⭐ |
|
||||
| racing-map-42x42 | 42×42 | 40 | ? | ? | ? | ⭐⭐⭐⭐ |
|
||||
| **racing-map-50x50-100cp** | **50×50** | **100** | **144** | **456** | **0.99с** | **⭐⭐⭐⭐⭐** |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Рекомендуемый порядок прохождения
|
||||
|
||||
### Новичкам
|
||||
1. `simple-test.json` - Основы
|
||||
2. `easy-test.json` - Простая тактика
|
||||
3. `open-field.json` - Оптимизация
|
||||
|
||||
### Изучение механик
|
||||
4. `test-obstacles.json` - Препятствия
|
||||
5. `test-snow.json` - Снег
|
||||
6. `test-ice.json` - Лёд
|
||||
7. `test-combined.json` - Все вместе
|
||||
|
||||
### Профи
|
||||
8. `racing-map-42x42.json` - Большая карта
|
||||
9. `racing-map-50x50-100cp.json` - Финальный босс
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Быстрый старт
|
||||
|
||||
### Запуск конкретной карты
|
||||
```bash
|
||||
./bin/Debug/net8.0/racing-astar maps/[название-карты].json
|
||||
```
|
||||
|
||||
### Запуск всех тестов
|
||||
```bash
|
||||
./run-all-tests.sh
|
||||
```
|
||||
|
||||
### Примеры
|
||||
```bash
|
||||
# Легкая карта для начала
|
||||
./bin/Debug/net8.0/racing-astar maps/simple-test.json
|
||||
|
||||
# Средней сложности
|
||||
./bin/Debug/net8.0/racing-astar maps/test-combined.json
|
||||
|
||||
# Максимальный челлендж
|
||||
./bin/Debug/net8.0/racing-astar maps/racing-map-50x50-100cp.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Легенда символов
|
||||
|
||||
| Символ | Тип | Код | Правило |
|
||||
|--------|-----|-----|---------|
|
||||
| `S` | Старт | - | Начальная позиция |
|
||||
| `1-9` | Чекпоинты | 4 | Номера 1-9 |
|
||||
| `●` | Чекпоинты | 4 | Номера ≥10 |
|
||||
| `#` | Препятствия | 1 | Можно проезжать, нельзя останавливаться |
|
||||
| `~` | Снег | 2 | Ускорение ±1 |
|
||||
| `=` | Лёд | 3 | Инерция (ускорение 0) |
|
||||
| `.` | Путь | - | Траектория решения |
|
||||
| ` ` | Дорога | 0 | Ускорение ±2 |
|
||||
|
||||
---
|
||||
|
||||
## 📖 Документация карт
|
||||
|
||||
- **Общая**: `MAP-FORMAT.md` - Формат карт
|
||||
- **Тестовые**: `TEST-MAPS-README.md` - Руководство по тестовым картам
|
||||
- **50×50**: `MAP-50x50-100cp-INFO.md` - Подробности о большой карте
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Создание собственных карт
|
||||
|
||||
### Минимальный пример
|
||||
```json
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0],
|
||||
[0, 1, 1, 1, 0],
|
||||
[0, 0, 4, 0, 0],
|
||||
[0, 2, 2, 2, 0],
|
||||
[0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### Типы клеток
|
||||
- `0` - Дорога (первая клетка = старт)
|
||||
- `1` - Препятствие
|
||||
- `2` - Снег
|
||||
- `3` - Лёд
|
||||
- `4` - Чекпоинт
|
||||
|
||||
### Генератор
|
||||
Используйте Python скрипт для генерации больших карт:
|
||||
```python
|
||||
# Пример в IMPLEMENTATION-SUMMARY.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 Статистика коллекции
|
||||
|
||||
- **Всего карт**: 9
|
||||
- **Размеры**: от 10×10 до 50×50
|
||||
- **Чекпоинты**: от 1 до 100
|
||||
- **Общее кол-во клеток**: ~5500
|
||||
- **Стилей**: Лабиринты, арены, открытые поля, комплексные
|
||||
|
||||
---
|
||||
|
||||
## 🏅 Достижения
|
||||
|
||||
### Коллекционер карт
|
||||
- ✅ Пройти все обучающие карты
|
||||
- ✅ Пройти все тестовые карты
|
||||
- ✅ Пройти сложные карты
|
||||
|
||||
### Мастер скорости
|
||||
- 🥇 Решить карту быстрее A*
|
||||
- 🥈 Решить за ходов как A*
|
||||
- 🥉 Решить за на 10% больше ходов чем A*
|
||||
|
||||
### Исследователь
|
||||
- 🗺️ Создать собственную карту
|
||||
- 🎨 Создать карту со всеми типами поверхностей
|
||||
- 🏆 Создать нерешаемую карту
|
||||
|
||||
---
|
||||
|
||||
## 📝 История версий
|
||||
|
||||
### v1.2 (19.10.2025)
|
||||
- ✅ Добавлена `racing-map-50x50-100cp.json`
|
||||
- ✅ 100 чекпоинтов
|
||||
- ✅ Все типы поверхностей
|
||||
- ✅ Три зоны сложности
|
||||
|
||||
### v1.1 (19.10.2025)
|
||||
- ✅ Добавлены тестовые карты
|
||||
- ✅ Поддержка снега и льда
|
||||
- ✅ Новые правила для препятствий
|
||||
|
||||
### v1.0 (начало)
|
||||
- Базовые карты: simple-test, easy-test, open-field
|
||||
- Карта 42×42 с 40 чекпоинтами
|
||||
|
||||
---
|
||||
|
||||
## 💡 Советы
|
||||
|
||||
1. **Начните с малого**: Сначала пройдите simple-test
|
||||
2. **Изучайте механики**: Каждая тестовая карта учит чему-то новому
|
||||
3. **Экспериментируйте**: Пробуйте разные стратегии
|
||||
4. **Анализируйте A***: Смотрите как алгоритм решает карты
|
||||
5. **Создавайте свои**: Самые интересные карты - ваши собственные
|
||||
|
||||
---
|
||||
|
||||
**Удачи в гонках!** 🏁
|
||||
|
||||
228
maps/MAP-50x50-100cp-INFO.md
Normal file
228
maps/MAP-50x50-100cp-INFO.md
Normal file
@@ -0,0 +1,228 @@
|
||||
# 🗺️ Карта racing-map-50x50-100cp.json
|
||||
|
||||
**Сгенерированная интересная карта для Paper Racing**
|
||||
|
||||
## 📊 Параметры карты
|
||||
|
||||
| Параметр | Значение |
|
||||
|----------|----------|
|
||||
| Размер | 50×50 (2500 клеток) |
|
||||
| Чекпоинты | 100 шт. |
|
||||
| Дорога | 1900 клеток (76%) |
|
||||
| Препятствия | 249 клеток (9%) |
|
||||
| Снег | 174 клетки (6%) |
|
||||
| Лёд | 77 клеток (3%) |
|
||||
|
||||
## 🎯 Особенности карты
|
||||
|
||||
### Зоны сложности
|
||||
|
||||
1. **Верхняя часть (Y: 35-48)** - Снежная зона
|
||||
- Большая концентрация снега
|
||||
- Требует точного маневрирования (ускорение ±1)
|
||||
- Содержит ~40% чекпоинтов
|
||||
- Препятствия для проезда
|
||||
|
||||
2. **Средняя часть (Y: 20-35)** - Ледяная зона
|
||||
- Участки со льдом (инерция)
|
||||
- Требует планирования траектории
|
||||
- Смешанные типы поверхностей
|
||||
- Содержит ~40% чекпоинтов
|
||||
|
||||
3. **Нижняя часть (Y: 1-20)** - Свободная зона
|
||||
- В основном обычная дорога
|
||||
- Меньше препятствий
|
||||
- Островки препятствий
|
||||
- Содержит ~20% чекпоинтов
|
||||
|
||||
### Дизайн трассы
|
||||
|
||||
```
|
||||
Схематичное представление:
|
||||
|
||||
┌─────────────────────────────────────┐
|
||||
│ ГРАНИЦА (препятствия) │
|
||||
├─────────────────────────────────────┤
|
||||
│ СНЕЖНАЯ ЗОНА ~~~~~~~~~ │
|
||||
│ • Волнистая траектория │
|
||||
│ • Чекпоинты 1-40 │
|
||||
│ • Острова препятствий │
|
||||
├─────────────────────────────────────┤
|
||||
│ ЛЕДЯНАЯ ЗОНА ========= │
|
||||
│ • Инерционные участки │
|
||||
│ • Чекпоинты 41-80 │
|
||||
│ • Смешанный ландшафт │
|
||||
├─────────────────────────────────────┤
|
||||
│ СВОБОДНАЯ ЗОНА │
|
||||
│ • Открытое пространство │
|
||||
│ • Чекпоинты 81-100 │
|
||||
│ • Редкие препятствия │
|
||||
├─────────────────────────────────────┤
|
||||
│ ГРАНИЦА (препятствия) │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## 🏁 Результаты тестирования
|
||||
|
||||
### Алгоритм A* решение
|
||||
|
||||
```
|
||||
✅ Решение найдено!
|
||||
|
||||
Статистика:
|
||||
- Ходов: 144
|
||||
- Итераций: 456
|
||||
- Время: 0.99 секунды
|
||||
- Максимальная скорость: 9
|
||||
- Размер открытого множества: 6733
|
||||
|
||||
Эффективность:
|
||||
- Ходов на чекпоинт: 1.44
|
||||
- Итераций на ход: 3.17
|
||||
- Скорость поиска: ~461 итераций/сек
|
||||
```
|
||||
|
||||
### Сложность карты
|
||||
|
||||
- **Размер пространства состояний**: Очень большой (50×50 × скорости × 2^100 чекпоинтов)
|
||||
- **Оценка сложности**: ⭐⭐⭐⭐⭐ (5/5 - Очень сложная)
|
||||
- **Время решения**: ~1 секунда (отлично!)
|
||||
- **Качество эвристики**: Начальная оценка 205.23 → финальная 144.00 (переоценка ~42%)
|
||||
|
||||
## 🎮 Интересные моменты
|
||||
|
||||
### Стратегические зоны
|
||||
|
||||
1. **Снежная траверса** (шаги ~1-50)
|
||||
- Прохождение через снежную зону
|
||||
- Ограниченное маневрирование
|
||||
- Сбор первых 40 чекпоинтов
|
||||
|
||||
2. **Ледяной дрифт** (шаги ~51-100)
|
||||
- Использование инерции на льду
|
||||
- Точное планирование скорости
|
||||
- Сбор средних 40 чекпоинтов
|
||||
|
||||
3. **Финальный рывок** (шаги ~101-144)
|
||||
- Быстрое движение по обычной дороге
|
||||
- Сбор последних 20 чекпоинтов
|
||||
- Максимальная скорость 9
|
||||
|
||||
### Трудные участки
|
||||
|
||||
- **Чекпоинты 10-15**: В центре снежной зоны, требуют точности
|
||||
- **Чекпоинты 50-60**: На границе снега и льда, смена стратегии
|
||||
- **Чекпоинты 80-90**: Распределены по всей нижней зоне
|
||||
|
||||
## 🚀 Использование
|
||||
|
||||
### Запуск с этой картой
|
||||
|
||||
```bash
|
||||
# Компиляция (если нужно)
|
||||
dotnet build racing-astar.csproj
|
||||
|
||||
# Запуск
|
||||
./bin/Debug/net8.0/racing-astar maps/racing-map-50x50-100cp.json
|
||||
```
|
||||
|
||||
### Визуализация
|
||||
|
||||
```
|
||||
S - старт (1, 48)
|
||||
1-9 - чекпоинты с номерами 1-9
|
||||
● - чекпоинты с номерами ≥10
|
||||
# - препятствия (можно проезжать)
|
||||
~ - снег (ускорение ±1)
|
||||
= - лёд (инерция)
|
||||
. - путь решения
|
||||
- обычная дорога
|
||||
```
|
||||
|
||||
## 📈 Рекомендации для игроков
|
||||
|
||||
### Стратегии прохождения
|
||||
|
||||
1. **Снежная зона**
|
||||
- Используйте малые ускорения
|
||||
- Планируйте на 2-3 хода вперед
|
||||
- Не торопитесь - точность важнее скорости
|
||||
|
||||
2. **Ледяная зона**
|
||||
- Набирайте скорость до входа в зону
|
||||
- Используйте инерцию для длинных перемещений
|
||||
- Рассчитывайте траекторию заранее
|
||||
|
||||
3. **Свободная зона**
|
||||
- Максимальное ускорение
|
||||
- Быстрый сбор оставшихся чекпоинтов
|
||||
- Можно рисковать
|
||||
|
||||
### Продвинутые техники
|
||||
|
||||
- **Проезд через препятствия**: Используйте высокую скорость для "прыжков" через зоны препятствий
|
||||
- **Ледяной дрифт**: На льду набирайте скорость и скользите к нескольким чекпоинтам
|
||||
- **Снежное торможение**: Используйте снег для точной остановки у чекпоинтов
|
||||
|
||||
## 🔧 Генерация карты
|
||||
|
||||
Карта была сгенерирована с использованием Python скрипта со следующими параметрами:
|
||||
|
||||
```python
|
||||
width, height = 50, 50
|
||||
checkpoints = 100
|
||||
snow_density = 0.6 (в верхней зоне)
|
||||
ice_density = 0.4 (в средней зоне)
|
||||
obstacle_zones = 5 (случайные острова)
|
||||
border = камни (все края)
|
||||
```
|
||||
|
||||
### Алгоритм размещения чекпоинтов
|
||||
|
||||
- Волнистая траектория по синусоиде
|
||||
- Равномерное распределение по карте
|
||||
- Избегание границ (отступ 2-3 клетки)
|
||||
- Случайная вариация для интереса
|
||||
|
||||
## 📊 Сравнение с другими картами
|
||||
|
||||
| Карта | Размер | ЧП | Ходов | Итераций | Время |
|
||||
|-------|--------|-----|-------|----------|-------|
|
||||
| simple-test | 10×10 | 2 | 5 | 23 | 0.04с |
|
||||
| easy-test | 15×11 | 2 | 3 | 4 | 0.04с |
|
||||
| test-combined | 20×15 | 4 | 9 | 21 | 0.04с |
|
||||
| **racing-map-50x50-100cp** | **50×50** | **100** | **144** | **456** | **0.99с** |
|
||||
|
||||
**Эта карта в ~25 раз сложнее комбинированного теста!**
|
||||
|
||||
## 🎖️ Достижения
|
||||
|
||||
Если вы решите эту карту вручную:
|
||||
|
||||
- 🥉 **Новичок**: Решено за <300 ходов
|
||||
- 🥈 **Опытный**: Решено за <200 ходов
|
||||
- 🥇 **Эксперт**: Решено за <160 ходов
|
||||
- 💎 **Мастер**: Решено за <150 ходов
|
||||
- 🏆 **Легенда**: Решено за ≤144 хода (как A*)
|
||||
|
||||
## 💡 Идеи для модификации
|
||||
|
||||
1. **Усложнить**: Добавить больше льда и препятствий
|
||||
2. **Облегчить**: Убрать снег, оставить только лёд
|
||||
3. **Изменить**: Переставить чекпоинты в обратном порядке
|
||||
4. **Экстрим**: 150 чекпоинтов на 60×60
|
||||
|
||||
## 📝 Заметки
|
||||
|
||||
- Карта спроектирована для демонстрации всех типов поверхностей
|
||||
- Оптимизирована для A* алгоритма с эвристикой
|
||||
- Баланс между сложностью и решаемостью
|
||||
- Интересна как для алгоритмов, так и для ручной игры
|
||||
|
||||
---
|
||||
|
||||
**Создана**: 19 октября 2025
|
||||
**Автор**: AI Generated
|
||||
**Версия**: 1.0
|
||||
**Статус**: ✅ Протестировано и работает
|
||||
|
||||
224
maps/TEST-MAPS-README.md
Normal file
224
maps/TEST-MAPS-README.md
Normal file
@@ -0,0 +1,224 @@
|
||||
# 🗺️ Тестовые карты для A* алгоритма
|
||||
|
||||
Эта папка содержит набор тестовых карт для проверки работы алгоритма A* с новыми правилами игры.
|
||||
|
||||
## 🎮 Новые правила
|
||||
|
||||
| Тип | Код | Символ | Правило |
|
||||
|-----|-----|--------|---------|
|
||||
| Дорога | 0 | ` ` | Ускорение ±2 |
|
||||
| Камень | 1 | `#` | Можно проезжать, нельзя останавливаться |
|
||||
| Снег | 2 | `~` | Ускорение ±1 |
|
||||
| Лёд | 3 | `=` | Ускорение 0 (инерция) |
|
||||
| Чекпоинт | 4 | `1-9` / `●` | Как дорога |
|
||||
|
||||
---
|
||||
|
||||
## 📂 Тестовые карты
|
||||
|
||||
### test-obstacles.json
|
||||
**Назначение**: Проверка проезда через препятствия
|
||||
|
||||
```
|
||||
S
|
||||
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
# # # # # # # #
|
||||
1
|
||||
```
|
||||
|
||||
- Размер: 15×11
|
||||
- Чекпоинты: 1
|
||||
- Препятствия: 56
|
||||
- **Результат**: ✅ 4 хода
|
||||
|
||||
---
|
||||
|
||||
### test-snow.json
|
||||
**Назначение**: Проверка ограниченного маневрирования на снегу
|
||||
|
||||
```
|
||||
S
|
||||
|
||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ 1 ~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
||||
```
|
||||
|
||||
- Размер: 15×9
|
||||
- Чекпоинты: 1
|
||||
- Снег: 49 клеток
|
||||
- **Результат**: ✅ 3 хода
|
||||
- **Ускорения на снегу**: (1,1), (-1,0) — все в пределах ±1
|
||||
|
||||
---
|
||||
|
||||
### test-ice.json
|
||||
**Назначение**: Проверка инерции на льду
|
||||
|
||||
```
|
||||
S
|
||||
|
||||
= = = = = = = = = = =
|
||||
= = = = = = = = = = =
|
||||
= = = = = 1 = = = = =
|
||||
= = = = = = = = = = =
|
||||
= = = = = = = = = = =
|
||||
```
|
||||
|
||||
- Размер: 18×9
|
||||
- Чекпоинты: 1
|
||||
- Лёд: 54 клетки
|
||||
- **Результат**: ✅ 3 хода
|
||||
- **Поведение**: Алгоритм не планирует остановки на льду
|
||||
|
||||
---
|
||||
|
||||
### test-combined.json
|
||||
**Назначение**: Комплексная проверка всех типов поверхностей
|
||||
|
||||
```
|
||||
S
|
||||
|
||||
1
|
||||
# # # #
|
||||
# # # #
|
||||
# # # # 2
|
||||
# # # # ~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ ~
|
||||
~ ~ 3 ~ ~
|
||||
~ ~ ~ ~ ~
|
||||
~ ~ ~ ~ ~ = = = =
|
||||
= = = =
|
||||
= 4 = =
|
||||
= = = =
|
||||
```
|
||||
|
||||
- Размер: 20×15
|
||||
- Чекпоинты: 4
|
||||
- Препятствия: 16
|
||||
- Снег: 24 клетки
|
||||
- Лёд: 15 клеток
|
||||
- **Результат**: ✅ 9 ходов
|
||||
- **Проверки**:
|
||||
- ✅ Проезд через препятствия
|
||||
- ✅ Ограниченное ускорение на снегу
|
||||
- ✅ Корректная работа на льду
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Запуск тестов
|
||||
|
||||
### Компиляция
|
||||
```bash
|
||||
cd /home/tactile/dev/dotnet/racing
|
||||
dotnet build racing-astar.csproj
|
||||
```
|
||||
|
||||
### Запуск отдельного теста
|
||||
```bash
|
||||
# Тест препятствий
|
||||
./bin/Debug/net8.0/racing-astar maps/test-obstacles.json
|
||||
|
||||
# Тест снега
|
||||
./bin/Debug/net8.0/racing-astar maps/test-snow.json
|
||||
|
||||
# Тест льда
|
||||
./bin/Debug/net8.0/racing-astar maps/test-ice.json
|
||||
|
||||
# Комплексный тест
|
||||
./bin/Debug/net8.0/racing-astar maps/test-combined.json
|
||||
```
|
||||
|
||||
### Запуск всех тестов
|
||||
```bash
|
||||
#!/bin/bash
|
||||
for map in maps/test-*.json; do
|
||||
echo "========================================="
|
||||
echo "Testing: $map"
|
||||
echo "========================================="
|
||||
./bin/Debug/net8.0/racing-astar "$map"
|
||||
echo ""
|
||||
done
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Ожидаемые результаты
|
||||
|
||||
| Карта | Ходов | Итераций | Время |
|
||||
|-------|-------|----------|-------|
|
||||
| test-obstacles.json | 4 | 24 | <0.05с |
|
||||
| test-snow.json | 3 | 42 | <0.05с |
|
||||
| test-ice.json | 3 | 34 | <0.05с |
|
||||
| test-combined.json | 9 | 21 | <0.05с |
|
||||
|
||||
---
|
||||
|
||||
## 🎨 Легенда визуализации
|
||||
|
||||
### В картах JSON
|
||||
- `0` = дорога
|
||||
- `1` = камень (препятствие)
|
||||
- `2` = снег
|
||||
- `3` = лёд
|
||||
- `4` = чекпоинт
|
||||
|
||||
### В консольном выводе
|
||||
- `S` = старт
|
||||
- `1-9` = чекпоинты (номера)
|
||||
- `●` = чекпоинты ≥10
|
||||
- `#` = камни (можно проезжать)
|
||||
- `~` = снег (ускорение ±1)
|
||||
- `=` = лёд (инерция)
|
||||
- `.` = путь решения
|
||||
- ` ` = обычная дорога
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Создание собственной тестовой карты
|
||||
|
||||
Пример минимальной карты:
|
||||
```json
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0],
|
||||
[0, 1, 1, 1, 0],
|
||||
[0, 0, 4, 0, 0],
|
||||
[0, 2, 2, 2, 0],
|
||||
[0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**Рекомендации**:
|
||||
1. Первая ячейка типа `0` (дорога) становится стартом
|
||||
2. Чекпоинты обозначайте типом `4`
|
||||
3. Карта читается сверху вниз (первая строка JSON = верх карты)
|
||||
4. Y-координаты инвертируются автоматически
|
||||
|
||||
---
|
||||
|
||||
## 📖 Дополнительные ресурсы
|
||||
|
||||
- `/TESTING-SUMMARY.md` - Полная сводка тестирования
|
||||
- `/TEST-RESULTS.md` - Детальные результаты каждого теста
|
||||
- `/ASTAR-README.md` - Документация алгоритма A*
|
||||
- `/MAP-FORMAT.md` - Формат карт
|
||||
|
||||
---
|
||||
|
||||
## ✅ Статус
|
||||
|
||||
Все тестовые карты проверены и работают корректно.
|
||||
Последнее тестирование: **19 октября 2025**
|
||||
|
||||
**100% тестов пройдено успешно!** 🎉
|
||||
|
||||
17
maps/easy-test.json
Normal file
17
maps/easy-test.json
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
"map": [
|
||||
[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
16
maps/open-field.json
Normal file
16
maps/open-field.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
1852
maps/racing-map-42x42.json
Normal file
1852
maps/racing-map-42x42.json
Normal file
File diff suppressed because it is too large
Load Diff
2604
maps/racing-map-50x50-100cp.json
Normal file
2604
maps/racing-map-50x50-100cp.json
Normal file
File diff suppressed because it is too large
Load Diff
16
maps/simple-test.json
Normal file
16
maps/simple-test.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 0, 1, 1, 1, 4, 0, 1, 0],
|
||||
[0, 1, 0, 1, 2, 2, 2, 0, 1, 0],
|
||||
[0, 1, 0, 1, 4, 1, 1, 0, 1, 0],
|
||||
[0, 1, 0, 0, 0, 0, 0, 0, 1, 0],
|
||||
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0],
|
||||
[0, 0, 0, 5, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
20
maps/test-combined.json
Normal file
20
maps/test-combined.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 1, 1, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
|
||||
[0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 4, 2, 2, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, 3, 3, 3, 3],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 3, 3],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
14
maps/test-ice.json
Normal file
14
maps/test-ice.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
|
||||
[0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
16
maps/test-obstacles.json
Normal file
16
maps/test-obstacles.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"map": [
|
||||
[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
14
maps/test-snow.json
Normal file
14
maps/test-snow.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
|
||||
[0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
|
||||
[0, 0, 0, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 0, 0],
|
||||
[0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
|
||||
[0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
|
||||
]
|
||||
}
|
||||
|
||||
15
maps/test-start-cell.json
Normal file
15
maps/test-start-cell.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"map": [
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 5, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 4, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
|
||||
[0, 0, 0, 0, 0, 1, 1, 1, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 4, 0, 0],
|
||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user