geo-step-game/data.js
2025-11-02 16:42:25 +03:00

679 lines
45 KiB
JavaScript
Raw Permalink 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.

// Данные о локациях на карте мира
// Координаты рассчитаны для Equirectangular проекции
// Формула: x = (lon + 180) * (width / 360), y = (90 - lat) * (height / 180)
// Для canvas 1100x600
const locations = [
// Европа
{ id: 'london', name: 'Лондон', type: 'city', lat: 51.5074, lon: -0.1278, country: 'Великобритания', icon: '🏙️', continent: 'Европа' },
{ id: 'paris', name: 'Париж', type: 'city', lat: 48.8566, lon: 2.3522, country: 'Франция', icon: '🏙️', continent: 'Европа' },
{ id: 'rotterdam', name: 'Роттердам', type: 'port', lat: 51.9225, lon: 4.4792, country: 'Нидерланды', icon: '🚢', continent: 'Европа' },
{ id: 'hamburg', name: 'Гамбург', type: 'port', lat: 53.5511, lon: 9.9937, country: 'Германия', icon: '🚢', continent: 'Европа' },
{ id: 'barcelona', name: 'Барселона', type: 'port', lat: 41.3851, lon: 2.1734, country: 'Испания', icon: '🚢', continent: 'Европа' },
{ id: 'rome', name: 'Рим', type: 'city', lat: 41.9028, lon: 12.4964, country: 'Италия', icon: '🏙️', continent: 'Европа' },
{ id: 'athens', name: 'Афины', type: 'port', lat: 37.9838, lon: 23.7275, country: 'Греция', icon: '🚢', continent: 'Европа' },
{ id: 'limassol', name: 'Лимассол', type: 'port', lat: 34.6751, lon: 33.0443, country: 'Кипр', icon: '🚢', continent: 'Европа' },
{ id: 'istanbul', name: 'Стамбул', type: 'hub', lat: 41.0082, lon: 28.9784, country: 'Турция', icon: '🏭', continent: 'Европа/Азия' },
{ id: 'moscow', name: 'Москва', type: 'hub', lat: 55.7558, lon: 37.6173, country: 'Россия', icon: '🏭', continent: 'Европа' },
{ id: 'stpetersburg', name: 'Санкт-Петербург', type: 'port', lat: 59.9343, lon: 30.3351, country: 'Россия', icon: '🚢', continent: 'Европа' },
{ id: 'murmansk', name: 'Мурманск', type: 'port', lat: 68.9667, lon: 33.0833, country: 'Россия', icon: '🚢', continent: 'Европа' },
{ id: 'nuuk', name: 'Нуук', type: 'port', lat: 64.1814, lon: -51.6941, country: 'Гренландия', icon: '🚢', continent: 'Северная Америка' },
{ id: 'sevastopol', name: 'Севастополь', type: 'port', lat: 44.6167, lon: 33.5250, country: 'Россия', icon: '🚢', continent: 'Европа' },
// Ближний Восток и Африка
{ id: 'tangier', name: 'Танжер', type: 'port', lat: 35.7595, lon: -5.8335, country: 'Марокко', icon: '🚢', continent: 'Африка' },
{ id: 'cairo', name: 'Каир', type: 'city', lat: 30.0444, lon: 31.2357, country: 'Египет', icon: '🏙️', continent: 'Африка' },
{ id: 'dubai', name: 'Дубай', type: 'port', lat: 25.2048, lon: 55.2708, country: 'ОАЭ', icon: '🚢', continent: 'Азия' },
{ id: 'capetown', name: 'Кейптаун', type: 'port', lat: -33.9249, lon: 18.4241, country: 'ЮАР', icon: '🚢', continent: 'Африка' },
{ id: 'lagos', name: 'Лагос', type: 'port', lat: 6.5244, lon: 3.3792, country: 'Нигерия', icon: '🚢', continent: 'Африка' },
{ id: 'toamasina', name: 'Туамасина', type: 'port', lat: -18.1492, lon: 49.4023, country: 'Мадагаскар', icon: '🚢', continent: 'Африка' },
{ id: 'nairobi', name: 'Найроби', type: 'hub', lat: -1.2864, lon: 36.8172, country: 'Кения', icon: '🏭', continent: 'Африка' },
// Азия
{ id: 'mumbai', name: 'Мумбаи', type: 'port', lat: 19.0760, lon: 72.8777, country: 'Индия', icon: '🚢', continent: 'Азия' },
{ id: 'mundra', name: 'Мундра', type: 'port', lat: 22.75, lon: 69.7167, country: 'Индия', icon: '🚢', continent: 'Азия' },
{ id: 'chennai', name: 'Ченнаи', type: 'port', lat: 13.0833, lon: 80.2833, country: 'Индия', icon: '🚢', continent: 'Азия' },
{ id: 'delhi', name: 'Дели', type: 'hub', lat: 28.7041, lon: 77.1025, country: 'Индия', icon: '🏭', continent: 'Азия' },
{ id: 'singapore', name: 'Сингапур', type: 'port', lat: 1.3521, lon: 103.8198, country: 'Сингапур', icon: '🚢', continent: 'Азия' },
{ id: 'jakarta', name: 'Танджунг Приок (Джакарта)', type: 'port', lat: -6.1214, lon: 106.8814, country: 'Индонезия', icon: '🚢', continent: 'Азия' },
{ id: 'belawan', name: 'Белаван (Медан)', type: 'port', lat: 3.7894, lon: 98.6977, country: 'Индонезия', icon: '🚢', continent: 'Азия' },
{ id: 'bangkok', name: 'Бангкок', type: 'hub', lat: 13.7563, lon: 100.5018, country: 'Таиланд', icon: '🏭', continent: 'Азия' },
{ id: 'hongkong', name: 'Гонконг', type: 'port', lat: 22.3193, lon: 114.1694, country: 'Китай', icon: '🚢', continent: 'Азия' },
{ id: 'shanghai', name: 'Шанхай', type: 'port', lat: 31.2304, lon: 121.4737, country: 'Китай', icon: '🚢', continent: 'Азия' },
{ id: 'beijing', name: 'Пекин', type: 'city', lat: 39.9042, lon: 116.4074, country: 'Китай', icon: '🏙️', continent: 'Азия' },
{ id: 'tianjin', name: 'Тяньцзинь', type: 'port', lat: 38.9667, lon: 117.7833, country: 'Китай', icon: '🚢', continent: 'Азия' },
{ id: 'qingdao', name: 'Циндао', type: 'port', lat: 36.0667, lon: 120.3167, country: 'Китай', icon: '🚢', continent: 'Азия' },
{ id: 'tokyo', name: 'Токио', type: 'port', lat: 35.6762, lon: 139.6503, country: 'Япония', icon: '🚢', continent: 'Азия' },
{ id: 'seoul', name: 'Сеул', type: 'hub', lat: 37.5665, lon: 126.9780, country: 'Южная Корея', icon: '🏭', continent: 'Азия' },
{ id: 'busan', name: 'Пусан', type: 'port', lat: 35.1, lon: 129.0333, country: 'Южная Корея', icon: '🚢', continent: 'Азия' },
{ id: 'vladivostok', name: 'Владивосток', type: 'port', lat: 43.1332, lon: 131.9113, country: 'Россия', icon: '🚢', continent: 'Азия' },
// Америка
{ id: 'newyork', name: 'Нью-Йорк', type: 'port', lat: 40.7128, lon: -74.0060, country: 'США', icon: '🚢', continent: 'Северная Америка' },
{ id: 'washington', name: 'Вашингтон', type: 'city', lat: 38.9072, lon: -77.0369, country: 'США', icon: '🏙️', continent: 'Северная Америка' },
{ id: 'chicago', name: 'Чикаго', type: 'hub', lat: 41.8781, lon: -87.6298, country: 'США', icon: '🏭', continent: 'Северная Америка' },
{ id: 'losangeles', name: 'Лос-Анджелес', type: 'port', lat: 34.0522, lon: -118.2437, country: 'США', icon: '🚢', continent: 'Северная Америка' },
{ id: 'vancouver', name: 'Ванкувер', type: 'port', lat: 49.2833, lon: -123.1167, country: 'Канада', icon: '🚢', continent: 'Северная Америка' },
{ id: 'miami', name: 'Майами', type: 'port', lat: 25.7617, lon: -80.1918, country: 'США', icon: '🚢', continent: 'Северная Америка' },
{ id: 'havana', name: 'Гавана', type: 'port', lat: 23.1136, lon: -82.3666, country: 'Куба', icon: '🚢', continent: 'Северная Америка' },
{ id: 'mexicocity', name: 'Мехико', type: 'hub', lat: 19.4326, lon: -99.1332, country: 'Мексика', icon: '🏭', continent: 'Северная Америка' },
{ id: 'colon', name: 'Колон', type: 'port', lat: 9.35, lon: -79.9, country: 'Панама', icon: '🚢', continent: 'Центральная Америка' },
{ id: 'paramaribo', name: 'Парамарибо', type: 'port', lat: 5.8520, lon: -55.2038, country: 'Суринам', icon: '🚢', continent: 'Южная Америка' },
{ id: 'cumana', name: 'Кумана', type: 'port', lat: 10.4631, lon: -64.1814, country: 'Венесуэла', icon: '🚢', continent: 'Южная Америка' },
{ id: 'lima', name: 'Лима', type: 'port', lat: -12.0464, lon: -77.0428, country: 'Перу', icon: '🚢', continent: 'Южная Америка' },
{ id: 'puntarenas', name: 'Пунта-Аренас', type: 'port', lat: -53.1638, lon: -70.9171, country: 'Чили', icon: '🚢', continent: 'Южная Америка' },
{ id: 'riodejaneiro', name: 'Рио-де-Жанейро', type: 'port', lat: -22.9068, lon: -43.1729, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
{ id: 'santos', name: 'Сантос', type: 'port', lat: -23.9667, lon: -46.3167, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
{ id: 'natal', name: 'Натал', type: 'port', lat: -5.7945, lon: -35.2119, country: 'Бразилия', icon: '🚢', continent: 'Южная Америка' },
{ id: 'buenosaires', name: 'Буэнос-Айрес', type: 'port', lat: -34.6037, lon: -58.3816, country: 'Аргентина', icon: '🚢', continent: 'Южная Америка' },
// Океания
{ id: 'sydney', name: 'Сидней', type: 'port', lat: -33.8688, lon: 151.2093, country: 'Австралия', icon: '🚢', continent: 'Океания' },
{ id: 'melbourne', name: 'Мельбурн', type: 'port', lat: -37.8136, lon: 144.9631, country: 'Австралия', icon: '🚢', continent: 'Океания' },
{ id: 'auckland', name: 'Окленд', type: 'port', lat: -36.8485, lon: 174.7633, country: 'Новая Зеландия', icon: '🚢', continent: 'Океания' },
];
// Координаты теперь рассчитываются динамически в map.js на основе lat/lon
// Путевые точки на основных морских маршрутах (waypoints)
// Создаем плотную сетку точек для равномерного перемещения
const waypoints = [
// Транс-Атлантика: Нью-Йорк - Европа (убрали слишком близкие точки)
{ id: 'atl_2', lat: 44, lon: -60, name: 'Атлантика (44°N, 60°W)' },
{ id: 'atl_3', lat: 46, lon: -50, name: 'Атлантика (46°N, 50°W)' },
{ id: 'atl_4', lat: 48, lon: -40, name: 'Атлантика (48°N, 40°W)' },
{ id: 'atl_5', lat: 50, lon: -30, name: 'Атлантика (50°N, 30°W)' },
{ id: 'atl_6', lat: 51, lon: -20, name: 'Атлантика (51°N, 20°W)' },
// Восточное побережье США (убрали слишком близкие)
{ id: 'us_east_2', lat: 33, lon: -78, name: 'Вост. побережье (33°N, 78°W)' },
// Внутренние маршруты через США (между Чикаго и Лос-Анджелесом)
{ id: 'us_inland_1', lat: 40, lon: -100, name: 'Средний Запад (40°N, 100°W)' },
{ id: 'us_inland_2', lat: 38, lon: -105, name: 'Средний Запад (38°N, 105°W)' },
{ id: 'us_inland_3', lat: 36, lon: -110, name: 'Юго-Запад (36°N, 110°W)' },
{ id: 'us_inland_4', lat: 35, lon: -115, name: 'Юго-Запад (35°N, 115°W)' },
// Северная Атлантика - между Майами и центральной Атлантикой
{ id: 'atl_n_1', lat: 26, lon: -75, name: 'Север. Атлантика (26°N, 75°W)' },
{ id: 'atl_n_2', lat: 28, lon: -70, name: 'Север. Атлантика (28°N, 70°W)' },
{ id: 'atl_n_3', lat: 30, lon: -65, name: 'Север. Атлантика (30°N, 65°W)' },
{ id: 'atl_n_4', lat: 28, lon: -55, name: 'Север. Атлантика (28°N, 55°W)' },
{ id: 'atl_n_5', lat: 25, lon: -45, name: 'Север. Атлантика (25°N, 45°W)' },
{ id: 'atl_n_6', lat: 22, lon: -38, name: 'Север. Атлантика (22°N, 38°W)' },
{ id: 'atl_n_7', lat: 19, lon: -30, name: 'Север. Атлантика (19°N, 30°W)' },
{ id: 'atl_n_8', lat: 17, lon: -25, name: 'Север. Атлантика (17°N, 25°W)' },
// Карибское море (плотная сетка)
{ id: 'car_1', lat: 23, lon: -75, name: 'Карибское море (23°N, 75°W)' },
{ id: 'car_2', lat: 20, lon: -75, name: 'Карибское море (20°N, 75°W)' },
{ id: 'car_3', lat: 18, lon: -78, name: 'Карибское море (18°N, 78°W)' },
{ id: 'car_4', lat: 16, lon: -82, name: 'Карибское море (16°N, 82°W)' },
{ id: 'car_5', lat: 14, lon: -80, name: 'Карибское море (14°N, 80°W)' },
{ id: 'car_6', lat: 12, lon: -75, name: 'Карибское море (12°N, 75°W)' },
{ id: 'car_7', lat: 15, lon: -70, name: 'Карибское море (15°N, 70°W)' },
// Панамский канал и подходы
{ id: 'panama_w', lat: 10, lon: -82, name: 'Подход к Панаме' },
{ id: 'panama_canal', lat: 9, lon: -79.5, name: 'Панамский канал' },
{ id: 'panama_e', lat: 8, lon: -77, name: 'Тихий океан' },
// Тихий океан - Восточная часть (США)
{ id: 'pac_e_1', lat: 36, lon: -122, name: 'Тихий океан (36°N, 122°W)' },
{ id: 'pac_e_2', lat: 32, lon: -118, name: 'Тихий океан (32°N, 118°W)' },
{ id: 'pac_e_3', lat: 28, lon: -115, name: 'Тихий океан (28°N, 115°W)' },
{ id: 'pac_e_4', lat: 24, lon: -112, name: 'Тихий океан (24°N, 112°W)' },
{ id: 'pac_e_5', lat: 20, lon: -110, name: 'Тихий океан (20°N, 110°W)' },
{ id: 'pac_e_6', lat: 16, lon: -105, name: 'Тихий океан (16°N, 105°W)' },
{ id: 'pac_e_7', lat: 12, lon: -95, name: 'Тихий океан (12°N, 95°W)' },
{ id: 'pac_e_8', lat: 8, lon: -90, name: 'Тихий океан (8°N, 90°W)' },
{ id: 'pac_e_9', lat: 4, lon: -85, name: 'Тихий океан (4°N, 85°W)' },
// Южная Америка - Тихоокеанское побережье
{ id: 'sa_pac_1', lat: 0, lon: -82, name: 'Тихий океан (0°, 82°W)' },
{ id: 'sa_pac_2', lat: -4, lon: -80, name: 'Тихий океан (4°S, 80°W)' },
{ id: 'sa_pac_3', lat: -8, lon: -79, name: 'Тихий океан (8°S, 79°W)' },
{ id: 'sa_pac_4', lat: -12, lon: -78, name: 'Тихий океан (12°S, 78°W)' },
{ id: 'sa_pac_5', lat: -16, lon: -76, name: 'Тихий океан (16°S, 76°W)' },
{ id: 'sa_pac_6', lat: -20, lon: -72, name: 'Тихий океан (20°S, 72°W)' },
{ id: 'sa_pac_7', lat: -25, lon: -71, name: 'Тихий океан (25°S, 71°W)' },
{ id: 'sa_pac_8', lat: -30, lon: -72, name: 'Тихий океан (30°S, 72°W)' },
{ id: 'sa_pac_9', lat: -35, lon: -73, name: 'Тихий океан (35°S, 73°W)' },
{ id: 'sa_pac_10', lat: -40, lon: -74, name: 'Тихий океан (40°S, 74°W)' },
{ id: 'sa_pac_11', lat: -45, lon: -75, name: 'Тихий океан (45°S, 75°W)' },
{ id: 'sa_pac_12', lat: -50, lon: -76, name: 'Тихий океан (50°S, 76°W)' },
// Мыс Горн
{ id: 'horn_1', lat: -54, lon: -70, name: 'Мыс Горн' },
{ id: 'horn_2', lat: -56, lon: -68, name: 'Мыс Горн' },
{ id: 'horn_3', lat: -55, lon: -65, name: 'Мыс Горн' },
// Южная Америка - Атлантическое побережье (добавлено больше точек)
{ id: 'sa_atl_1', lat: -50, lon: -62, name: 'Атлантика (50°S, 62°W)' },
{ id: 'sa_atl_2', lat: -45, lon: -60, name: 'Атлантика (45°S, 60°W)' },
{ id: 'sa_atl_3', lat: -40, lon: -58, name: 'Атлантика (40°S, 58°W)' },
{ id: 'sa_atl_4', lat: -35, lon: -56, name: 'Атлантика (35°S, 56°W)' },
{ id: 'sa_atl_5', lat: -30, lon: -52, name: 'Атлантика (30°S, 52°W)' },
{ id: 'sa_atl_6', lat: -25, lon: -48, name: 'Атлантика (25°S, 48°W)' },
{ id: 'sa_atl_7', lat: -20, lon: -44, name: 'Атлантика (20°S, 44°W)' },
{ id: 'sa_atl_8', lat: -15, lon: -40, name: 'Атлантика (15°S, 40°W)' },
{ id: 'sa_atl_9', lat: -10, lon: -36, name: 'Атлантика (10°S, 36°W)' },
{ id: 'sa_atl_10', lat: -5, lon: -32, name: 'Атлантика (5°S, 32°W)' },
// Северное побережье Южной Америки (от Парамарибо к Наталу)
{ id: 'sa_north_1', lat: 2, lon: -50, name: 'Сев. побережье Ю.Америки (2°N, 50°W)' },
{ id: 'sa_north_2', lat: 0, lon: -45, name: 'Сев. побережье Ю.Америки (0°, 45°W)' },
{ id: 'sa_north_3', lat: -2, lon: -40, name: 'Сев. побережье Ю.Америки (2°S, 40°W)' },
// Южная Атлантика - между Ю.Америкой и Африкой (МНОГО точек)
{ id: 's_atl_1', lat: -5, lon: -28, name: 'Южн. Атлантика 16' },
{ id: 's_atl_2', lat: -5, lon: -24, name: 'Южн. Атлантика 15' },
{ id: 's_atl_3', lat: -5, lon: -20, name: 'Южн. Атлантика 14' },
{ id: 's_atl_4', lat: -5, lon: -16, name: 'Южн. Атлантика 13' },
{ id: 's_atl_5', lat: -5, lon: -12, name: 'Южн. Атлантика 12' },
{ id: 's_atl_6', lat: -5, lon: -8, name: 'Южн. Атлантика 11' },
// Центральная Атлантика
{ id: 'atl_mid_1', lat: 0, lon: -28, name: 'Атлантика (0°, 28°W)' },
{ id: 'atl_mid_2', lat: 5, lon: -25, name: 'Атлантика (5°N, 25°W)' },
{ id: 'atl_mid_3', lat: 10, lon: -22, name: 'Атлантика (10°N, 22°W)' },
{ id: 'atl_mid_4', lat: 15, lon: -20, name: 'Атлантика (15°N, 20°W)' },
{ id: 'atl_mid_5', lat: 20, lon: -18, name: 'Атлантика (20°N, 18°W)' },
{ id: 'atl_mid_6', lat: 25, lon: -16, name: 'Атлантика (25°N, 16°W)' },
{ id: 'atl_mid_7', lat: 30, lon: -14, name: 'Атлантика (30°N, 14°W)' },
// Западная Африка
{ id: 'waf_1', lat: 33, lon: -10, name: 'Африка' },
{ id: 'waf_2', lat: 28, lon: -12, name: 'Африка' },
{ id: 'waf_3', lat: 23, lon: -15, name: 'Африка' },
{ id: 'waf_4', lat: 18, lon: -17, name: 'Африка' },
{ id: 'waf_5', lat: 13, lon: -18, name: 'Африка' },
{ id: 'waf_6', lat: 8, lon: -15, name: 'Африка' },
{ id: 'waf_7', lat: 3, lon: -10, name: 'Африка' },
{ id: 'waf_8', lat: -2, lon: -5, name: 'Африка' },
{ id: 'waf_9', lat: -7, lon: 0, name: 'Африка' },
{ id: 'waf_10', lat: -12, lon: 5, name: 'Африка' },
{ id: 'waf_11', lat: -17, lon: 8, name: 'Африка' },
{ id: 'waf_12', lat: -22, lon: 10, name: 'Африка' },
{ id: 'waf_13', lat: -27, lon: 13, name: 'Африка' },
{ id: 'waf_14', lat: -32, lon: 16, name: 'Африка' },
// Мыс Доброй Надежды
{ id: 'cape_1', lat: -35, lon: 18, name: 'Мыс Доброй Надежды' },
{ id: 'cape_2', lat: -36, lon: 20, name: 'Мыс Доброй Надежды' },
{ id: 'cape_3', lat: -35, lon: 23, name: 'Мыс Доброй Надежды' },
// Восточная Африка
{ id: 'eaf_1', lat: -32, lon: 28, name: 'Африка' },
{ id: 'eaf_2', lat: -27, lon: 32, name: 'Африка' },
{ id: 'eaf_3', lat: -22, lon: 35, name: 'Африка' },
{ id: 'eaf_4', lat: -17, lon: 38, name: 'Африка' },
{ id: 'eaf_5', lat: -12, lon: 40, name: 'Африка' },
{ id: 'eaf_6', lat: -7, lon: 42, name: 'Африка' },
{ id: 'eaf_7', lat: -2, lon: 43, name: 'Африка' },
{ id: 'eaf_8', lat: 3, lon: 42, name: 'Африка' },
{ id: 'eaf_9', lat: 8, lon: 45, name: 'Африка' },
{ id: 'eaf_10', lat: 13, lon: 48, name: 'Африка' },
// К Мадагаскару от восточного побережья Африки
{ id: 'mad_1', lat: -8, lon: 45, name: 'Мозамбикский пролив' },
{ id: 'mad_2', lat: -12, lon: 46, name: 'Мозамбикский пролив' },
{ id: 'mad_3', lat: -16, lon: 47.5, name: 'Мозамбикский пролив' },
// Красное море (без Суэца)
{ id: 'red_1', lat: 17, lon: 40, name: 'Красное море' },
{ id: 'red_2', lat: 20, lon: 38, name: 'Красное море' },
{ id: 'red_3', lat: 23, lon: 36, name: 'Красное море' },
{ id: 'red_4', lat: 26, lon: 34, name: 'Красное море' },
// Черное море
{ id: 'black_1', lat: 42.5, lon: 31, name: 'Черное море' },
// Средиземное море
{ id: 'med_1', lat: 32, lon: 28, name: 'Средиземное море' },
{ id: 'med_2', lat: 34, lon: 24, name: 'Средиземное море' },
{ id: 'med_3', lat: 35, lon: 20, name: 'Средиземное море' },
{ id: 'med_4', lat: 36, lon: 16, name: 'Средиземное море' },
{ id: 'med_5', lat: 38, lon: 12, name: 'Средиземное море' },
{ id: 'med_6', lat: 39, lon: 8, name: 'Средиземное море' },
{ id: 'med_7', lat: 40, lon: 4, name: 'Средиземное море' },
// Восточное Средиземное море (к Кипру)
{ id: 'med_e_1', lat: 34, lon: 30, name: 'Восточ. Средиземноморье' },
{ id: 'med_e_2', lat: 35, lon: 28, name: 'Восточ. Средиземноморье' },
{ id: 'gibraltar', lat: 36, lon: -5.5, name: 'Гибралтар' },
// Северная Европа
{ id: 'neur_1', lat: 45, lon: -4, name: 'Атлантика' },
{ id: 'neur_2', lat: 48, lon: -2, name: 'Атлантика' },
{ id: 'neur_3', lat: 50, lon: 0, name: 'Атлантика' },
{ id: 'neur_4', lat: 52, lon: 2, name: 'Северное море' },
{ id: 'neur_5', lat: 54, lon: 5, name: 'Северное море' },
// Северный морской путь (к Мурманску)
{ id: 'north_1', lat: 62, lon: 10, name: 'Северное море' },
{ id: 'north_2', lat: 65, lon: 18, name: 'Баренцево море' },
{ id: 'north_3', lat: 67, lon: 25, name: 'Баренцево море' },
// К Гренландии (Северная Атлантика)
{ id: 'greenland_1', lat: 60, lon: -25, name: 'Северная Атлантика' },
{ id: 'greenland_2', lat: 62, lon: -30, name: 'Северная Атлантика' },
{ id: 'greenland_3', lat: 63, lon: -40, name: 'Северная Атлантика' },
// Индийский океан (расширенный)
{ id: 'ind_1', lat: 15, lon: 55, name: 'Индийский океан' },
{ id: 'ind_2', lat: 12, lon: 60, name: 'Индийский океан' },
{ id: 'ind_3', lat: 10, lon: 65, name: 'Индийский океан' },
{ id: 'ind_4', lat: 8, lon: 70, name: 'Индийский океан' },
{ id: 'ind_5', lat: 5, lon: 75, name: 'Индийский океан' },
{ id: 'ind_6', lat: 2, lon: 80, name: 'Индийский океан' },
{ id: 'ind_7', lat: 0, lon: 85, name: 'Индийский океан' },
{ id: 'ind_8', lat: -2, lon: 90, name: 'Индийский океан' },
{ id: 'ind_9', lat: -3, lon: 95, name: 'Индийский океан' },
// Индийский океан - к Австралии (новый маршрут от Африки)
{ id: 'ind_s_1', lat: -10, lon: 50, name: 'Индийский океан' },
{ id: 'ind_s_2', lat: -15, lon: 55, name: 'Индийский океан' },
{ id: 'ind_s_3', lat: -20, lon: 60, name: 'Индийский океан' },
{ id: 'ind_s_4', lat: -25, lon: 65, name: 'Индийский океан' },
{ id: 'ind_s_5', lat: -28, lon: 70, name: 'Индийский океан' },
{ id: 'ind_s_6', lat: -30, lon: 75, name: 'Индийский океан' },
{ id: 'ind_s_7', lat: -32, lon: 80, name: 'Индийский океан' },
{ id: 'ind_s_8', lat: -33, lon: 90, name: 'Индийский океан' },
{ id: 'ind_s_9', lat: -33, lon: 100, name: 'Индийский океан' },
{ id: 'ind_s_10', lat: -32, lon: 110, name: 'Индийский океан' },
{ id: 'ind_s_11', lat: -30, lon: 120, name: 'Индийский океан' },
{ id: 'ind_s_12', lat: -28, lon: 130, name: 'Индийский океан' },
{ id: 'ind_s_13', lat: -26, lon: 140, name: 'Индийский океан' },
// Малаккский пролив
{ id: 'malacca_1', lat: 6, lon: 98, name: 'Малаккский пролив' },
{ id: 'malacca_2', lat: 4, lon: 100, name: 'Малаккский пролив' },
{ id: 'malacca_3', lat: 2, lon: 102, name: 'Малаккский пролив' },
// Яванское море (между Джакартой и Сингапуром)
{ id: 'java_1', lat: -2, lon: 105, name: 'Яванское море' },
{ id: 'java_2', lat: 0, lon: 104, name: 'Яванское море' },
// Южно-Китайское море
{ id: 'scs_1', lat: 4, lon: 106, name: 'Южно-Китайское море' },
{ id: 'scs_2', lat: 7, lon: 109, name: 'Южно-Китайское море' },
{ id: 'scs_3', lat: 10, lon: 112, name: 'Южно-Китайское море' },
{ id: 'scs_4', lat: 13, lon: 114, name: 'Южно-Китайское море' },
{ id: 'scs_5', lat: 16, lon: 116, name: 'Южно-Китайское море' },
{ id: 'scs_6', lat: 19, lon: 117, name: 'Южно-Китайское море' },
{ id: 'scs_7', lat: 22, lon: 118, name: 'Южно-Китайское море' },
{ id: 'scs_8', lat: 25, lon: 120, name: 'Восточно-Китайское море' },
{ id: 'scs_9', lat: 28, lon: 122, name: 'Восточно-Китайское море' },
{ id: 'scs_10', lat: 31, lon: 125, name: 'Восточно-Китайское море' },
// К Японии
{ id: 'jap_1', lat: 33, lon: 130, name: 'Японское море' },
{ id: 'jap_2', lat: 35, lon: 135, name: 'Тихий океан' },
// Тихий океан - Западная часть
{ id: 'pac_w_1', lat: 30, lon: 145, name: 'Тихий океан' },
{ id: 'pac_w_2', lat: 25, lon: 150, name: 'Тихий океан' },
{ id: 'pac_w_3', lat: 20, lon: 155, name: 'Тихий океан' },
{ id: 'pac_w_4', lat: 15, lon: 160, name: 'Тихий океан' },
{ id: 'pac_w_5', lat: 10, lon: 165, name: 'Тихий океан' },
{ id: 'pac_w_6', lat: 5, lon: 170, name: 'Тихий океан' },
{ id: 'pac_w_7', lat: 0, lon: 175, name: 'Тихий океан' },
{ id: 'pac_w_8', lat: -5, lon: 178, name: 'Тихий океан' },
// К Австралии
{ id: 'aus_1', lat: -10, lon: 142, name: 'Коралловое море' },
{ id: 'aus_2', lat: -15, lon: 145, name: 'Коралловое море' },
{ id: 'aus_3', lat: -20, lon: 148, name: 'Коралловое море' },
{ id: 'aus_4', lat: -25, lon: 150, name: 'Коралловое море' },
{ id: 'aus_5', lat: -30, lon: 152, name: 'Тасманово море' },
{ id: 'aus_6', lat: -35, lon: 155, name: 'Тасманово море' },
{ id: 'aus_7', lat: -37, lon: 160, name: 'Тасманово море' },
// К Новой Зеландии
{ id: 'nz_1', lat: -38, lon: 168, name: 'Тасманово море' },
{ id: 'nz_2', lat: -37, lon: 172, name: 'Тасманово море' },
// Транс-Тихоокеанский маршрут
{ id: 'pac_c_1', lat: 35, lon: 160, name: 'Тихий океан' },
{ id: 'pac_c_2', lat: 35, lon: 170, name: 'Тихий океан' },
{ id: 'pac_c_3', lat: 35, lon: 180, name: 'Тихий океан' },
{ id: 'pac_c_4', lat: 35, lon: -170, name: 'Тихий океан' },
{ id: 'pac_c_5', lat: 35, lon: -160, name: 'Тихий океан' },
{ id: 'pac_c_6', lat: 35, lon: -150, name: 'Тихий океан' },
{ id: 'pac_c_7', lat: 35, lon: -140, name: 'Тихий океан' },
{ id: 'pac_c_8', lat: 35, lon: -130, name: 'Тихий океан' },
];
// Объединяем города и путевые точки
const allPoints = [...locations, ...waypoints];
// Функция для создания последовательных маршрутов (двунаправленные)
function createSequentialRoutes(ids) {
const routes = [];
for (let i = 0; i < ids.length - 1; i++) {
// Прямой маршрут
routes.push({ from: ids[i], to: ids[i + 1] });
// Обратный маршрут
routes.push({ from: ids[i + 1], to: ids[i] });
}
return routes;
}
// Функция для создания одностороннего маршрута
function createRoute(from, to) {
return [
{ from: from, to: to },
{ from: to, to: from }
];
}
// Маршруты между точками (основные морские пути)
const routes = [
// Города Европы - внутренние связи (двунаправленные)
...createRoute('london', 'rotterdam'),
...createRoute('london', 'paris'),
...createRoute('rotterdam', 'hamburg'),
...createRoute('hamburg', 'stpetersburg'),
...createRoute('stpetersburg', 'moscow'),
...createRoute('moscow', 'sevastopol'),
...createRoute('stpetersburg', 'murmansk'),
...createRoute('paris', 'barcelona'),
...createRoute('barcelona', 'tangier'),
...createRoute('barcelona', 'rome'),
...createRoute('rome', 'athens'),
...createRoute('athens', 'istanbul'),
// Америка
...createRoute('newyork', 'washington'),
...createRoute('newyork', 'chicago'),
// Чикаго - Лос-Анджелес через промежуточные точки (длинный маршрут)
...createSequentialRoutes(['chicago', 'us_inland_1', 'us_inland_2', 'us_inland_3', 'us_inland_4', 'losangeles']),
...createRoute('losangeles', 'vancouver'),
...createRoute('vancouver', 'pac_e_1'),
...createRoute('colon', 'panama_canal'),
// Азия - Китай
...createRoute('beijing', 'tianjin'),
...createRoute('tianjin', 'shanghai'),
...createRoute('shanghai', 'qingdao'),
...createRoute('qingdao', 'scs_10'),
// Азия - Корея и Япония
...createRoute('seoul', 'busan'),
...createRoute('busan', 'jap_1'),
...createRoute('busan', 'tokyo'),
...createRoute('tokyo', 'seoul'),
...createRoute('seoul', 'vladivostok'),
...createRoute('vladivostok', 'tokyo'),
// Азия - Индия
...createRoute('mumbai', 'mundra'),
...createRoute('mundra', 'mumbai'),
...createRoute('mumbai', 'delhi'),
...createRoute('mumbai', 'chennai'),
...createRoute('chennai', 'delhi'),
...createRoute('chennai', 'ind_6'),
// Южная Америка
...createRoute('riodejaneiro', 'santos'),
...createRoute('santos', 'buenosaires'),
// Прямой маршрут Лима -> Рио удален, должен проходить через мыс Горн
...createRoute('santos', 'sa_atl_8'),
// Океания
...createRoute('sydney', 'melbourne'),
// Транс-Атлантика: Нью-Йорк - Европа (цепочка)
...createSequentialRoutes(['newyork', 'atl_2', 'atl_3', 'atl_4', 'atl_5', 'atl_6', 'neur_3', 'london']),
...createSequentialRoutes(['neur_3', 'neur_4', 'neur_5', 'hamburg']),
...createSequentialRoutes(['hamburg', 'stpetersburg']),
...createSequentialRoutes(['stpetersburg', 'north_1', 'north_2', 'north_3', 'murmansk']),
...createSequentialRoutes(['newyork', 'atl_2', 'atl_3', 'atl_4', 'atl_5', 'atl_6', 'rotterdam']),
// Гренландия - Северная Атлантика
...createSequentialRoutes(['nuuk', 'greenland_1', 'greenland_2', 'greenland_3', 'atl_5', 'atl_6']),
...createSequentialRoutes(['nuuk', 'greenland_1', 'neur_3']),
// Восточное побережье США
...createRoute('newyork', 'washington'),
...createSequentialRoutes(['washington', 'us_east_2', 'miami']),
// Вашингтон - Северная Атлантика (середина)
...createSequentialRoutes(['washington', 'us_east_2', 'atl_n_3', 'atl_n_4', 'atl_n_5', 'atl_n_6']),
// Карибское море
...createSequentialRoutes(['miami', 'car_1', 'car_2', 'car_3', 'car_4', 'car_5', 'panama_w', 'panama_canal']),
...createSequentialRoutes(['miami', 'car_1', 'car_7', 'car_6']),
...createSequentialRoutes(['panama_canal', 'colon']),
// Гавана (Куба)
...createSequentialRoutes(['miami', 'car_1', 'havana']),
...createSequentialRoutes(['havana', 'car_2', 'car_3']),
// Кумана (Венесуэла)
...createSequentialRoutes(['cumana', 'car_6', 'car_7', 'car_1']),
// Кумана - Натал (северное побережье Южной Америки)
...createSequentialRoutes(['cumana', 'sa_north_1', 'sa_north_2', 'sa_north_3', 'sa_atl_10', 'sa_atl_9', 'natal']),
// Парамарибо (Суринам)
// Прямой маршрут paramaribo <-> car_6 удален (слишком короткий путь)
// Парамарибо - Натал (северное побережье Южной Америки)
...createSequentialRoutes(['paramaribo', 'sa_north_1', 'sa_north_2', 'sa_north_3', 'sa_atl_10', 'sa_atl_9', 'natal']),
// Тихий океан - восточная часть (США)
...createSequentialRoutes(['losangeles', 'pac_e_1', 'pac_e_2', 'pac_e_3', 'pac_e_4', 'pac_e_5', 'pac_e_6', 'pac_e_7', 'pac_e_8', 'pac_e_9', 'panama_canal']),
// Панама - Южная Америка (Тихий океан)
...createSequentialRoutes(['panama_canal', 'panama_e', 'sa_pac_1', 'sa_pac_2', 'sa_pac_3', 'sa_pac_4', 'lima']),
...createSequentialRoutes(['lima', 'sa_pac_5', 'sa_pac_6', 'sa_pac_7', 'sa_pac_8', 'sa_pac_9', 'sa_pac_10', 'sa_pac_11', 'sa_pac_12']),
// Мыс Горн
...createSequentialRoutes(['sa_pac_12', 'horn_1', 'horn_2', 'horn_3', 'sa_atl_1']),
// Пунта-Аренас (Чили) - на юге
...createSequentialRoutes(['puntarenas', 'horn_1', 'horn_2', 'horn_3']),
...createRoute('puntarenas', 'sa_pac_12'),
// Южная Америка - Атлантика
...createSequentialRoutes(['sa_atl_1', 'sa_atl_2', 'sa_atl_3', 'buenosaires']),
...createSequentialRoutes(['buenosaires', 'sa_atl_4', 'sa_atl_5', 'sa_atl_6', 'sa_atl_7', 'riodejaneiro']),
...createSequentialRoutes(['riodejaneiro', 'sa_atl_8', 'sa_atl_9', 'sa_atl_10']),
// Натал (Бразилия) - северо-восточное побережье
...createSequentialRoutes(['natal', 'sa_atl_8', 'sa_atl_9']),
...createRoute('natal', 'riodejaneiro'),
// Южная Атлантика - переход к Африке (через середину океана)
...createSequentialRoutes(['sa_atl_10', 's_atl_1', 's_atl_2', 's_atl_3', 's_atl_4', 's_atl_5', 's_atl_6', 'waf_8']),
// Центральная Атлантика (к северу)
...createSequentialRoutes(['sa_atl_10', 'atl_mid_1', 'atl_mid_2', 'atl_mid_3', 'atl_mid_4', 'atl_mid_5', 'atl_mid_6', 'atl_mid_7', 'waf_1']),
// Майами - Северная Атлантика (длинный маршрут)
...createSequentialRoutes(['miami', 'atl_n_1', 'atl_n_2', 'atl_n_3', 'atl_n_4', 'atl_n_5', 'atl_n_6', 'atl_n_7', 'atl_n_8', 'atl_mid_4']),
// Связи между маршрутами Нью-Йорка и Северной Атлантики (посередине)
...createRoute('atl_4', 'atl_n_5'),
...createRoute('atl_5', 'atl_n_6'),
...createRoute('atl_n_4', 'atl_4'),
...createRoute('atl_n_5', 'atl_5'),
// Западная Африка
...createSequentialRoutes(['waf_1', 'gibraltar']),
...createSequentialRoutes(['waf_1', 'waf_2', 'waf_3', 'waf_4', 'waf_5', 'waf_6', 'lagos']),
...createSequentialRoutes(['lagos', 'waf_7', 'waf_8', 'waf_9', 'waf_10', 'waf_11', 'waf_12', 'waf_13', 'waf_14']),
// Мыс Доброй Надежды
...createSequentialRoutes(['waf_14', 'cape_1', 'capetown', 'cape_2', 'cape_3']),
// Восточная Африка
...createSequentialRoutes(['cape_3', 'eaf_1', 'eaf_2', 'eaf_3', 'eaf_4', 'eaf_5', 'eaf_6', 'nairobi', 'eaf_7', 'eaf_8', 'eaf_9', 'eaf_10']),
// Красное море (без Суэца)
...createSequentialRoutes(['eaf_10', 'red_1', 'red_2', 'red_3', 'red_4', 'cairo']),
// Средиземное море (без Суэца)
...createSequentialRoutes(['cairo', 'med_1', 'med_2', 'athens']),
...createSequentialRoutes(['med_2', 'med_3', 'med_4', 'rome']),
...createSequentialRoutes(['med_4', 'med_5', 'med_6', 'barcelona']),
...createSequentialRoutes(['med_6', 'med_7', 'gibraltar']),
...createSequentialRoutes(['gibraltar', 'neur_1', 'neur_2', 'paris']),
...createSequentialRoutes(['neur_2', 'neur_3']),
...createSequentialRoutes(['istanbul', 'med_1']),
// Кипр - восточное Средиземное море
...createSequentialRoutes(['limassol', 'med_e_1', 'med_e_2', 'athens']),
...createSequentialRoutes(['limassol', 'med_e_1', 'med_1', 'istanbul']),
// Мадагаскар - Мозамбикский пролив
...createSequentialRoutes(['eaf_5', 'mad_1', 'mad_2', 'mad_3', 'toamasina']),
// Черное море
...createSequentialRoutes(['sevastopol', 'black_1', 'istanbul']),
// Индийский океан
...createSequentialRoutes(['eaf_10', 'ind_1', 'ind_2', 'dubai']),
...createSequentialRoutes(['ind_2', 'ind_3', 'ind_4', 'mumbai']),
...createSequentialRoutes(['mumbai', 'ind_5', 'ind_6', 'ind_7', 'ind_8', 'ind_9']),
// Малаккский пролив
...createSequentialRoutes(['ind_9', 'malacca_1', 'malacca_2', 'malacca_3', 'singapore']),
...createSequentialRoutes(['malacca_2', 'bangkok']),
// Белаван (Медан) - через Малаккский пролив
...createSequentialRoutes(['belawan', 'malacca_1', 'malacca_2', 'singapore']),
// Яванское море - Джакарта
...createSequentialRoutes(['jakarta', 'java_1', 'java_2', 'singapore']),
// Связь между портами Индонезии
...createRoute('jakarta', 'belawan'),
// Южно-Китайское море
...createSequentialRoutes(['singapore', 'scs_1', 'scs_2', 'scs_3', 'scs_4', 'scs_5', 'scs_6', 'scs_7', 'hongkong']),
...createSequentialRoutes(['hongkong', 'scs_8', 'scs_9', 'scs_10', 'shanghai']),
// К Японии и Владивостоку
...createSequentialRoutes(['shanghai', 'jap_1', 'jap_2', 'tokyo']),
...createSequentialRoutes(['scs_10', 'jap_1', 'seoul']),
...createSequentialRoutes(['tokyo', 'vladivostok']),
...createSequentialRoutes(['vladivostok', 'seoul']),
// Тихий океан - западная часть
...createSequentialRoutes(['tokyo', 'pac_w_1', 'pac_w_2', 'pac_w_3', 'pac_w_4', 'pac_w_5', 'pac_w_6', 'pac_w_7', 'pac_w_8']),
// К Австралии (с севера)
...createSequentialRoutes(['pac_w_5', 'aus_1', 'aus_2', 'aus_3', 'aus_4', 'aus_5', 'aus_6', 'aus_7', 'sydney']),
...createSequentialRoutes(['singapore', 'aus_1']),
// От Африки к Австралии через южный Индийский океан
...createSequentialRoutes(['capetown', 'ind_s_1', 'ind_s_2', 'ind_s_3', 'ind_s_4', 'ind_s_5', 'ind_s_6', 'ind_s_7', 'ind_s_8', 'ind_s_9', 'ind_s_10', 'ind_s_11', 'ind_s_12', 'ind_s_13', 'aus_4']),
...createSequentialRoutes(['nairobi', 'ind_s_1']),
...createSequentialRoutes(['cape_3', 'ind_s_2']),
// К Новой Зеландии
...createSequentialRoutes(['sydney', 'nz_1', 'nz_2', 'auckland']),
// Транс-Тихоокеанский маршрут
...createSequentialRoutes(['tokyo', 'pac_c_1', 'pac_c_2', 'pac_c_3', 'pac_c_4', 'pac_c_5', 'pac_c_6', 'pac_c_7', 'pac_c_8', 'pac_e_1', 'losangeles']),
// ===== ПЕРЕКРЕСТНЫЕ СВЯЗИ (чтобы можно было переходить между маршрутами) =====
// Связи только между близкими параллельными маршрутами (не через весь океан)
// Атлантика - Африка (только ближайшие точки)
...createRoute('atl_mid_7', 'waf_1'),
// Карибское море - Центральная Атлантика (удалены прямые маршруты, должны проходить через промежуточные точки)
// Восточная Африка - Индийский океан (соединение двух путей)
...createRoute('eaf_10', 'ind_1'),
...createRoute('eaf_9', 'ind_1'),
...createRoute('eaf_8', 'ind_2'),
// Средиземное море - Европа (больше связей)
...createRoute('med_7', 'neur_1'),
...createRoute('med_6', 'paris'),
...createRoute('med_5', 'rome'),
...createRoute('med_4', 'athens'),
// Гибралтар - связи
...createRoute('gibraltar', 'barcelona'),
...createRoute('gibraltar', 'tangier'),
...createRoute('gibraltar', 'waf_1'),
// Северная Европа - Атлантика (только близкие)
...createRoute('neur_3', 'atl_6'),
...createRoute('neur_2', 'atl_6'),
// Панама - множественные подходы
...createRoute('panama_canal', 'car_5'),
...createRoute('panama_w', 'car_4'),
// Восточное побережье США - Атлантика (только ближайшие)
...createRoute('us_east_2', 'car_1'),
...createRoute('miami', 'car_1'),
// Тихий океан восток - Панама
...createRoute('pac_e_9', 'panama_e'),
...createRoute('pac_e_8', 'panama_canal'),
// Южная Америка - перекрёстные связи
...createRoute('sa_pac_1', 'panama_e'),
// Прямой маршрут sa_atl_10 -> car_6 удален (слишком короткий путь через океан)
// Индийский океан - Малакка (больше связей)
...createRoute('ind_8', 'malacca_1'),
...createRoute('ind_7', 'malacca_1'),
// Южно-Китайское море - Индийский океан
...createRoute('scs_1', 'ind_9'),
...createRoute('scs_1', 'malacca_3'),
// Австралия - множественные подходы
...createRoute('aus_1', 'scs_1'),
...createRoute('aus_1', 'ind_9'),
// Тихий океан запад - к разным направлениям
...createRoute('pac_w_4', 'aus_1'),
...createRoute('pac_w_3', 'aus_2'),
// Япония - Тихий океан (больше выходов)
...createRoute('jap_2', 'pac_w_1'),
...createRoute('tokyo', 'pac_w_1'),
...createRoute('vladivostok', 'pac_w_1'),
// Санкт-Петербург связи
...createRoute('stpetersburg', 'neur_5'),
...createRoute('stpetersburg', 'london'),
...createRoute('murmansk', 'north_3'),
// Транс-Тихоокеанский - связи с западом
...createRoute('pac_c_1', 'pac_w_1'),
...createRoute('pac_c_2', 'pac_w_2'),
...createRoute('pac_c_3', 'pac_w_3'),
// Мыс Горн - связи
...createRoute('sa_pac_12', 'horn_1'),
...createRoute('horn_3', 'sa_atl_1'),
// Мыс Доброй Надежды - Индийский океан
...createRoute('cape_3', 'ind_1'),
// Австралия - перекрестные связи
...createRoute('aus_4', 'ind_s_13'),
...createRoute('aus_3', 'ind_s_12'),
...createRoute('melbourne', 'aus_7'),
];
// Типы грузов для заданий (с весом и объемом)
const cargoTypes = [
{ id: 'electronics', name: 'Электроника', reward: 500, weight: 80, volume: 120 }, // Легкий, дорогой
{ id: 'textiles', name: 'Текстиль', reward: 250, weight: 60, volume: 100 }, // Легкий, дешевый
{ id: 'food', name: 'Продукты', reward: 300, weight: 100, volume: 150 }, // Легкий
{ id: 'chemicals', name: 'Химикаты', reward: 400, weight: 150, volume: 180 }, // Средний
{ id: 'furniture', name: 'Мебель', reward: 320, weight: 120, volume: 200 }, // Средний
{ id: 'machinery', name: 'Оборудование', reward: 450, weight: 200, volume: 250 }, // Средне-тяжелый
{ id: 'metals', name: 'Металлы', reward: 380, weight: 250, volume: 180 }, // Тяжелый
{ id: 'automobiles', name: 'Автомобили', reward: 600, weight: 280, volume: 300 }, // Тяжелый, дорогой
];
// Вместимость корабля (можно взять 2-3 средних груза или 1 тяжелый + 1-2 легких)
const SHIP_MAX_WEIGHT = 600; // Максимальный вес
const SHIP_MAX_VOLUME = 700; // Максимальный объем
// Цвета и иконки кораблей игроков
const playerColors = ['#e74c3c', '#3498db', '#2ecc71', '#f39c12'];
const playerShips = ['🚢', '⛴️', '🛳️', '⛵'];