Задать вопрос
  • На чем писать сервер для игры?

    Bloodskys , такие вопросы обычно остаются без решений и вообще являются риторическими, поэтому коммент, а не ответ.

    2КБ/сек - это нисколько даже на одного игрока. Точные данные для примера - клиент RO получал около 1МБ трафика в час, т.е. порядка 17КБ в секунду. И это был крайне экономичный протокол. Сейчас есть куда прожорливее примеры.

    Для сервера хорошо подходит C#, особенно если умеешь конкурентность и параллелизм. Если знаком с микроядерной архитектурой и архитектурой сервисов/микросервисов, то на C# вполне получится создать горизонтально расширяемый сервер с поддержкой сотен тысяч пользователей в онлайне. Разработка на C# значительно быстрее чем на C/C++, а номинальная надежность кода значительно выше чем в C/C++. Быстродействие достигается горизонтальным расширением и параллелизмом, чего в C# добиться значительно проще чем во все тех же C/C++.
    C/C++ - это инструмент для совсем других целей.
  • Сложная бизнес-логика. Как всё учесть?

    GLeBaTi , сервер state-less чтоли?
    От части nirvimel говорит правильно. Но его слова - это лишь вершина айсберга. Дальше, чтобы понять проблему и дать точное решение, тебе придется нарушить NDA (или мне придется его подписать) и рассказать мне все тонкости организации сервера. Только я не могу этим всем заниматься. :)

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

    Дальше, чтобы вносить пояснения и передавать только нужную информацию, мне нужны вопросы от тебя.
  • Сложная бизнес-логика. Как всё учесть?

    GLeBaTi , давай поподробнее. Сейчас все описание ничего не поясняет.
    20 сущностей - каких? Что описывают эти сущности?
    "я должен учесть это во всех местах" - зачем? Если ты это должен, глядя уже на это абстрактное описание, значит что-то с самого начала пошло не так.
    Почему количество сущностей должно увеличиваться со временем?
  • Структура данных типа очереди, позволяющая быстро определить позицию элемента. Есть?

    Сергей , почитай про бинарную кучу (Binary Heap / Priority Queue).
    Это куча на линейном списке, всегда гарантирующая изъятие самого приоритетного элемента со своей вершины, вне зависимости от того, насколько давно элемент попал в нее.

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

    Я не оформляю рекомендацию как ответ т.к. не считаю что это тебе на 100% подойдет. Но этот примитив может помочь тебе думать в нужном направлении.
  • Структура данных типа очереди, позволяющая быстро определить позицию элемента. Есть?

    Сергей , а что означает: "по элементу определить номер его позиции"?
    Чтобы найти нужный инструмент, неплохо бы сперва представить себе его во всех красотах.

    Какая цель перемещения элементов? А для чего нужно знание позиции? Всегда ли удаление происходит только из головы? Всегда ли добавление происходит в хвост?
    Нужно ли выбранный элемент перемещать в сторону хвоста? Или перемещать нужно только в сторону головы?
    Элементы в контейнере уникальны или имеются дубликаты? По ссылке ли хранятся элементы или по значению? Две разные инстанции элемента с одинаковым контентом будут разными или одинаковыми?

    Пока на примете только бинарная куча и интрузивный лист. Но они оба могут не подойти тебе в зависимости от ответов на вопросы выше.
  • Матрицы и выполнение собственных операций с матрицами в OpenGL?

    @MarkusD Куратор тега C++
    Toonas , дерзай. :)
    Линейная алгебра и Аналитическая геометрия - безумно интересные науки! Тебе понравятся.
    А потом, как закончишь хороший универ, буду ждать тебя в рядах игровых программистов. :)
  • В чем суть данной конструкции?

    @MarkusD Куратор тега C++
    Vitaly , это называется:
    // Happy debugging, suckers!
    #define true false
  • Матрицы и выполнение собственных операций с матрицами в OpenGL?

    @MarkusD Куратор тега C++
    Toonas , как непривычно в наше время встретить человека незнакомого с линейной алгеброй. :)
    Да, для понимания матриц и аффинных преобразований тебе стоит взять учебник по "линейке", да потолще, и впитать его в себя.

    Это не ответ конкретно на твой вопрос, это моя рекомендация в общем. Разбирая линейку, думай о 3D, тогда тебе понравится.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , у меня "platform" является только одной из подсистем и планомерно подключается, на ряду с остальным подсистемами, в мастер-заголовке библиотеки. Платформенный код является сервисным для всего остального кода.

    Для тебя, из приведенного тобой примера, я бы сформировал такие включения.
    /// @file	platform/platform.h
    // ...
    
    // lookup include directories.
    #if( BUILD_PLATFORM_WINDOWS_DESKTOP )
    	#include <platform.windows/platform.windows.h>
    #elif( BUILD_PLATFORM_ANDROID )
    	#include <platform.windows/platform.android.h>
    #else
    	#error Unknown platform.
    #endif
    
    // lookup local 'platform' directory.
    #include "File.h"
    // ...
    
    /// @file	platform.windows/platform.windows.h
    // ...
    
    // lookup local 'platform.windows' directory.
    #include "PlatformSpecificFile.h"
    // ...
    
    /// @file	somewhere/in/your/api/file.h
    // ...
    #include <platform/platform/h>
    
    // ...
    File my_file{ file_name, OpeningMode::CreateAlways, AccessOptions::Read, SharingOptions::Read };
    // ...


    Иными словами, не API в платформу, а платформа включается в API, т.к. это API зависит от платформозависимого кода, а не наоборот.

    Я не работаю в Qt, я предпочитаю MSVS. В проекте студии можно поставить игнор на компиляцию файла в строго оговоренной конфигурации проекта. Этим я пользуюсь для того, чтобы содержать ровно один проект как для сборки консольного приложения, так и для оконного или динамической библиотеки.
    Функции main, WinMain и DllMain лежат в разных файлах, которые включаются в сборку проекта только в нужной конфигурации проекта.
    По хорошему, Qt тоже должен так уметь.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    Добавил к ответу пример расщепления класса файла.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , возможно тебе и два проекта библиотек для двух платформ не нужны. Насколько я сейчас понимаю ход твоих мыслей, ты хочешь сделать 3 проекта: один проект GUI для всех платформ и два проекта DLL, по одному для конкретной платформы.

    Только проекта DLL тоже хватит одного, т.е. тебе на самом деле нужны только два связанных Qt проекта - это GUI и API.
    API ты можешь перестроить по описанному мной способу, в результате из одного Qt проекта на разных платформах будет собираться нужный вариант API.
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , Вот сча прочитал твой коммент к Дмитрий , надеюсь что на мой вопрос о надобности динамической линковки ты не станешь так же реагировать. :)
    Иными словами, у тебя уже есть код и тебе хочется меньшей кровью провести экспансию этого кода на другие платформы?
  • Как реализовать кроссплатформенное ПО с библиотеками для Windows/Linux?

    @MarkusD Куратор тега C++
    WayMax , ага, прочитал изменение в вопросе, только они все так же продолжают смущать меня.
    Для чегож тебе все таки нужны динамические модули, когда можно обойтись статической линковкой при сборке для конкретной платформы?
  • Есть ли смысл использовать inline-функцию?

    @MarkusD Куратор тега C++
    Толстый Лорри , inline в теле класса пишут, т.к. это хорошее пояснение качества функции. И const в параметрах и возвращаемых значениях функций тоже пишут, т.к. это важное пояснение качества функции.
    И не важно, игнорируются эти слова компилятором или нет, код должен быть понятным и содержать документацию в себе.
    Иные утверждения - от лени и слабой культуры.

    Иными словами, не стоит быть таким категоричным. :)
  • Как правильно извлечь числа из битового поля?

    @MarkusD Куратор тега C++
    SibVektor , опять же, все зависит от типов, используемых в объединении. Я очень активно использую такие вещи в форматах файлов и при хранении состояний/статусов/флагов сущностей. Главное - это не испортить разметку битового поля. Для этого тебе в помощь вот такая статья: https://habrahabr.ru/post/142662/
  • Как правильно извлечь числа из битового поля?

    @MarkusD Куратор тега C++
    SibVektor , все зависит от типа значений в объединении. Какой именно код выдает тебе 255 вместо -1?
  • Как используются константы и кастинги?

    Геворг , https://github.com/isocpp/CppCoreGuidelines/blob/m...
    Любое число/строковой литерал или булево значение, напрямую подставленное в коде никак не раскрывает смысла самой подстановки.
    Более того, если в нескольких строчках одной функции ты видишь одно и то же число, скажем 0 или 42, один ли смысл оно имеет во всех этих местах? А если это число надо изменить, то во скольких местах его надо изменить? Во всех или только в одном? Или в двух из 5, в каких именно?

    Когда число завернуто в константу, оно становится осмысленным через имя и комментарий константы. Это уже документация. Более того, благодаря этому сразу становится видна область применения этой константы, все места ее использования. В добавок, если константу надо изменить, то меняется она лишь в одном месте кода, без детективов, расследований, интриг и скандалов.

    Я советую для самостоятельного ответа на твои вопросы сперва прочитать книгу Дастина Босуелла "Читаемый код или Программирование как искусство".
  • Как определить случайное взятие ASCII-символов?

    @MarkusD Куратор тега C++
    kenny182 , а "оооочень большой" размер - это сколько? Больше 2Мб но меньше 10?
    Ок, маска ASCII таблицы - 0x80, если байт не маскируется, то его можно считать печатаемым в ASCII. Только как ты бинарные данные отличишь от текстовых с помощью этой маски?
  • Подходит ли python для создания GUI бота для MMORPG игр?

    ForSer , для питона приоритеты пунктов в обратном порядке.
    Бот для сапера для начала.

    И не лги себе, все этим спортивным интересом прикрываются. В первую очередь ты уже нарушил лицензионное соглашение с издателем ММО игры.
  • Подходит ли python для создания GUI бота для MMORPG игр?

    ForSer , "будет ли правильно пытаться реализовать" - нет. Аргументов не привожу, т.к. тебе же хочется просто изучить питон поглубже. Так что, от попытки отговаривать тебя никто не станет.

    "Или лучше учить для такой цели какой то из низкоуровневых языков программирования?" - стоп, ты все таки против правил игры пойти хочешь или просто получше питон изучить?

    "насколько это сложная задача если учесть" - начни с IG бота для обычного сапера.

    "мне же интересно возможно ли читать данные из памяти процесса" - Люди это даже на AutoIt делают. О продуктивности этого занятия я рассуждать не берусь.