[C#]Решил написать бота

istran

От нечего делать, я решил написать бота для карточной игры.
C# знаю слабо, поэтому писать буду на нем. Вот.
У меня сразу-же возникло несколько проблем:
1.Игрой обязательно надо управлять мышкой. Поделитесь опытом, как это
сделать в C#.
2.Для отслеживания игровой ситуации необходимо анализировать текущее
изображение на экране. Как его получить?
3.Необходимо распознавать образы. Все изображения карт есть, нужно только
распознавать текстовую информацию, а карты каким-то образом сравнивать.
Подскажите какие-нибудь, желательно стандартные, библиотеки предназначен-
ные для подобных целей.
Извините за столько вопросов, просто интернета нет, а MSDN на английском.
Жду ваших комментариев.

Elina74

1.Игрой обязательно надо управлять мышкой. Поделитесь опытом, как это сделать в C#.

Я сам язык не знаю, но пошлю в МСДН, на всякий случай. Наверное, тебе помогут ключевые слова drag and drop.
2.Для отслеживания игровой ситуации необходимо анализировать текущее изображение на экране. Как его получить?
По-моему, надо ввести массив еще не сданных карт, массив карт у одного игрока, массив карт другого игрока, массив открытых карт. Нужно отделить обработку игровой ситуации и отрисовку ситуации. Это стандартное решение и не надо тут ничего выдумывать.
3.Необходимо распознавать образы. Все изображения карт есть, нужно только распознавать текстовую информацию, а карты каким-то образом сравнивать. Подскажите какие-нибудь, желательно стандартные, библиотеки предназначенные для подобных целей.

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

Alexander08

бред

2354570

бред
+1

karkar

Я так понял, речь не про написание своей игры в карты, а про управление уже существующей игрой как бы со стороны игрока.
"Управлять мышкой" можно, посылая окну игры мышиные сообщения - WM_MOUSEMOVE, WM_LBUTTONDOWN и т.д.

Andbar

мб. он имел в виду, что хочет сделать прогу, которая за человека будет играть с игровой прогой, имеющей только ГУИ?

elenangel

2,3. Получить текущее изображение на экране - посмотри Spy++ каким нибудь класс окна игры которой хочешь управлять. Далее FindWindow - найти в проге хэндл окна игры,GetWindowDC - получить контекст отображения этого окна. Далее самый тупой вариант - это попиксельно сравнивать прямоугольные куски изображений начиная с каждого пиксела с bitmapами изображений карт. Насчет более продвинутых алгоритмов распознавания не знаю. Можно еще прохавать логику, в каких позициях игра рисует карты (типа (Width div n)*i - х-овая координата i-й карты или похожее выражение) и анализировать только участки изображения где должна быть карта.
P.S. Я не знаю, можно ли в шарпе вызывать WinAPI, пусть поправят если не прав

istran

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

SPARTAK3959

100% способа двигать мышь "как человек" не существует. Некоторые программы (например написанные на SDL) игнорируют сообщения мыши/клавиатуры, используя считывание их состояния или DirectInput. В этом случае придется либо на лету ставить хуки в программу, либо использовать драйвера. Оба методы сложны в реализации и только C# не обойдутся. А уж если прога ставит свои драйвера, чтобы мониторить изменения в стандартных драйверах, то без дизассемблера уже никак не обойдешься.
Если все этой защиты нет (как обычно и бывает то нужно почитать главы о сообщениях мыши и воспользоваться PostMessage/SendMessage/SetCursorPos.
PS Желаю удачи. Нужно показать всем этим игроделам, что их ботозащита никуда не годится.

apl13

А у вас боты на какой платформе?..

istran

не понял, что за платформа?

makar_chudra

потом можешь его продавать и срубить кучу бабла
тока если он будет толковый "ставлю всё на зеро!"-такой не нужен

Alena_08_11

Если ключевое слово - написать бота, а не c#, то можно посмотреть в сторону AutoIT (он умеет распозновать всякие хрени, и вообще вроде как был задуман как тупая кликалка и заполнялка форм для автоматизации всяческих кликательно-заполнятельных процессов).

elenangel

Если не секрет, что это за игра для которой ты бота пишешь?

istran

Не секрет - PartyPoker.

istran

2.Для отслеживания игровой ситуации необходимо анализировать текущее
изображение на экране. Как его получить?
3.Необходимо распознавать образы. Все изображения карт есть, нужно только
распознавать текстовую информацию, а карты каким-то образом сравнивать.
Подскажите какие-нибудь, желательно стандартные, библиотеки предназначен-
ные для подобных целей.
Решил писать на C++.
Не мог бы кто-нибудь все таки ответить на эти вопросы.

makar_chudra

Спроси Павловского может от те чё-нить интересное скажет про технологию
Оставить комментарий
Имя или ник:
Комментарий: