В нашем случае поле шесть на шесть, всего 36 ячеек. И пять видов кристалов.
Это приложение в одноклассниках "Небеса". И мини игрой в нём реализован процесс боя.
Вот картинка игрового поля.
Нужно научить бота анализировать экран и делать ход.
И сам я с этой задачей не справляюсь, помогите.
(Добавление)
Остановите меня, если я начну впадать в маразм.
Можно использовать findimage дабы определить какой кристал расположен в какой ячейке. Для этого нужно определить кардинаты начала и конца поиска для каждой ячейки.
Вот так, например.
Мы получаем семь пар координат, которыми можно обозначить любую ячейку.
CODE:
int x1, x2, x3, x4, x5, x6, x7;
int y1, y2, y3, y4, y5, y6, y7;
[color=green]//можно сразу указать конкретные цифры.[/color]
int a1,b1,c1,d1,e1,f1, a2,b2,c2,d2,e2,f2, a3,b3,c3,d3,e3,f3, a4,b4,c4,d4,e4,f4, a5,b5,c5,d5,e5,f5, a6,b6,c6,d6,e6,f6;
[color=green]//Это переменные для ячеек. Например левому верхниму углу ячейки а1 соответствуют координаты x1, y1, ячейки b1 - x1, y2, ячейки d3 - x3, y4. и так далее.[/color]
int x1, x2, x3, x4, x5, x6, x7;
int y1, y2, y3, y4, y5, y6, y7;
[color=green]//можно сразу указать конкретные цифры.[/color]
int a1,b1,c1,d1,e1,f1, a2,b2,c2,d2,e2,f2, a3,b3,c3,d3,e3,f3, a4,b4,c4,d4,e4,f4, a5,b5,c5,d5,e5,f5, a6,b6,c6,d6,e6,f6;
[color=green]//Это переменные для ячеек. Например левому верхниму углу ячейки а1 соответствуют координаты x1, y1, ячейки b1 - x1, y2, ячейки d3 - x3, y4. и так далее.[/color]
Ещё у нас есть пять картинок кристалов.
CODE:
int red[28][28]; int redX[512]; int redY[512]; int yell[29][29]; int yellX[512]; int yellY[512]; int green[30][29]; int greenX[512];
int greenY[512]; int skull[28][30]; int skullX[512]; int skullY[512]; int ank[27][26]; int ankX[512]; int ankY[512];
loadimage (#red[0][0], "C:\krst\red.bmp");
loadimage (#yell[0][0], "C:\krst\yell.bmp");
loadimage (#green[0][0], "C:\krst\green.bmp");
loadimage (#skull[0][0], "C:\krst\skull.bmp");
loadimage (#ank[0][0], "C:\krst\ank.bmp");
[color=green]//Загружаем их в память.[/color]
int red[28][28]; int redX[512]; int redY[512]; int yell[29][29]; int yellX[512]; int yellY[512]; int green[30][29]; int greenX[512];
int greenY[512]; int skull[28][30]; int skullX[512]; int skullY[512]; int ank[27][26]; int ankX[512]; int ankY[512];
loadimage (#red[0][0], "C:\krst\red.bmp");
loadimage (#yell[0][0], "C:\krst\yell.bmp");
loadimage (#green[0][0], "C:\krst\green.bmp");
loadimage (#skull[0][0], "C:\krst\skull.bmp");
loadimage (#ank[0][0], "C:\krst\ank.bmp");
[color=green]//Загружаем их в память.[/color]
(Добавление)
Потом определяем в какой ячейке находится какой кристал.
CODE:
if (findimage(1, #red[0][0], 8388672, #redX[0], #redY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=1; goto ob1;}
else{ if (findimage(1, #skull[0][0], 8388672, #skullX[0], #skullY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=2; goto ob1;}
else{ if (findimage(1, #yell[0][0], 8388672, #yellX[0], #yellY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=3; goto ob1;}
else{ if (findimage(1, #green[0][0], 8388672, #greenX[0], #greenY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=4; goto ob1;}
else{ if (findimage(1, #ank[0][0], 8388672, #ankX[0], #ankY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=5; goto ob1;}
else{ messagebox("А1 не определён"); goto end;}}}}}
//Программа определяет кристал в ячейке и зависимо от этого присваивает соответствующей переменной значение.
ob1:
//Тут такой же код для определения содержимого ячейки b1, и далее аналогично для остальных.
if (findimage(1, #red[0][0], 8388672, #redX[0], #redY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=1; goto ob1;}
else{ if (findimage(1, #skull[0][0], 8388672, #skullX[0], #skullY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=2; goto ob1;}
else{ if (findimage(1, #yell[0][0], 8388672, #yellX[0], #yellY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=3; goto ob1;}
else{ if (findimage(1, #green[0][0], 8388672, #greenX[0], #greenY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=4; goto ob1;}
else{ if (findimage(1, #ank[0][0], 8388672, #ankX[0], #ankY[0], x1, y1, x2, y2, r,r,r,r,r,r, 90, 1, wind)==1){int a1=5; goto ob1;}
else{ messagebox("А1 не определён"); goto end;}}}}}
//Программа определяет кристал в ячейке и зависимо от этого присваивает соответствующей переменной значение.
ob1:
//Тут такой же код для определения содержимого ячейки b1, и далее аналогично для остальных.
(Добавление)
Код уже выглядит чудовищно, но ещё не закончился.
После назначения цифер идёт перебор вариантов хода.
CODE:
int px=28, py=56; //Поправка координат, чтоб клик попадал в квадратик.
if (a1==b1==d1){mouse(LEFT, x1+px, y3+py, wind); sleep(1000); mouse(LEFT, x1+px, y4+py, wind)}
//Если переменным a1,b1,d1 присвоили одинаковые цифры, значит надо щёлкнуть по координатам ячеек d1 и c1 чтоб поменять их местами.
if (a1==b1==d1){mouse(LEFT, x1+px, y3+py, wind); sleep(1000); mouse(LEFT, x1+px, y4+py, wind)}
//Если переменным a1,b1,d1 присвоили одинаковые цифры, значит надо щёлкнуть по координатам ячеек d1 и c1 чтоб поменять их местами.
Вариантов таких хоть и ограниченное количество, но их много.
И возможно ли реализовать расстановку приоритетов для кристалов? Например чтоб поиск вариариантов ходов с определёнными кристалами производился раньше остальных.