Pull to refresh
13
0
Send message

Пишем сериализатор для сетевой игры на C++11

Reading time18 min
Views25K
Написать этот пост меня вдохновила замечательная статья в блоге Gaffer on Games «Reading and Writing Packets» и неуёмная тяга автоматизировать всё и вся (особенно написание кода на C++!).

Начнём с постановки задачи. Мы пишем сетевую игру (и сразу MMORPG, конечно же!), и независимо от архитектуры у нас возникает необходимость постоянно посылать и получать данные по сети. У нас, скорее всего, возникнет необходимость посылать несколько разных типов пакетов (действия игроков, обновления игрового мира, просто-напросто аутентификация, в конце концов!), и для каждого у нас должна быть функция чтения и функция записи. Казалось бы, не вопрос сесть и написать спокойно эти две функции и не нервничать, однако у нас сразу же возникает ряд проблем.

  • Выбор формата. Если бы мы писали простенькую игру на JavaScript, нас бы устроил JSON или любой его самописный родственник. Но мы пишем серьёзную многопользовательскую игру, требовательную к трафику; мы не можем позволить себе отправлять ~16 байт на float вместо четырёх. Значит, нам нужен «сырой» двоичный формат. Однако, двоичные данные усложняют отладку; было бы здорово, если бы мы могли менять формат в любой момент, не переписывая целиком все наши функции чтения/записи.
  • Проблемы безопасности. Первое правило сетевой игры: не доверяй данным, присланным клиентом! Функция чтения должна уметь оборваться в любой момент и вернуть false, если что-то пошло не так. При этом использовать исключения считается неважной идеей, поскольку они слишком медленные. Мамкин хакер пусть и не сломает ваш сервер, но вполне может ощутимо замедлить его беспрерывными эксепшнами. Но вручную писать код, состоящий из if'ов и return'ов, неприятно и неэстетично.
  • Повторяющийся код. Функции чтения и записи похожи, да не совсем. Необходимость изменить структуру пакета приводит к необходимости поменять две функции, что рано или поздно приведёт к тому, что вы забудете поменять одну из них или поменяете их по-разному, что приведёт к трудно отлавливаемым багам. Как справедливо замечает Gaffer on Games, it is really bloody annoying to maintain separate read and write functions.

Всех интересующихся тем, как Бендер выполнил своё обещание и при этом решил обозначенные проблемы, прошу под кат.
Читать дальше →
Total votes 36: ↑36 and ↓0+36
Comments33

Искусственные нейронные сети простыми словами

Reading time7 min
Views212K
image

Когда, за бутылкой пива, я заводил разговор о нейронных сетях — люди обычно начинали боязливо на меня смотреть, грустнели, иногда у них начинал дёргаться глаз, а в крайних случаях они залезали под стол. Но, на самом деле, эти сети просты и интуитивны. Да-да, именно так! И, позвольте, я вам это докажу!

Допустим, я знаю о девушке две вещи — симпатична она мне или нет, а также, есть ли о чём мне с ней поговорить. Если есть, то будем считать это единицей, если нет, то — нулём. Аналогичный принцип возьмем и для внешности. Вопрос: “В какую девушку я влюблюсь и почему?”


Можно подумать просто и бескомпромиссно: “Если симпатична и есть о чём поговорить, то влюблюсь. Если ни то и ни другое, то — увольте.”

Но что если дама мне симпатична, но с ней не о чем разговаривать? Или наоборот?
Total votes 60: ↑59 and ↓1+58
Comments92

Мультиплеер в быстрых играх (Часть III: появление врага)

Reading time4 min
Views54K


  1. Части I, II (синглплеер с авторитарным сервером)
  2. Часть III (Появление врага)
  3. Часть IV (Хэдшот!)

Введение


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

В этой статье мы рассмотрим последствия одновременного подключения нескольких игроков к одному серверу.
Читать дальше →
Total votes 67: ↑66 and ↓1+65
Comments54

Мультиплеер в быстрых играх (части I, II)

Reading time7 min
Views141K


  1. Части I, II (синглплеер с авторитарным сервером)
  2. Часть III (Появление врага)
  3. Часть IV (Хэдшот!)


Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

