# Карта мира, координаты и генерация

## Изометрическая сетка

В [C7Engine/C7GameData/GameMap.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/GameMap.cs) хранятся ширина, высота, клетки, континенты, точки старта и независимые флаги замыкания по X и Y. Это смещённая сетка: на чётной строке допустимы чётные X, на нечётной — нечётные. Поэтому число реальных клеток равно `width × height / 2`, а не произведению размеров.

Индекс вычисляется как `Y × width / 2 + (Y чётное ? X / 2 : (X − 1) / 2)`. Соседи строятся по восьми направлениям; выход за незамкнутый край возвращает `Tile.NONE`. Сравнение расстояний и поиск маршрута должны учитывать замыкание карты.

Для нашего массива `tiles[y*w+x]` требуется явное преобразование координат. Простая подстановка размеров из BIQ удвоит ожидаемую плотность и нарушит соседство.

## Генератор по этапам

В [GenerateMap](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/MapGenerator.cs) параметры включают landform, ocean coverage, climate, temperature, age, размер, варварскую активность и seed. Вызовы идут в следующем порядке:

1. Проверка размеров; нечётная ширина или высота уменьшается на единицу.
2. Форма суши и переходы суша → coast → sea → ocean.
3. Холмы и горы.
4. Разбиение суши на регионы биомов и назначение биомов.
5. Растительность и реки.
6. Поймы на подходящих пустынных клетках вдоль рек.
7. Ресурсы и бонусные луга.
8. Позиции игроков и лагеря варваров.
9. Индексы графических вариантов местности.

Используются карты высот и случайные блуждания; разные этапы создают `Random(seed + константа)`. Ресурсы размещаются с учётом типов местности; роскошь обрабатывается отдельно от стратегических и бонусных ресурсов. Это собственный генератор OpenCiv3, не восстановленный алгоритм Firaxis.

## Видимость и знания

[C7Engine/C7GameData/AIData/TileKnowledge.cs](https://github.com/C7-Game/OpenCiv3/blob/c1370e2f63a6042a3c4206f0043543d7da0d5cc5/C7Engine/C7GameData/AIData/TileKnowledge.cs) различает известные клетки, границу разведки и активную видимость. Рельеф влияет на обзор; радар расширяет его по правилу `RadarTileVisibility`. Это полезная модель для fog of war, но код следует дополнительно проверять на владение юнитом и пограничные случаи.

## Для нашей игры

Сохранять seed, параметры и версию генератора; отделить координаты модели от экранной проекции. Валидировать достижимость стартовых позиций, доступ к воде и основные ресурсы, а также замкнутые края. Размеры в интерфейсе показывать в понятных игроку клетках.

Генератор уже вызывает создание лагерей, хотя ниже сохранился старый TODO о лагерях и goody huts. Отсутствие лагерей по одному комментарию было бы ошибочным выводом. Minor tribes остаются отдельной [задачей #934](https://github.com/C7-Game/OpenCiv3/issues/934).

