• Как реализуются очереди в онлайн-играх?

    damirazo
    @damirazo
    Software developer
    Как-то потребовалось создать модуль для браузерной игры, отвечающий за восстановления уровня жизни персонажа. Задача решилась денормализацией БД — добавил поле hp_last_update. Значение данного поля обновлялось при каждом обращении к объекту пользователя, вне зависимости от того есть он в сети или нет. А дальше уже дело техники — у нас есть текущее значение уровня жизни и максимально допустимое, а также скорость ее восстановления. С помощью несложной формулы мы, при следующем обновлении, можем подсчитать на сколько должен был восстановиться уровень жизни с момента предыдущего обновления и меняем данный параметр. Подобный метод применим и к другим игровым объектам.
    Ответ написан
    3 комментария
  • Как реализуются очереди в онлайн-играх?

    Отдельная таблица для текущих задач с полем времени выполнения. По необходимости проверяется время если оно подошло то, задача выполняется. Выполненную задачу лучше удалять (хотя зависит от ситуации).
    За абсолютным «реалтайм» не гонитесь — это не достижимо, погрешности будут всегда.
    Ответ написан
    Комментировать
  • [php] Защита от Sql и XSS

    Я всегда делал так, от sql атак.

    // Функция экранирования переменных
    function quote_smart($value)
    {
        // если magic_quotes_gpc включена - используем stripslashes
        if (get_magic_quotes_gpc()) {
            $value = stripslashes($value);
        }
        // Если переменная - число, то экранировать её не нужно
        // если нет - то окружем её кавычками, и экранируем
        if (!is_numeric($value)) {
            $value = mysql_real_escape_string($value);
        }
        return $value;
    }
    
    
    $info = $Database->prepare("SELECT money FROM users WHERE text = '".quote_smart($_POST["text"])."'");
    
    


    Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен.

    Не верите мне читайте тут http://www.php.ru/manual/function.mysql-real-escape-string.html
    Ответ написан
    3 комментария
  • Практика программирования на PHP

    Знаю, что получу много минусов, но всё таки…

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

    Меня в своё время учили гуру — «Решай задачи, в которых сам чёрт ногу сломит, только так научишься». Проверил этот совет на себе и полностью с ним согласен. Только решение сложных задач действительно учит.

    Выберите сложную задачу (написать движок для соц.сети, браузерную игру, портал и т.д.) и работайте над ней.
    Ответ написан
    5 комментариев