Разработка игры — само по себе непростое занятие. Но мультиплеерные игры создают совершенно новые проблемы, требующие разрешения. Забавно, что у наших проблем всего две причины: человеческая натура и законы физики. Законы физики привнесут проблемы из области теории относительности, а человеческая натура не даст нам доверять сообщениям с клиента.
Читать дальше →
Total votes 136: ↑132 and ↓4+128
Comments109

Не IoT, а малина! Строим IoT-проект на Raspberry Pi с Windows 10 и DeviceHive

Reading time7 min
Views52K
Привет, Хабр.

Наверное каждый разработчик на определенном этапе задумывался о собственном IoT-проекте. Internet of Things сейчас поистине вездесущ и многим из нас хочется попробовать свои силы. Но не все знают, с чего начать и за что браться в первую очередь. Сегодня давайте посмотрим, как легко и непринужденно запустить свой собственный IoT-проект под Raspberry Pi 2, используя Windows 10 IoT Core и DeviceHive.

Деплоим Windows 10 приложения на Raspberry Pi 2


Для начала давайте установим Windows 10 IoT Core на Raspberry Pi. Для этого нам потребуется Windows 10 IoT Core Dashboard, который можно взять вот здесь. Там же можно при желании скачать отдельно ISO-образ, но особого смысла в этом нет — инструмент сделает это за вас.
Читать дальше
Total votes 21: ↑18 and ↓3+15
Comments8

Скоростная разработка Unity3D игры на конкурс

Reading time11 min
Views24K
В данной статье я расскажу про интересные и немного неочевидные моменты разработки видеоигры в сжатые сроки: по регламенту конкурса, работоспособную демку необходимо сдать в течение недели, а релиз — в течение двух недель. Статья предназначена для тех, кто уже игрался с Unity3D, но еще не делал на этом игровом движке никаких проектов сложнее HelloWorld’а.

Картинка для привлечения внимания — скриншот игры.

image
Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments10

Visual Studio Online: непрерывная интеграция и тестирование

Reading time10 min
Views20K


Visual Studio Online, как и Team Foundation Server 2015, обладает возможностями для реализации процесса непрерывной интеграции.
 
В этой статье мы рассмотрим пример использования Visual Studio Online (VSO) с репозиторием Git, а также способы настройки процессов непрерывной интеграции, тестирования и автоматического развертывания.
 
Настройка сервиса Visual Studio Online один из самых быстрых способов для организации и планирования процесса сборки и развертывания приложений для различных платформ. Сервис в течение нескольких минут развернется и запустится на нашей облачной инфраструктуре без необходимости установки или настройки на отдельном сервере.
Читать дальше →
Total votes 20: ↑18 and ↓2+16
Comments4

Большой список научно-фантастических сериалов

Reading time20 min
Views416K
image
Кадр из заставки сериала «Грань»

Предисловие

На Geektimes и Habrahabr уже были статьи со списком Sci-Fi сериалов (Фантастические сериалы — обзор от фаната, Фантастические сериалы и др.). Но все они либо содержали достаточно мало сериалов и/или поверхностную информацию о них самих, либо были предвзяты в отношении тех или иных сериалов.

В данной публикации я постараюсь предоставить большой список научно-фантастических сериалов. А благодаря голосованию — узнать какие сериалы на самом деле нравятся пользователям Geektimes.
Читать дальше →
Total votes 58: ↑47 and ↓11+36
Comments189

Издание в Стиме с минимальными затратами

Reading time3 min
Views58K
Исправление от 07.05.2016
В сети слишком часто ссылаются на этот мой текст, поэтому я хочу предостеречь людей: я не несу никакой гарантии за достоверность данных, рассказанных тут полгода назад. По хорошему, я хотел бы удалить эту статью, но не вижу такой кнопки в интерфейсе сайта. Тем не менее, я счел необходимым удалить некоторые пункты этим исправлением.


Эта статья мой личный опыт размещения игры в Стиме, и в ней я расскажу о тех моментах, которые беспокоили меня самого в процессе этого дела. Надеюсь, она поможет тем, кто решит пройти этим же путём. Этим немного особенным образом, дорогой минимальных усилий.
Читать дальше →
Total votes 107: ↑102 and ↓5+97
Comments66

PE (Portable Executable): На странных берегах

Reading time18 min
Views150K


Эта статья представляет из себя рассказ о том как устроены исполняемые файлы (в точку! Это именно те штуки, которые получаются после компиляции приложений с расширением .exe). После того, как написан код, подключены библиотеки, подгружены к проекту ресурсы (иконки для окон, какие-либо текстовые файлы, картинки и прочее) всё это компонуется в один единственный исполняемый файл, преимущественно с расширением .exe. Вот именно в этот омут мы и погрузимся.
*Статья находится под эгидой «для начинающих» поэтому будет изобиловать схемами и описанием важных элементов загрузки.
На палубу
Total votes 37: ↑32 and ↓5+27
Comments22

Секс в виртуальной реальности уже на подходе: игрушки готовы (18+)

Reading time6 min
Views86K
image

Примечание: данный пост содержит графические изображения и описания сексуального характера.

Вы лежите на кровати. Осматриваетесь. Заходит порнозвезда. Садится сверху. И как только она это делает, вы чувствуете ее движения.

Но вы не знаете ни одной порнозвезды. Вы мнительный девственник. Самое близкое, что у вас есть, наиболее напоминающее девушку, — это очки виртуальной реальности Oculus Rift второго поколения. Или скоро появятся ;-)
Читать дальше →
Total votes 47: ↑43 and ↓4+39
Comments25

Unity 5 uNet – новая сетевая подсистема. Этюд по авторитарной архитектуре

Reading time8 min
Views38K
image

Пример реализации сетевой архитектуры в Unity3D с авторитарным сервером


В виду того, что:
а) старые сетевые принципы Unity3D, как говорится, устарели;
б) я всё равно не понимал, как у меня заработало то колдунство.
в) назойливо появился новый метод и начал прыгать в глаза при каждом запуске Unity.
я решил, что надо в сетевом обмене разобраться плотнее и устранить область “here be dragons”.
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments7

Как быстро раздать wifi с ноутбука — 3 простых команды

Reading time2 min
Views719K
Периодически я сталкиваюсь с ситуациями, когда необходимо быстро настроить раздачу интернета через WiFi со своего ноутбука и под рукой нет специальной программы. Вот и сейчас мой роутер приказал долго жить и оставил дом без интернета. А не так давно телефон друга отказался подключаться к моему роутеру и мы быстро организовали дополнительный wifi-сигнал с моего ноута, что спасло ситуацию.

И помогают мне в этом 3 команды:
netsh wlan set hostednetwork mode=allow
netsh wlan set hostednetwork mode=allow ssid=FastWifi key=12345678 keyUsage=persistent
netsh wlan start hostednetwork

Под катом я детально расскажу как и что нужно делать и покажу на примере настройки Windows 7.

Читать дальше →
Total votes 66: ↑39 and ↓27+12
Comments21

Диздок, или написание проектной документации

Reading time8 min
Views95K
Диздок упоминают в разговорах, о нём шепчутся на форумах, примеры его ищут и зелёные новички, и бывалые разработчики. Случается, что под тусклым светом уличного фонаря происходит сделка. Фигура в тёмном капюшоне украдкой передаёт ссылку на «Месть курочки Рябы». Конечно, таинственный гонец не имеет злого умысла, но деяние совершено…


Читать дальше →
Total votes 19: ↑18 and ↓1+17
Comments5

Возрастной рейтинг игр магазина Windows понятным языком

Reading time4 min
Views11K

Не секрет, что в России c 01.09.2012 года были введены возрастные ограничения на ТВ, поэтому совсем неудивительно, что ограничения по возрасту распространяются и на игры в Windows Store. Учитывая, что вы можете предоставить вашу игру для рынков различных стран, желательно знать и особенности иноземного лицензирования.

Для тех, кому тяжело читать мануалы, кто предпочитает отсутствие лишний подробностей и готов смириться с довольно вольным языком, я постараюсь под катом «на пальцах» объяснить, как получить рейтинг для игры.
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments8

Jammer: глушим GSM, 3G, 4G, WiMAX, Yota

