C++

Значок письма

  Решил добавить значок письма, который бы показывал есть ли новые (не прочитанные) письма или нет. Для этого нужно в структуре TUser добавить флажок - есть ли новые письма newmail, но это только 10% дела - самое главное это заполнять этот флаг.

Почта и письма

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

Письма можно удалять из входящих и исходящих (конечно нефига они не удаляются, а лишь помечаются как "не показывать для автора" и " не показывать для получателя".

Вялотекущие изменения

Изменения навыков, навык лечение корректировался.
Примерно так:

Дизайн & математика

Задачка:
Есть n объектов, которые нужно рандомно разбросать по карте, но - одни объекты должны появляться чаще, а другие реже. Иными словами это как сделать заданное неравномерное распределение :)

Решим что для всех n объектов есть некий коэффициент частоты:
double kk[8]={1,1,0.5,2,2,0.3,0.9};
Причем сами цифры (их абсолютная величина) - не играет роли, нам важна их относительная величина (относительно к другим).

Подсчитаем общий вес: double k_s = sum_double(kk,8);
Он равен = 7.7 :) Хорошее число между прочим получилось.

Движок

На днях мы решили переписать движок игры, не устраивало то что раньше казалось фичей, а именно постепенная загрузка с передачей всех данных, начиная с первого хода.

Как выглядело - если игрок жал F5, то происходило загрузка игры как бы с начала, с пошаговым просмотром всех выполненных действий.
С одной стороны - прикольно, а с другой - время-то тикает, и если много ходов было сделано можно и свой ход пропустить.

Глобальные переделки

Вообще ничего не предвещало беды, загрузил тестовый лабиринт с 10 пауками.
Сделал три шага и .... Очень долго ждал. На вид игры было похоже, что она зависла. Через секунд 20 - клиент получает от сервера 100 сообщений, о новых ходах, о ходах мобов, ну и завершающий что ход опять у игрока.

Дело в том, что было сделано, что при переходе хода - срабатывает функция computerTurn, в которой происходят все действия компьютерного игрока, а затем жмется кнопка конец хода.

А если следующий игрок тоже компьютер - то опять тоже самое.

Linux-сервер

Сегодня пытался скопилить проект под Linux, куча ошибок – это если ничего не сказать, очень много и много.
От неказистых (например #include <mem.h> вместо #include <memory.h>) до более больших (в Win – это в stdlib.h, а в Lin – unistd.h)

После некоторого времени оно запустилось! Но сразу выпало, причем на прорисовки примитивного окна.

Наконец-то чат!

Вообще вроде бы для игрового чата, было уже все готово – и база и цвета и движок, но вот оказалось, что все вместе это не работало.

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

Легко решилось внедрением в события переменной кому, если 0 – то всем.

ИИ. Обход территории. Дополнение

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

Для флага и индекса использую одну переменную в структуре TMazeCreature - это int cPoint.
В самом начале переменная равная 0 и означает, что существо (моб) прошел(узнал) не всю карту.
В случае когда карта пройдена выполняется инструкции:

ИИ. Патрулирование

Одним из важнейших составляющих игры является наличие так называемого искусственного интеллекта. Чем хуже ИИ – тем скучнее игра.

Чаще всего создатели игр компенсируют низкий интеллект мобов (компьютерных игроков), за счет повышения им характеристик и/или обмундирования.

Этот подход мне нам не очень нравится, как и вариант когда компьютерный игрок знает «чуть больше», чем обычный. Например, точное расположение сундуков, противников, ловушек.

В идеале, хотелось бы создать такой ИИ, что при игра с ним, не сильно отличалась от игры с реальным противников.

RSS-материал