Решил добавить значок письма, который бы показывал есть ли новые (не прочитанные) письма или нет. Для этого нужно в структуре 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, куча ошибок – это если ничего не сказать, очень много и много.
От неказистых (например #include <mem.h> вместо #include <memory.h>) до более больших (в Win – это в stdlib.h, а в Lin – unistd.h)
После некоторого времени оно запустилось! Но сразу выпало, причем на прорисовки примитивного окна.
Вообще вроде бы для игрового чата, было уже все готово – и база и цвета и движок, но вот оказалось, что все вместе это не работало.
Во-первых, оказалось, что еще не совсем внедрена система передачи событий конкретному игроку, и вроде бы про это говорилось еще в реализации сундуков, но оказывается в коде этого нет. Либо не доделали, либо откатили в процессе разработки.
Легко решилось внедрением в события переменной кому, если 0 – то всем.
Вообще думал сам алгоритм патрулирования при открытой уже карты - легкое дело, но чуть-чуть застопорился.
Потому напишу алгоритм тут.
Для флага и индекса использую одну переменную в структуре TMazeCreature - это int cPoint.
В самом начале переменная равная 0 и означает, что существо (моб) прошел(узнал) не всю карту.
В случае когда карта пройдена выполняется инструкции:
Одним из важнейших составляющих игры является наличие так называемого искусственного интеллекта. Чем хуже ИИ – тем скучнее игра.
Чаще всего создатели игр компенсируют низкий интеллект мобов (компьютерных игроков), за счет повышения им характеристик и/или обмундирования.
Этот подход мне нам не очень нравится, как и вариант когда компьютерный игрок знает «чуть больше», чем обычный. Например, точное расположение сундуков, противников, ловушек.
В идеале, хотелось бы создать такой ИИ, что при игра с ним, не сильно отличалась от игры с реальным противников.