Reading time3 min
Views222K
Мы живем в свободной стране. Любой может приобрести «игрушку», за которую в США светит штраф $112,000 (джаммеры так же признаны вне закона в Англии, Странах Евросоюза, Австралии, Канаде, Индии, Сингапуре и пр)

Пока есть возможность («пока лопух не догадался»), я взял на обзор одну из популярных гражданских глушилок.

Обзор 5-канальной глушилки ГРН40-А5

В 2012 году обсуждался вопрос широкого использования GSM-глушилок в общественных местах.
В 2014 российские разработчики представили свой аппарат для ЕГЭ.
В 2014 журнал «Хакер» признал глушилки (jammer) полезным гаджетом.
В феврале 2015 года африканский злоумышленник протащил глушилку в парламент.

Что интересно, началась веселуха и на глушилки появляются антиглушилки (и обнаружители глушилок), а на них в свою очередь появляются глушилки антиглушилок и тд.
ТТХ
Общая выходная мощность: 12 Вт
Размер прибора: 21*17*6 мм
Вес устройства: 2 кг
Питание: АС:110/220V — DC:5V, 12A
Потребляемая мощность устройства: 30 Вт
Подавляемые системы:
CDMA-800, GSM-900 и GSM-1800, PHS-1900, 3G, 4G, LTE, WIMAX
Рабочие температуры -40℃ to +55℃
Расстояние эффективного подавления регулируемое, от 1 до 80 м (в зависимости от близости базовой станции и прочих условий)


Читать дальше →
Total votes 46: ↑37 and ↓9+28
Comments32

Анализ алгоритмов аудиоаналитики

Reading time13 min
Views29K
Разработки Синезис не ограничиваются одной лишь видеоаналитикой. Мы занимаемся и аудиоаналитикой. Вот о ней-то мы и хотели сегодня вам рассказать. Из этой статьи вы узнаете о наиболее известных аудиоаналитических системах, а также алгоритмах и их специфике. В конце материала – традиционно – список источников и полезных ссылок, в том числе аудиобиблиотек.

Осторожно: статья может долго грузиться — много картинок.
Автор: Михаил Антоненко.
Читать дальше →
Total votes 35: ↑35 and ↓0+35
Comments0

Чтобы распознавать картинки, не нужно распознавать картинки

Reading time18 min
Views236K
Посмотрите на это фото.



Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
Осторожно, тяжелые гифки
Total votes 263: ↑258 and ↓5+253
Comments104

Эмуляция носителя FAT32 на stm32f4

Reading time6 min
Views53K


Недавно возникла данная задача — эмуляция носителя FAT32 на stm32f4.

Её необычность заключается в том, что среди обвязки микроконтроллера вовсе может не быть накопителя.

В моём случае накопитель был, но правила работы с ним не позволяли разместить файловую систему. В ТЗ, тем не менее, присутствовало требование организовать Mass Storage интерфейс для доступа к данным.

Результатом работы явился модуль, который я озаглавил «emfat», состоящий из одноимённого .h и .c файла.

Модуль независим от платформы. В прилагаемом примере он работает на плате stm32f4discovery.

Функция модуля — отдавать куски файловой системы, которые запросит usb-host, подставляя пользовательские данные, если тот пытается считать некоторый файл.
Читать дальше →
Total votes 70: ↑70 and ↓0+70
Comments36

Пять популярных мифов про C++, часть 2

Reading time17 min
Views46K
Часть 1

4.2 Разделённое владение shared_ptr

Не у каждого объекта может быть один владелец. Нам надо убедиться, что объект уничтожен и освобождён, когда исчезает последняя ссылка на него. Таким образом, нам необходима модель разделённого владения объектом. Допустим, у нас есть синхронная очередь, sync_queue, для общения между задачами. Отправитель и получатель получают по указателю на sync_queue:

void startup() 
{ 
  sync_queue* p = new sync_queue{200}; // опасность! 
  thread t1 {task1,iqueue,p}; // task1 читает из *iqueue и пишет в *p 
  thread t2 {task2,p,oqueue}; // task2 читает из *p и пишет в *oqueue 
  t1.detach(); 
  t2.detach(); 
} 

Читать дальше →
Total votes 48: ↑43 and ↓5+38
Comments62
1
23 ...

Information

Rating
Does not participate
Registered
Activity