Чат. Часть 3

Во-первых - у меня получилось
Во-вторых - ненавись к Flash-Action-Script и его редактору!

Это не программирование - это скриптоложество! (C) BOR

Из "плюсов"

  • Shift+Del - это не фига не Cut, это просто удаления, раз сто я набивал код заного или откатывал назад
  • По умолчанию - переменные приходящие loadVariablesNum текстовые, т.е. если нужно допустим _root.num+message.length - то это будет например - 20 (если num = 2, а массив пуст)
  • Перекодировка CP1251->Unicode->Utf-8

    Задачу можно разбить на две части
    1. Перекодировка CP1251 в Unicode
    2. Unicode->Utf-8 (про Utf-8 довольно неплохо написано в википедии)

    Unicode (во всяком случае 16), на каждый символ выделяется два байта - первый указатель на таблицу, второй на символ в этой таблице, для кодировки русских букв CP-1251 используется следующая таблица перекодировки (для символов больше 127)

    unsigned short win_cp1251[128]=
    { 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021,
    0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F,

    Чат. Часть 2

    А все так красиво начиналась :)
    Сделав маленький пример и получив с него данные
    loadVariablesNum("http://192.168.0.200/var", 0, "GET");
    обрадовался и стал копать в эту сторону, но! получаю дофига мусора, а именно флэш шлет все переменные, стал копать на XML протокол, но код

    on (press) {
    trace('here');
    var str = 'nick='+_root.nick+'&'+'msg='+_root.message;
    str="http://localhost:8080/chat"+str;
    var my_xmls:XML = new XML(""+_root.nick+""+_root.message+"");
    var myout_xml:XML = new XML();

    Чат

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

    В качестве отдельного куска проекта, я решил реализовать его, для хранения на сервере
    воспользуемся, следующей структурой.


    typedef struct
    {
    int id;
    char type;
    int user_id;
    int timestamp;
    string message;
    } TChatMessage;

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

    Легенда о фрукте

    С давних времен в темных городах (вот так мы сразу окрестили все города лабиринта) - вымерла практически вся растительность
    но лихие инженеры в своих темных лабораториях, варили и проектировали свои зелья.
    Как-то ранним утром, пожилой (лет 40) ученый добился фотосинтеза от пучков неяркого света от излучения минерала рапаппила
    (ого-ого я помню все что забредил), и на лавке пророс элементарный папоротник. В дальнейшем как выяненно очень вкусный и
    и питательный продукт (как руккола в Москве) - и все население стало его жрать(потреблять) +2 к уровню здоровья -1 к ловкости

    Сервер и вопросы

    Вчера вечерком (вернее сказать ближе к середине ночи), решил покодить - а то мозг заплывет
    жиром или наоборот раззжижиться от пива нафик.

    Решено было ударить по серверной части, т.к. в клиентской в принципе меньше работы.
    Пишем именно ту часть которая генерит мир 7 лабиринтов.
    Предполагается (по геймплею) что игрок заходит в какой-то лабиринт по его ид, т.е.
    для первоначального запуска нужно сгенерить 4 лабиринта во всех частях света от славного города Датора.

    Игровая валюта

    Конечно тривиально и очень банально - сделать золото или золотые, но мы пойдем другим путем.

    Среди нескольких вариантов (включая бредовые), выбрано следующее

    Рисуем по маленьку

    Сегодня мало того что понедельник да еще и погода - хмуро, холодно - прям как летом.

    Кодить пока не тянет - решил порисовать, вот так будет примерно выглядить gameplay

    лабиринт - примерный вид

    Во вложении исходный Flash

    Прием данных

    Сегодня попробуем получить данные с сервера и построить по ним карту в Flash.
    В нашу предыдущую заготовку по рисованию карты внесем изменения.
    в initScene() добавим создания еще одного массива для кэширования карты
    oldmap = new Array(mapwidth*mapheight), а также весь массив основной карты заполним значением -1, это будет означать что
    карта "скрыта". Ну для графического оформления сделаем еще один клип star который будем выводить при закрытой карте.

    Передача данных

    Как было выясненно из моего поста Flash может обрабатывать только данные ввиде переменных, теперь
    нам нужно передать наш лабиринт с сервера на клиентскую часть. Для этого нужно лабиринт закодировать и передавать его по частям,
    почему по частям а не целиком? Чтоб игрок который сидит не смог сразу выяснить где он находиться и куда ему сразу идти.

    Примерный протокол передачи данных от клиента к серверу.
    1. запрос общей информации по ID лабиринта - с сервера получаем координаты игрока, размеры карты и ее тип

    RSS-материал