Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
#1

Ориентация бота в игре - C++

25.01.2013, 19:57. Просмотров 2355. Ответов 43
Метки нет (Все метки)

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

Добавлено через 48 минут
up>
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2013, 19:57     Ориентация бота в игре
Посмотрите здесь:

Интеллект бота в игре "Покер на костях" - C++
Вот правила Необходимо так же 5 кубиков. Цель игры: составить наиболее выгодную покерную комбинацию из пяти игральных костей. Количество...

Ориентация треугольника в пространстве - C++
Все доброго времени суток, вообщем пытаюсь понять, как определить ориентацию треугольника в пространстве. Для плоскости нашёл, но вот с 3d...

Дано символ C - исходная ориентация локатора и целые числа N1 и N2 - две посланные команды. Вывести ориентацию после выполнения этих команд - C++
Здравствуйтевот само условие в C++ сколкьо думал,сам то я начинающий но к правильному решению прийти немогу,прошу помощи. Локатор...

Как создать бота? - C++
Как сделать прорамму бота? Заходишь, она пишет - Введите имя: вводим имя и чтобы она из файлика какого ни будь брала базу типа ...

Разработка бота-асистента - C++
Всем привет. Появилась идея написания бота-асистента.Работать должен на Linux/Windows(больше акцент на Linux) В чем суть: при запуске...

Перемещения р*бота (switch) - C++
Робот может перемещаться в четырех направлениях ("С" — север, "3" — запад. "Ю" — юг, "В" — восток) и принимать три цифровые команды: 0...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
27.01.2013, 21:56     Ориентация бота в игре #21
denis0612,
C++
1
2
LPCTSTR lpClassName,    // указатель на имя класса
LPCTSTR lpWindowName    // указатель на имя окна
Добавлено через 3 минуты
Если заголовок все время меняется, но содержит при этом какую то постоянную надпись, тогда можно с помощью Enum перечислять окна, смотреть какая там надпись в заголовке, и если подходит под твое описание запоминать HWND окна, и прекращать перечисление.
hepper
Кодогенератор
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 3
27.01.2013, 23:50     Ориентация бота в игре #22
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Мало что даст...
даже не мало что даст, а можно сказать ничего не даст. графика и клиент игры для реального человека создают сложности восприятия, для бота вообще будет нереал чтото делать, тем более игра очень динамичная.

а на счет трафика - даже если он зашифрован - клиент то у тебя на компе, надо его ковырнуть и достать оттуда методы кодировки/декодировки. я не думаю что это будет сложнее анализа игрового экрана...
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
28.01.2013, 16:47  [ТС]     Ориентация бота в игре #23
Цитата Сообщение от m1Rr0r Посмотреть сообщение
denis0612,
C++
1
2
LPCTSTR lpClassName,    // указатель на имя класса
LPCTSTR lpWindowName    // указатель на имя окна
Добавлено через 3 минуты
Если заголовок все время меняется, но содержит при этом какую то постоянную надпись, тогда можно с помощью Enum перечислять окна, смотреть какая там надпись в заголовке, и если подходит под твое описание запоминать HWND окна, и прекращать перечисление.
Да я это уже сто раз прочитал, думал вы пример приведете, а то у меня ошибка в компиляторе:
error C2664: FindWindowW: невозможно преобразовать параметр 2 из "const char [6]" в "LPCWSTR"
Пишу:
C++
1
2
HWND client;
client=FindWindow(NULL, "Skype");
Добавлено через 4 часа 14 минут
up+
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
28.01.2013, 18:01     Ориентация бота в игре #24
C++
1
2
HWND client;
client=FindWindow(NULL, (LPCWSTR)"Skype");
Как насчет такого ?
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
28.01.2013, 21:06  [ТС]     Ориентация бота в игре #25
Ура, и этого я добивался 2 дня, хух, идем дальше, почему функция возвращает 6 нулей:
FindWindow(NULL, (LPCWSTR)"Skype");
Причем заголовок какого окна я бы не писал...
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
28.01.2013, 21:41     Ориентация бота в игре #26
Пробуй так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
 
