• Как извлечь информацию из игры для анализа?

    @nirvimel
    Не существует никаких универсальных методов, подходящих для всех случаев. Такой вопрос можно задавать только по отношению к конкретной игре. В целом тут не обойтись без реверс-инжиниринга (если только игра не open source).
    Из числа самых общих подходов к этой проблеме можно упомянуть следующее (от простого к сложному):
    1. Анализ формата save-файла и извлечение необходимых данных из него. Часто это оказывается единственно возможный путь, не смотря на кажущееся неудобство такого подхода.
    2. Вычисление статических адресов в адресном пространстве процесса, по которым находятся переменные, в которых хранятся какие-то важные игровые параметры. Для этого давно существуют такие автоматизированные инструменты как ArtMoney. Но против современных игр все это практически бесполезно, так как все структуры данных хранятся в динамической памяти.
    3. Гонять игру под отладчиком, выявлять функции (точки входов в них) которые вызываются на определенные игровые события, анализировать параметры этих функций, искать среди них переменные, отвечающие за какие-то значимые игровые параметры. Потом писать патч к игре, в котором перехватывать эти функции и сохранять передаваемые параметру куда-нибудь, откуда их можно легко получить снаружи.
    Ответ написан
    3 комментария
  • Почему не работает оператор сравнения?

    zagayevskiy
    @zagayevskiy
    Android developer at Yandex
    Всё просто. В методе Input вы объявляете переменные х, у, которые перекрывают соответствующие переменные класса. Вводите локальные, а х, у, принадлежащие классу, остаются нулями.
    Пара замечаний:
    вместо Input лучше переопределить friend isream& operator>>(istream& input, Points& point), в котопом вводить x, y
    Вместо .operator== лучше писать а==b, вы его для этого создаёте, по идее.
    Ответ написан
    Комментировать
  • Легально ли использование популярных композиций в компьютерных играх, распространяемых через площадку steam?

    RusTech
    @RusTech
    Нельзя использовать чужую музыку в любой форме без заключения договора. Гуглите договор о предоставлении права использования музыкального произведения на условиях неисключительной лицензии.
    Ответ написан
    Комментировать
  • Как создать динамический массив из объектов класса?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Используйте vector и не думайте ни о чем
    std::vector<Test> myTests(4, Test(777));
    std::cout << myTests[0].get_k(); // 777
    Ответ написан
    Комментировать
  • Вызов всех методов класса в одну строку. Возможно?

    @FireGM
    Не совсем понимаю зачем, но чтобы вызывать функции в одну строку, достаточно в функции в конце возвращать self.

    class S():
        kk = 0
        def m(self):
            kk+=1
            return self
        
        def p(self):
            print(self.kk)
            return self
    
    s = S().m().m().m().p().m().m().p()

    выведет "3" и "5"
    Ответ написан
    1 комментарий
  • Модульность в C++ как это может выглядеть?

    Nipheris
    @Nipheris Куратор тега C++
    Пакеты Джавы и сборки Дотнета - это про модули в терминах крупной структуры приложения, они тут не при чем.
    Речь идет о модулях на уровне программного кода.
    Хотите примерно понять как это будет выглядеть - посмотрите, например, на юниты в Паскале. Это примерно и есть то, что хотят получить в конечном счёте - возможность по-человечески, на уровне языка, объявлять интерфейсы модулей, подключать их друг к другу, следить за зависимостями между модулями (разве что модули C++ вроде как не привязываются к единице компиляции, в отличие от юнитов Паскаля).
    Сейчас в C++ это достигается большим хаком на уровне препроцессора (а не компилятора языка), называющимся include-файлы. Этот механизм, основанный на правиле "много объявлений, одно определение", унаследован из Си, и по сути представляет собой замену отсутствующей возможности передавать метаданные от одной единицы компиляции к другой при сборке проекта. С помощью инклудов вы напихиваете в один файл ВСЕ, что может потребоваться компилятору. По факту выливается в то, что бОльшая часть единицы компиляции после обработки препроцессором - это содержимое инклуд-файлов. И всё это обрабатывается компилятором каждый раз заново (в каждой единице компиляции). В Си это еще куда ни шло, но в плюсах, где многие библиотеки содержат тяжелый шаблонный код, это становится совсем печальным. Помимо этого, сама работа с инклудами - это непростая практика, и если следовать ей неверно, особенно новичкам, они могут получить от компилятора удивительнейшие ошибки. За примером далеко ходить не надо - попробуйте в большом проекте не ставить защиту от множественного инклуда.
    Вся эта препроцессорная магия красоты и прозрачности языку не добавляет. Пока в других языках пишут "package foobar" и "import foobar", мы пишем "#pragma once" или даже "#ifndef FOOBAR_H ...". Уже грустно как-то становится.

    Вышесказанное в одно предложение: модули хотят сделать настоящими, вместо имитации средствами препроцессора.
    Ответ написан
    Комментировать
  • Сравнение двух фотографий?

    @IceJOKER
    Web/Android developer
    Вроде то, что вам нужно - opencv.org
    docs.opencv.org/3.0-beta/doc/py_tutorials/py_tutor...
    Ответ написан
    Комментировать
  • Как изучать дальше(c++)?

    GavriKos
    @GavriKos
    Прочитав книгу и посмотрев серию уроков вы не изучили C++ аж никак. Вам нужна практика. Придумайте себе любую задачу и решите ее. И поиск юзайте - вопрос поднимался много раз.
    Ответ написан
    1 комментарий
  • Почему в функцию передаётся только первый элемент массива?

    AxisPod
    @AxisPod
    Видимо компилируете 32битный бинарник, был бы 64битный, показало бы 2 элемента. Потому что sizeof(my_array) в вашем случае вернет не размер массива, а размер указателя на массив, а он всегда равен sizeof(int) в вашем случае. Размер надо прокидывать снаружи. Компилятор не таскает размер массива вместе с массивом.
    Ответ написан
  • "Python experience is plus" в вакансии Senior C++ Developer и похожих. С чем связано?

    GavriKos
    @GavriKos
    На питоне часто пишут какие то мелкие тулзы для внутренних нужд компании. Возможно именно это и есть причина. А вообще - вы можете прийти на собеседование и спросить - зачем им питон :-)
    Ответ написан
    Комментировать
  • Можно ли возвращать лямбды?

    @MiiNiPaa
    Вот так делать - это нормально?
    Вполне

    И что в таком случае возвращается, указатель на функцию или сама функция?
    Функциональный объект. Лямбда — не функция, она может быть приведена к указателю на функцию в некоторых случаях.

    Если возвращается указатель, то где хранится сама функция, в куче или стеке?
    «Функция» лямбды хранится там же, где и остальной код. На лету ничего не собирается и не компилируется. Лямбда это синтаксический сахар для объявления класса с перегруженым оператором вызова функции.

    И еще один вопрос, по этой же теме:
    Это сокращенная запись вот такой конструкции:
    Или что то другое?
    lambda имеет уникальный тип. Это не функция (но может быть приведена к ней в данном случае).
    Ответ написан
    Комментировать
  • Где хранится строка, которую возвращает mmap(2)?

    @MiiNiPaa
    Почему бы не почитать документацию.
    man7.org/linux/man-pages/man2/mmap.2.html

    1) mmap не возвращает строку. Он возвращает указатель на начало замапленой области (void*).

    2) Освобождать область не обязательно, она освободится, когда процесс будет завершён. Но если хочется, есть unmap.

    3) Вызывать free на чём-нибудь не выделеным malloc категорически нельзя.
    Ответ написан
    Комментировать
  • Как соединить сигнал QGraphicsScene и слот QMainWindow?

    Zifix
    @Zifix Куратор тега Qt
    Barbatum
    Объект класса GraphicsScene делаем полем MainWindow и все спокойно привязываем в конструкторе главного окна.
    Ответ написан
    Комментировать
  • Как записать в самое начало строки?

    GavriKos
    @GavriKos
    Читаете весь файл в переменную. В переменной меняете что вам нужно. Всю переменную записываете в файл, удалив все что там было до этого.
    Ответ написан
    Комментировать
  • Указатель на указатель?

    @MiiNiPaa
    В современном С++ вообще указателей стараются избегать. Но вот несколько примеров:

    Псевдо2D массив — массив массивов

    Массив указателей. Например вектор хранит внутри указатель на буфер. .data() возвращает этот указатель. Если там хранятся указатели, получается указатель на указатель.

    Когда нужно изменить указатель и используется АПИ С: указатель на объект используется если нужно изменить объект так, чтобы ето было видно вне изменяющей функции. В данном случае объект — другой указатель.
    Ответ написан
    2 комментария
  • На чем написать бота для онлайн игры?

    @alexxandr
    you'll see in memory only 0xDEADFACE
    На Си. Это единственный язык, для которого я помню все операторы и функции языка.
    Ответ написан
    2 комментария
  • Найти медиану двух отсортированных массивов?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    А в чём проблема? Длины массивов известны, берём полусумму длин и сдвигаемся параллельно по обоим массивам на эту величину, аналогично сортировке слиянием.
    Ватиант на JS, то что с ходу получилось.
    arr1 = [1, 3, 5, 7];
    arr2 = [2, 6, 10];
    p1 = arr1.length;
    p2 = arr2.length;
    n = p1+p2;
    if (n == 0)
      n--;
    med = 0;
    p1--;
    p2--;
    while (0 < n) {
      if (p2 < 0 || (p1 >= 0 && arr1[p1] > arr2[p2]))
        med = arr1[p1--];
      else
        med = arr2[p2--];
      n -= 2;
    }
    if (0 == n) {
      if (p2 < 0 || (p1 >= 0 && arr1[p1] > arr2[p2]))
        med = med+arr1[p1];
      else
        med = med+arr2[p2];
      med /= 2;
    }
    console.log(med);


    P.S. Если предварительно найти область пересечения массивов, то можно уменьшить объём просматриваемых данных.
    Ответ написан
    8 комментариев
  • Лафоре или Липпман?

    gbg
    @gbg Куратор тега C++
    Любые ответы на любые вопросы
    Прочитать обе
    Ответ написан
    Комментировать
  • Struct - что это?

    @sdxq
    Структуры в C++ эквивалентны классам, модификатор доступа по умолчанию в структурах - public, в классах - private.
    Ответ написан
    Комментировать