M.A.X.    Вы вошли как гость
Российский Клуб игроков M.A.X.
 
[Новости]   [Новичку]   [Энциклопедия]   [Документы]   [Файлы]   [Игроки]   [Архивы]   [Архив форума]  
[Новый сайт]   [M.A.X. Gold]   [Партии]  

 
 
 
Архив форума  МаксГолд
[Основной форум] [Голосования] [МаксГолд] [Off-Topic]
 


(Протестировано) Список сообщений в сейве  -  Hruks,  14.12.2010  5:18:55

Пора бы реализовать эту мегаполезную фичу - хранение сообщений в сохранёнке и показ их в диалоге Отчётов.
Так как программа должна работать и на КПК, то хотелось бы уменьшить расход памяти под это дело.

Я вижу 2 подхода.

Первый это хранить не все подряд сообщения, а только за N последних ходов, где N небольшое число, например 2.
Соответсвенно при переходе хода, список старых сообщений подчищается. Очистку можно сделать опционально. Но важно понимать, что если один игрок играет на КПК, а другой на PC, то очищаться должны сообщения обоих игроков. При игре всех игроков на PC можно сообщения и не чистить, разве что для экономии трафика.

Второй это хранить не текстовые сообщения, а типизировать необходимые сообщения и хранить только номер хода, тип и необходимые параметры.
При этом некоторые сообщения вообще не хранить. Например неудачная попытка запустить завод из-за нехватки материалов должна выводиться для игрока, но не должна сохраняться и отображаться в архиве.

Буду полагать. что оба эти подхода хорошо уживутся вместе.

Сейчас в игре выводятся следсообщения:
Группа перехода хода:
Конец хода
Переход хода
Выберете место для посадки
Загрузка сейва/переход хода/начало игры
Строительство завершено
При расчёте построенного на этом ходу
Research complete
При расчёте науки на этом ходу
stopped for lack of something
Останов при нехватке ресурсов
cannot start for lack of materials
При запуске завода и нехватке материалов

Группа Select:
Строится такой-то юнит
при выборе юнита, который строит
Строительство завершено
при выборе юнита, который достроил
Чистит, ходов до окончания
бульдозер
Вырублен на N ходов
выбор вырубленного

Группа действия:
Upgraded
При улучшении юнита
Failed (lack of materials) to upgrade
При улучшении юнита
Не хватает материалов
При запуске строителя/здания
Предоставляет материалы
При останове производителя
Посадка за край карты не допустима.
При неудачной высадке
Посадка на препятствия не допустима.
При неудачной высадке


Итак, стоит обсудить, что же нужно хранить в архиве сообщений.
1. Сообщение о начале хода.
Полезная штука, но если у каждого сообщения будет его номер, то зная его и текущий номер хода, можно запросто такие сообщения сгенерировать при показе отчёта и не хранить их вовсе.
2. Строительство завершено.
Стоит указать что, где и кем построено.
3. Ресёрч завершён.
Стоит указать что и где разработано.
4. Останов из-за нехватки ресурсов при переходе хода.
Например во время хода противника он нарушил снабжение материалами.
Стоит указать что, где и почему остановлено (не хватило того-то).
5. Юнит игрока атакован.
Стоит указать кто, где атакован, и кем (тип юнита+игрок), если атакующий в скане и видим. Сообщение генерируется во время атаки и адресовано тем игрокам, кто видит атакуемого (включая хозяина юнита).
6. Юнит игрока отключен.
Тоже что и для атакован.
7. Юнит игрока захвачен.
Тоже что и для атакован.
8. Вражеский юнит в зоне скана.
Если юнит был не в скане, а после движения в него попал, то сгенерировать такое сообщение для игроков, в чей скан попал юнит. Проверять в конце движения и при добавлении скана игрока. например при постройке радара и движении своих юнитов.
Стоит указать тип юнита, где попал в скан.
9. Вражеский юнит исчез из скана.
Если юнит был в скане, а потом исчез, то сгенерироваьт такое сообщение для игроков, из чьего скана он исчез. Проверять в конце движения и при изменении скана. Например при взрыве чужого радара или юнита. В идеале откатиться назад по пути движения юнита и показать в сообщении последнюю клетку, где он был виден (только при движении). Но для начала пойдёт и просто клетка начала движения.
Стоит указать тип юнита, где пропал из скана.
10. Перемещение видимых юнитов противника.
Будет очень полезно почитать, что творилось во время хода другого игрока. А также на основании этой игформации и данных об атаках юнитов можно будет сделать проигрывание хода игрока во время своего хода (примерно так, как рисуются юниты при высадке).
Стоит указать тип юнита, начало и конец движения. Если начало или конец вне скана, то хранить -1 в качестве координат или по другому дать признак, что полный путь неизвестен.

Получается, что большинство сообщений адресовано конкретным грокам.
Общие атрибуты каждого сообщения: ID игрока, Тип сообщения.
Для большинства сообщений также нужны координаты и тип юнита.
Для некоторых нужно указать хозяина первого, тип и координаты и хозяина второго юнита.
Для сообщений с ресурсами нужно указать тип ресурса.
Если не делать произвольных текстовых посланий, то можно ограничиться простой структурой данных с постоянной длинной:
1. Адресат (ID игрока, кому сообщение)
2. Тип
3. Координаты1
4. Тип юнита1
5. Хозяин юнита1
6. Координаты2
7. Тип юнита2
8. Хозяин юнита2
9. Тип ресурса/вид науки

Дополнения/предложения/пожелания?