Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > управление "Сапер"ом


Автор: bald 26.1.2010, 17:20
День добрый!
Преамбула:
ко мне обратился мой друг с просьбой помочь ему написать решебник для игры "Сапер" (его курсовая работа). Как вариант предложил ему написать приложение, которое запускает сапер и полностью управляет им (создается поле, такое же как и выбрал пользователь в игре и, соответствующий алгоритм, проанализировав ситуацию, подсказывает какую клавишу нажать следующей).

Проблема:
получил handle игры "Сапер". А вот с получением handle поля возникли проблемы. Как выяснилось, это все единый компонент (предполагаю, что потомок TGraphicControl).
Подскажите, пожалуйста, что можно предпринять? Каким образом можно управлять "Сапером"?

Заранее благодарен, Владислав

Автор: Rrader 26.1.2010, 18:47
Добрый день, bald. Есть, что сказать smile 
Цитата(bald @  26.1.2010,  23:20 Найти цитируемый пост)
получил handle игры "Сапер". А вот с получением handle поля возникли проблемы. Как выяснилось, это все единый компонент (предполагаю, что потомок TGraphicControl).

Стандартный сапер написан на Microsoft Visual C++, никаких TGraphicControl. Вы правы, что поле не имеет Handle, т.е. полностью рисуется.
Цитата(bald @  26.1.2010,  23:20 Найти цитируемый пост)
Подскажите, пожалуйста, что можно предпринять? Каким образом можно управлять "Сапером"?

Если это возможно, то напишите свою реализацию этой игры, заложив в нее возможности внешнего управления.

Если это невозможно, то задачка практически нерешаема. Вам могут посоветовать делать фото поля, распознавать цифры, пустые ячейки, моделировать у себя такое же поле и уже принимать решения на смоделированном поле. Потом выискивать координаты кнопочек и отправлять туда нажатия мыши. Этот способ ограниченно применим - под разными ОС сапер и выглядит по-разному, и модель сделать очень сложно.

Автор: 1000000dollars 26.1.2010, 19:24
В отладчике находится адрес поля, пишется программа, которая через ReadProcessMemory считывает кусок памяти из запущенного сапёра, а после этого можно делать с ним что хочешь.

Только в разных версиях винды адрес поля разный. Исходниками помочь уже не могу, потому что потерял их :(

Автор: Rrader 26.1.2010, 19:44
http://www.codeproject.com/KB/trace/minememoryreader.aspx

Автор: Frees 26.1.2010, 21:43
Цитата(Rrader @  26.1.2010,  21:47 Найти цитируемый пост)
 Вам могут посоветовать делать фото поля, распознавать цифры, пустые ячейки, моделировать у себя такое же поле и уже принимать решения на смоделированном поле. 


для сапера из ВинХР распознаю по картинке. получаем массив значении ячеек сапера. 

Автор: de_Nis 28.1.2010, 12:13
Культин Н. Б.  Основы программирования в Delphi 7 (598 c) .pdf, книга есть в сети.
В главе 12 (стр.459-484) разбирается создание игры Сапер. Может быть, поможет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)