using namespace std;
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)  {
    char target[] = "Skype";
    char caption[255];
    if(GetWindowText(hwnd, caption, sizeof(caption)))
        if(strstr(caption, target) != 0)
            cout << "HWND: " << hwnd << " | " << "Text: " << caption << endl;
    return TRUE;
}
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
Через Spy++ удостоверься что заголовок правильный.
Или используй перечисление окон из примера выше)
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
29.01.2013, 22:13     Ориентация бота в игре #27
потому что нужно использовать не FindWindow, а FindWindowA
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
01.02.2013, 15:16  [ТС]     Ориентация бота в игре #28
Цитата Сообщение от m1Rr0r Посмотреть сообщение
Пробуй так.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <windows.h>
#include <iostream>
 
using namespace std;
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)  {
    char target[] = "Skype";
    char caption[255];
    if(GetWindowText(hwnd, caption, sizeof(caption)))
        if(strstr(caption, target) != 0)
            cout << "HWND: " << hwnd << " | " << "Text: " << caption << endl;
    return TRUE;
}
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
Через Spy++ удостоверься что заголовок правильный.
Или используй перечисление окон из примера выше)
Этот код не работает.
Название верное, беру из spy ++.
После запуска программы наблюдается следующее:
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\ntdll.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\kernel32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\KernelBase.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\apphelp.dll", Невозможно найти или открыть файл PDB
SHIMVIEW: ShimInfo(Complete)
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\user32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcr100d.dll", Символы загружены.
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcp100d.dll", Символы загружены.
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\gdi32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\imm32.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msctf.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "C:\Windows\SysWOW64\msvcrt.dll", Невозможно найти или открыть файл PDB
"WOT_cheat.exe": Загружено: "ImageAtBase0xda0000", Загрузка отключена параметром включения/исключения.
"WOT_cheat.exe": Выгружено: "ImageAtBase0xda0000"
Программа "[2720] WOT_cheat.exe: Машинный код" завершилась с кодом -1073741510 (0xc000013a).

Добавлено через 17 часов 47 минут
up+++

Добавлено через 1 час 14 минут
+++
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
01.02.2013, 16:29     Ориентация бота в игре #29
Цитата Сообщение от denis0612 Посмотреть сообщение
Этот код не работает
Код работает.
Вот почему у Вас не работает, понятия не имею.
И потом...Ну допустим вы получили HWND окна, что вы делать дальше будете ?
Ogniel
24 / 24 / 1
Регистрация: 30.05.2011
Сообщений: 127
02.02.2013, 11:49     Ориентация бота в игре #30
Цитата Сообщение от denis0612 Посмотреть сообщение
Спасибо, а нет ли варианта, если не перехватывать пакеты, а просто разобрать экран по слоям, миникарта, фон, параметры, надписи? Это вообще можно сделать? А то чувствую, что перехватывать пакеты вряд ли удастся.
а для таких целей есть SDK. через него и оперируй)))
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
04.02.2013, 18:27  [ТС]     Ориентация бота в игре #31
Я так понимаю нужно юзать Directx SDK в моем случае.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
04.02.2013, 18:37     Ориентация бота в игре #32
denis0612,
...пальцем в небо тыкать далеко не уедешь...
Цитата Сообщение от denis0612 Посмотреть сообщение
Я так понимаю нужно юзать Directx SDK в моем случае.
Вариант с пакетами на мой взгляд самый оптимальный.
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
05.02.2013, 19:03  [ТС]     Ориентация бота в игре #33
Допустим стянуть и подменить пакет я смогу, а вот где искать метод шифровки я даже предположения не имею, так что думаю нужно плясать в другую сторону...

Добавлено через 23 часа 12 минут
Можно пример работы функции EnumChildWindows (перечислить все дочерние окна по его HWND), а то в документации не разберусь...
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
05.02.2013, 20:21     Ориентация бота в игре #34
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <windows.h>
#include <iostream>
 
HWND winHWND = NULL;
 
 
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam)  {
    char buff[255];
    GetWindowTextA(hwnd, buff, sizeof(buff));
    std::cout << "\tCaption: " << buff << " | HWND: " << hwnd << std::endl;
    return TRUE;
}
 
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)  {
    char buff[255];
    char target[] = "Skype";
    if(GetWindowTextA(hwnd, buff, sizeof(buff)))
        if(strstr(buff, target) != 0)  {
            std::cout << "Main win: " << buff << std::endl;
            std::cout << "Child windows: \n";
            EnumChildWindows(hwnd, &EnumChildProc, 0);
        }
    return TRUE;
}
 
 
 
int main()  {
    setlocale(LC_ALL, "Russian");
    if(EnumWindows(&EnumWindowsProc, 0))
    return 0;
}
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
05.02.2013, 20:26  [ТС]     Ориентация бота в игре #35
Спасибо, и еще вопрос, пытаюсь имитировать нажатия клавиш, так вот использую keybd_event. Символы и цифры работают, а спец. клавиши такие как ESC,ENT,TAB не работают...
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,256
Завершенные тесты: 2
05.02.2013, 20:52     Ориентация бота в игре #36
C++
1
VK_TAB
и т.д.
denis0612
0 / 0 / 0
Регистрация: 24.01.2013
Сообщений: 39
06.02.2013, 15:02  [ТС]     Ориентация бота в игре #37
Да это я знаю, именно так и не срабатывают.

Добавлено через 13 часов 33 минуты
Я где-то читал, что эта функция не работает в играх и некоторых приложениях, что использовать вместо нее.

Добавлено через 4 часа 9 минут
upp
hepper
Кодогенератор
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 3
08.02.2013, 14:02     Ориентация бота в игре #38
Цитата Сообщение от denis0612 Посмотреть сообщение
Допустим стянуть и подменить пакет я смогу, а вот где искать метод шифровки я даже предположения не имею, так что думаю нужно плясать в другую сторону...
есть возможность подсмотреть исходники клиента... мб там будет нужный алгоритм...
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,597
Записей в блоге: 12
08.02.2013, 14:46     Ориентация бота в игре #39
Цитата Сообщение от hepper Посмотреть сообщение
есть возможность подсмотреть исходники клиента... мб там будет нужный алгоритм...
имхо, больше нечего сказать. всё зависит от вашего мастерства и размера проекта. наврятли разбираемый вами пакет данных передаёт 3 типа значений
высота
ширина
матрица
или т. п.
разработчики могут просто сделать шифровку и фиг вы решите что тут сделанна именно она ,а не другая
C++
1
2
for(unsigned int i = 0; i > len; i++)
c[i] += i;
так что ... приводите
1 название программы
2 ваши наработки

Добавлено через 3 минуты
denis0612, насчёт перехвата пакета (для программы вашей) - емли любите "хардкор))" можете использовать сырые сокеты. как сделать на них снифер, примеров хватает в инете
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 21:36     Ориентация бота в игре
Еще ссылки по теме:

Игра в города для бота - C++
Пытаюсь написать код игры в города для своего бота, только уже много способов пробовал, не выходит. Простую версию игры(где просто...

Создание бота. Эмуляция клавиатуры, мыши. - C++
Попросили написать простенький бот для одной корейской онлайн игрушки. Сразу столкнулся с проблемой сабжа - игрушка защищена православным...

Вычисление вероятности для решения бота - C++
Доброго времени суток! У меня в задании сказано сделать логику для ботов в игре блэк джэк. Я сделал так, что если сумма очков &lt;=10 то...

Ищу литературу по созданию бота, переходящего по ссылкам - C++
Здравствуйте, хочу написать бота на с++ с функциями ввода информации и переходами на ссылки. Можете скинуть/посоветовать литературу или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
hepper
Кодогенератор
195 / 195 / 35
Регистрация: 15.06.2011
Сообщений: 789
Завершенные тесты: 3
08.02.2013, 21:36     Ориентация бота в игре #40
я даж исходники бота нашел какого то... по протоколу еще ничего там не нашел, но возможно работает по принципу, на котором пытается остановится ТС
Yandex
Объявления
08.02.2013, 21:36     Ориентация бота в игре
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru