Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Реализация бота игры Три В Ряд

Страниц (4): [1] 2 3 4 »
 

1. Kibor - 25 Июля, 2015 - 15:50:35 - перейти к сообщению
Простая реализация игры Три В Ряд, находящейся по этой ссылке
http://kibor-bot.com/online_games.html

Видео работы бота http://youtu.be/9PkE5rO6ZUM


Скачать http://kibor-bot.com/bot/3_v_ryad.rar

Распаковать на C..
Рисунки должны быть по адресу
C:\3_v_ryad\start_game.bmp
и т.д.
указать координаты игры

Более универсальный скрипт тут

Тут с улучшенным алгоритмом поиска ходов


Запустить этот скрипт: (поиграться если надо с параметрами int r=55, p=70, r1=10, p1=90;... r, p - разбежность нахождения рисунков фишек.. r1, p2 - разбежность нахождения рисунка левого поля игры..)
CODE:
int r=55, p=70, r1=10, p1=90;
int start_game[14][8], fishki[8][25][25], screen_game[182][182];
int X, Y, col, xe, ye, stx, sty, fx, fy, rx, ry, nx, ny;
int Xk[7][7], Yk[7][7], Nk[7][7], KL[7][7], Xf[49], Yf[49];
if (load_image()==-1){messagebox ("Ошибка загрузки рисунка."); goto er;}

getdisplay(col, xe, ye);
sleep(500);
if (findimage(1, #start_game[0][0], 0, #X, #Y, 0, 0, xe, ye, r1, r1, r1, r1, r1, r1, p1, 1, -1)!=1){messagebox ("Не нашли игру."); goto er;}
stx=X+68; sty=Y+3; fx=X+237; fy=Y+173;//координаты самой игры. узнать в шпионе. координаты экрана
rx=fx-stx; ry=fy-sty;

Xk[0][0]=14; Yk[0][0]=14;//24
mouse (LEFT, X+257, Y+50);

for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
Xk[nx][ny]=Xk[0][0]+nx*24;
Yk[nx][ny]=Yk[0][0]+ny*24;
}
}

lo:
if (find()==-1) goto er;
hod();
sleep (100);
mouse (LEFT, X+257, Y+50);
jh: finddynamic(0, #Xf[0], #Yf[0], 0, 0, 0, 0, stx, sty, fx, fy, -1);
sleep(150);
if (finddynamic(1, #Xf[0], #Yf[0], 1, 1, 5, 5, stx, sty, fx, fy, -1)==1){sleep(50); goto jh;}
goto lo;


er:;

function find()
{
int kol=0, k, k1;
ss: screen (#screen_game[0][0], stx, sty, fx, fy, -1);
k=0; k1=0;
for (int n=0; n<8; n++)
{
k=findimage(-1, #fishki[n][0][0], -1, #Xf[0], #Yf[0], 0, 0, rx, ry, r, r, r, r, r, r, p, 1, #screen_game[0][0]);
k1=k1+k;
for (int a=0; a<k; a++)
{
for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
if (Xk[nx][ny]-(Xf[a]+10)<10 && (Xf[a]+10)-Xk[nx][ny]<10 && Yk[nx][ny]-(Yf[a]+10)<10 && (Yf[a]+10)-Yk[nx][ny]<10)
{
Nk[nx][ny]=n;
goto df;
}
}
}
df:;
}
}
if (k1!=49)
{
sleep(100);
kol++;
if (kol<5)goto ss;
else return -1;
}

return 1;
}


function hod()
{
for (nx=0; nx<5; nx++)
{
for (ny=5; ny>-1; ny--)
{
if (Nk[nx][ny+1]==Nk[nx+1][ny] && Nk[nx][ny+1]==Nk[nx+2][ny])
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx][ny+1], sty+Yk[nx][ny+1]);
return;
}
/////
if (Nk[nx][ny]==Nk[nx+1][ny+1] && Nk[nx][ny]==Nk[nx+2][ny])
{
mouse_hod (stx+Xk[nx+1][ny], sty+Yk[nx+1][ny], stx+Xk[nx+1][ny+1], sty+Yk[nx+1][ny+1]);
return;
}
/////
if (Nk[nx][ny]==Nk[nx+1][ny] && Nk[nx][ny]==Nk[nx+2][ny+1])
{
mouse_hod (stx+Xk[nx+2][ny+1], sty+Yk[nx+2][ny+1], stx+Xk[nx+2][ny], sty+Yk[nx+2][ny]);
return;
}
}
}
/////////////////////

for (nx=0; nx<5; nx++)
{
for (ny=6; ny>0; ny--)
{
if (Nk[nx][ny-1]==Nk[nx+1][ny] && Nk[nx][ny-1]==Nk[nx+2][ny])
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx][ny-1], sty+Yk[nx][ny-1]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx+1][ny-1] && Nk[nx][ny]==Nk[nx+2][ny])
{
mouse_hod (stx+Xk[nx+1][ny], sty+Yk[nx+1][ny], stx+Xk[nx+1][ny-1], sty+Yk[nx+1][ny-1]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx+1][ny] && Nk[nx][ny]==Nk[nx+2][ny-1])
{
mouse_hod (stx+Xk[nx+2][ny-1], sty+Yk[nx+2][ny-1], stx+Xk[nx+2][ny], sty+Yk[nx+2][ny]);
return;
}
///////
}
}
/////////////////////

for (nx=0; nx<4; nx++)
{
for (ny=6; ny>-1; ny--)
{
if (Nk[nx][ny]==Nk[nx+2][ny] && Nk[nx][ny]==Nk[nx+3][ny])
{
mouse_hod (stx+Xk[nx+1][ny], sty+Yk[nx+1][ny], stx+Xk[nx][ny], sty+Yk[nx][ny]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx+1][ny] && Nk[nx][ny]==Nk[nx+3][ny])
{
mouse_hod (stx+Xk[nx+2][ny], sty+Yk[nx+2][ny], stx+Xk[nx+3][ny], sty+Yk[nx+3][ny]);
return;
}
}
}
/////////////////////

////////////////??????????????????????????????
for (nx=0; nx<6; nx++)
{
for (ny=4; ny>-1; ny--)
{
if (Nk[nx+1][ny]==Nk[nx][ny+1] && Nk[nx+1][ny]==Nk[nx][ny+2])
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx+1][ny], sty+Yk[nx+1][ny]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx+1][ny+1] && Nk[nx][ny]==Nk[nx][ny+2])
{
mouse_hod (stx+Xk[nx][ny+1], sty+Yk[nx][ny+1], stx+Xk[nx+1][ny+1], sty+Yk[nx+1][ny+1]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx][ny+1] && Nk[nx][ny]==Nk[nx+1][ny+2])
{
mouse_hod (stx+Xk[nx][ny+2], sty+Yk[nx][ny+2], stx+Xk[nx+1][ny+2], sty+Yk[nx+1][ny+2]);
return;
}
///////
}
}
/////////////////////

////////////////??????????????????????????????

for (nx=1; nx<7; nx++)
{
for (ny=4; ny>-1; ny--)
{
if (Nk[nx-1][ny]==Nk[nx][ny+1] && Nk[nx-1][ny]==Nk[nx][ny+2])
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx-1][ny], sty+Yk[nx-1][ny]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx-1][ny+1] && Nk[nx][ny]==Nk[nx][ny+2])
{
mouse_hod (stx+Xk[nx][ny+1], sty+Yk[nx][ny+1], stx+Xk[nx-1][ny+1], sty+Yk[nx-1][ny+1]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx][ny+1] && Nk[nx][ny]==Nk[nx-1][ny+2])
{
mouse_hod (stx+Xk[nx][ny+2], sty+Yk[nx][ny+2], stx+Xk[nx-1][ny+2], sty+Yk[nx-1][ny+2]);
return;
}
///////
}
}
/////////////////////

//////////////>
for (nx=0; nx<7; nx++)
{
for (ny=3; ny>-1; ny--)
{
if (Nk[nx][ny]==Nk[nx][ny+2] && Nk[nx][ny]==Nk[nx][ny+3])
{
mouse_hod (stx+Xk[nx][ny+1], sty+Yk[nx][ny+1], stx+Xk[nx][ny], sty+Yk[nx][ny]);
return;
}
///////
if (Nk[nx][ny]==Nk[nx][ny+1] && Nk[nx][ny]==Nk[nx][ny+3])
{
mouse_hod(stx+Xk[nx][ny+2], sty+Yk[nx][ny+2], stx+Xk[nx][ny+3], sty+Yk[nx][ny+3]);
return;
}
}
}
//////////////

}

function mouse_hod(int x1, int y1, int x2, int y2)
{
mouse (LEFT, x1, y1);
sleep(500);
mouse (LEFT, x2, y2);
}



function load_image()
{
if (loadimage (#start_game[0][0], "C:\3_v_ryad\start_game.bmp")<1) return -1;
for (int n=0; n<8; n++)
{
if (loadimage (#fishki[n][0][0], "C:\3_v_ryad\"+format(n)+".bmp")<1) return -1;
}
return 1;
}
2. Semos - 28 Мая, 2016 - 08:42:31 - перейти к сообщению
в общем тут перебором всех ходов, и если указать Kamen=3, например, то выбераем определенную фигуру
CODE:
CODE:
function hod()
kamen=6;
{
for (nx=0; nx<7; nx++)
{
for (ny=6; ny>-1; ny--)
{
ax=Nk[nx][ny];bx=Nk[nx+1][ny];
Nk[nx][ny]=bx;Nk[nx+1][ny]=ax;
if (nx!=6)
{
if ((Nk[nx][ny]==Nk[nx][0] && Nk[nx][ny]==Nk[nx][1] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][1] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][6] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[0][ny] && Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==Nk[6][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx+1][ny]==Nk[nx+1][0] && Nk[nx+1][ny]==Nk[nx+1][1] && Nk[nx+1][ny]==Nk[nx+1][2] && Nk[nx][ny]==kamen)
|| (Nk[nx+1][ny]==Nk[nx+1][1] && Nk[nx+1][ny]==Nk[nx+1][2] && Nk[nx+1][ny]==Nk[nx+1][3] && Nk[nx][ny]==kamen)
|| (Nk[nx+1][ny]==Nk[nx+1][2] && Nk[nx+1][ny]==Nk[nx+1][3] && Nk[nx+1][ny]==Nk[nx+1][4] && Nk[nx][ny]==kamen)
|| (Nk[nx+1][ny]==Nk[nx+1][3] && Nk[nx+1][ny]==Nk[nx+1][4] && Nk[nx+1][ny]==Nk[nx+1][5] && Nk[nx][ny]==kamen)
|| (Nk[nx+1][ny]==Nk[nx+1][4] && Nk[nx+1][ny]==Nk[nx+1][5] && Nk[nx+1][ny]==Nk[nx+1][6] && Nk[nx][ny]==kamen))
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx+1][ny], sty+Yk[nx+1][ny]);
return;
}
}
Nk[nx][ny]=ax;Nk[nx+1][ny]=bx;
ax=Nk[nx][ny];bx=Nk[nx][ny-1];
Nk[nx][ny]=bx;Nk[nx][ny-1]=ax;
if (ny!=0)
{
if ((Nk[nx][ny]==Nk[0][ny] && Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==Nk[6][ny] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][6] && Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][1] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny-1]==Nk[0][ny-1] && Nk[nx][ny-1]==Nk[1][ny-1] && Nk[nx][ny-1]==Nk[2][ny-1] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny-1]==Nk[1][ny-1] && Nk[nx][ny-1]==Nk[2][ny-1] && Nk[nx][ny-1]==Nk[3][ny-1] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny-1]==Nk[2][ny-1] && Nk[nx][ny-1]==Nk[3][ny-1] && Nk[nx][ny-1]==Nk[4][ny-1] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny-1]==Nk[3][ny-1] && Nk[nx][ny-1]==Nk[4][ny-1] && Nk[nx][ny-1]==Nk[5][ny-1] && Nk[nx][ny]==kamen)
|| (Nk[nx][ny-1]==Nk[4][ny-1] && Nk[nx][ny-1]==Nk[5][ny-1] && Nk[nx][ny-1]==Nk[6][ny-1] && Nk[nx][ny]==kamen))
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx][ny-1], sty+Yk[nx][ny-1]);
return;
}
}
Nk[nx][ny]=ax;Nk[nx][ny-1]=bx;
}
}
kamen=kamen-1;hod();
if (kamen<0) kamen=6;
}
3. Kibor - 28 Мая, 2016 - 08:59:23 - перейти к сообщению
не работает..
4. Semos - 28 Мая, 2016 - 09:11:18 - перейти к сообщению
 Kibor пишет:
не работает..

нужно добавить
CODE:
int ax,bx,kamen=6;
5. Kibor - 28 Мая, 2016 - 09:23:10 - перейти к сообщению
это я добавил...
не работает.
выложите весь код..
6. Semos - 28 Мая, 2016 - 09:45:53 - перейти к сообщению
где то в kamen ошибка, тут есь лишний камень, у меня в игре все работает. и вот, убрал камень, все работает.напишу потом, что бы выбирал лучший ход, 5 фигур, или как можно больше фигур за ход.
CODE:
int r=55, p=70, r1=10, p1=90;
int start_game[14][8], fishki[8][25][25], screen_game[182][182];
int X, Y, col, xe, ye, stx, sty, fx, fy, rx, ry, nx, ny,ax,bx;
int Xk[7][7], Yk[7][7], Nk[7][7], KL[7][7], Xf[49], Yf[49];
if (load_image()==-1){messagebox ("Îøèáêà çàãðóçêè ðèñóíêà."); goto er;}

getdisplay(col, xe, ye);
sleep(500);
if (findimage(1, #start_game[0][0], 0, #X, #Y, 0, 0, xe, ye, r1, r1, r1, r1, r1, r1, p1, 1, -1)!=1){messagebox ("Íå íàøëè èãðó."); goto er;}
stx=X+68; sty=Y+3; fx=X+237; fy=Y+173;
rx=fx-stx; ry=fy-sty;

Xk[0][0]=14; Yk[0][0]=14;//24
mouse (LEFT, X+257, Y+50);

for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
Xk[nx][ny]=Xk[0][0]+nx*24;
Yk[nx][ny]=Yk[0][0]+ny*24;
}
}

lo:
if (find()==-1) goto er;
hod();
sleep (100);
mouse (LEFT, X+257, Y+50);
jh: finddynamic(0, #Xf[0], #Yf[0], 0, 0, 0, 0, stx, sty, fx, fy, -1);
sleep(150);
if (finddynamic(1, #Xf[0], #Yf[0], 1, 1, 5, 5, stx, sty, fx, fy, -1)==1){sleep(50); goto jh;}
goto lo;


er:;

function find()
{
int kol=0, k, k1;
ss: screen (#screen_game[0][0], stx, sty, fx, fy, -1);
k=0; k1=0;
for (int n=0; n<8; n++)
{
k=findimage(-1, #fishki[n][0][0], -1, #Xf[0], #Yf[0], 0, 0, rx, ry, r, r, r, r, r, r, p, 1, #screen_game[0][0]);
k1=k1+k;
for (int a=0; a<k; a++)
{
for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
if (Xk[nx][ny]-(Xf[a]+10)<10 && (Xf[a]+10)-Xk[nx][ny]<10 && Yk[nx][ny]-(Yf[a]+10)<10 && (Yf[a]+10)-Yk[nx][ny]<10)
{
Nk[nx][ny]=n;
goto df;
}
}
}
df:;
}
}
if (k1!=49)
{
sleep(100);
kol++;
if (kol<5)goto ss;
else return -1;
}

return 1;
}


function hod()
{
kamen=6;
{
for (nx=0; nx<8; nx++)
{
for (ny=6; ny>-1; ny--)
{

ax=Nk[nx][ny];bx=Nk[nx+1][ny];
Nk[nx][ny]=bx;Nk[nx+1][ny]=ax;

if (nx!=6)
{

if ((Nk[nx][ny]==Nk[nx][0] && Nk[nx][ny]==Nk[nx][1] && Nk[nx][ny]==Nk[nx][2] )
|| (Nk[nx][ny]==Nk[nx][1] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][3] )
|| (Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][4] )
|| (Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][5] )
|| (Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][6] )
|| (Nk[nx][ny]==Nk[0][ny] && Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] )
|| (Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] )
|| (Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny])
|| (Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] )
|| (Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==Nk[6][ny] )
|| (Nk[nx+1][ny]==Nk[nx+1][0] && Nk[nx+1][ny]==Nk[nx+1][1] && Nk[nx+1][ny]==Nk[nx+1][2] )
|| (Nk[nx+1][ny]==Nk[nx+1][1] && Nk[nx+1][ny]==Nk[nx+1][2] && Nk[nx+1][ny]==Nk[nx+1][3] )
|| (Nk[nx+1][ny]==Nk[nx+1][2] && Nk[nx+1][ny]==Nk[nx+1][3] && Nk[nx+1][ny]==Nk[nx+1][4])
|| (Nk[nx+1][ny]==Nk[nx+1][3] && Nk[nx+1][ny]==Nk[nx+1][4] && Nk[nx+1][ny]==Nk[nx+1][5] )
|| (Nk[nx+1][ny]==Nk[nx+1][4] && Nk[nx+1][ny]==Nk[nx+1][5] && Nk[nx+1][ny]==Nk[nx+1][6] ))
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx+1][ny], sty+Yk[nx+1][ny]);
return;
}


}
Nk[nx][ny]=ax;Nk[nx+1][ny]=bx;

//////////////////////////////////
ax=Nk[nx][ny];bx=Nk[nx][ny-1];
Nk[nx][ny]=bx;Nk[nx][ny-1]=ax;

if (ny!=0)
{

if ((Nk[nx][ny]==Nk[0][ny] && Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] )
|| (Nk[nx][ny]==Nk[1][ny] && Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny])
|| (Nk[nx][ny]==Nk[2][ny] && Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny])
|| (Nk[nx][ny]==Nk[3][ny] && Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny])
|| (Nk[nx][ny]==Nk[4][ny] && Nk[nx][ny]==Nk[5][ny] && Nk[nx][ny]==Nk[6][ny] )
|| (Nk[nx][ny]==Nk[nx][6] && Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][4])
|| (Nk[nx][ny]==Nk[nx][5] && Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][3] )
|| (Nk[nx][ny]==Nk[nx][4] && Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][2] )
|| (Nk[nx][ny]==Nk[nx][3] && Nk[nx][ny]==Nk[nx][2] && Nk[nx][ny]==Nk[nx][1] )
|| (Nk[nx][ny-1]==Nk[0][ny-1] && Nk[nx][ny-1]==Nk[1][ny-1] && Nk[nx][ny-1]==Nk[2][ny-1] )
|| (Nk[nx][ny-1]==Nk[1][ny-1] && Nk[nx][ny-1]==Nk[2][ny-1] && Nk[nx][ny-1]==Nk[3][ny-1] )
|| (Nk[nx][ny-1]==Nk[2][ny-1] && Nk[nx][ny-1]==Nk[3][ny-1] && Nk[nx][ny-1]==Nk[4][ny-1] )
|| (Nk[nx][ny-1]==Nk[3][ny-1] && Nk[nx][ny-1]==Nk[4][ny-1] && Nk[nx][ny-1]==Nk[5][ny-1] )
|| (Nk[nx][ny-1]==Nk[4][ny-1] && Nk[nx][ny-1]==Nk[5][ny-1] && Nk[nx][ny-1]==Nk[6][ny-1] ))
{
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx][ny-1], sty+Yk[nx][ny-1]);
return;
}


}
Nk[nx][ny]=ax;Nk[nx][ny-1]=bx;
}

}



}
}

function mouse_hod(int x1, int y1, int x2, int y2)
{
mouse (LEFT, x1, y1);
sleep(500);
mouse (LEFT, x2, y2);
}



function load_image()
{
if (loadimage (#start_game[0][0], "C:\3_v_ryad\start_game.bmp")<1) return -1;
for (int n=0; n<8; n++)
{
if (loadimage (#fishki[n][0][0], "C:\3_v_ryad\"+format(n)+".bmp")<1) return -1;
}
return 1;
}
7. Semos - 12 Июня, 2016 - 00:22:41 - перейти к сообщению
В общем вот что получилось: ищет в первую очередь 4 или 5 фишек, если такого нет, перебор вариантов для максимального количества фишек на поле.
CODE:
int r=55, p=70, r1=10, p1=90;
int start_game[14][8], fishki[8][25][25], screen_game[182][182];
int Z,X, Y, col, xe, ye, stx, sty, fx, fy, rx, ry, nx, ny,ax,bx;
int Xk[7][7], Yk[7][7], Nk[7][7],Knk[7][7], KL[7][7], Xf[49], Yf[49];
if (load_image()==-1)messagebox ("Îøèáêà çàãðóçêè ðèñóíêà.");
getdisplay(col, xe, ye);
sleep(500);
if (findimage(1, #start_game[0][0], 0, #X, #Y, 0, 0, xe, ye, r1, r1, r1, r1, r1, r1, p1, 1, -1)!=1)messagebox ("Íå íàøëè èãðó.");
stx=X+68; sty=Y+3; fx=X+237; fy=Y+173;
rx=fx-stx; ry=fy-sty;
Xk[0][0]=14; Yk[0][0]=14;
mouse (LEFT, X+257, Y+50);
for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
Xk[nx][ny]=Xk[0][0]+nx*24;
Yk[nx][ny]=Yk[0][0]+ny*24;
}
}
lo:
find();
hod();
mouse (LEFT, X+257, Y+50);
sleep (1000);
jh: finddynamic(0, #Xf[0], #Yf[0], 0, 0, 0, 0, stx, sty, fx, fy, -1);
sleep(150);
if (finddynamic(1, #Xf[0], #Yf[0], 1, 1, 5, 5, stx, sty, fx, fy, -1)==1){sleep(50); goto jh;}
goto lo;
function find()
{
int kol=0, k, k1;
ss: screen (#screen_game[0][0], stx, sty, fx, fy, -1);
k=0; k1=0;
for (int n=0; n<8; n++)
{
k=findimage(-1, #fishki[n][0][0], -1, #Xf[0], #Yf[0], 0, 0, rx, ry, r, r, r, r, r, r, p, 1, #screen_game[0][0]);
k1=k1+k;
for (int a=0; a<k; a++)
{
for (nx=0; nx<7; nx++)
{
for (ny=0; ny<7; ny++)
{
if (Xk[nx][ny]-(Xf[a]+10)<10 && (Xf[a]+10)-Xk[nx][ny]<10 && Yk[nx][ny]-(Yf[a]+10)<10 && (Yf[a]+10)-Yk[nx][ny]<10)
{
Nk[nx][ny]=n;
Knk[nx][ny]=n;
goto df;
}
}
}
df:;
}
}
if (k1!=49)
{
sleep(100);
kol++;
if (kol<5)goto ss;
else return -1;
}
return 1;
}
function hod()
{
int ox=0,oy=0,l=0;
int mana=0;
int obmenX=0,obmenY=0;
int ax[2];
int five=0;
int est=0;
for (int nx=0; nx<7; nx++)
{
for (int ny=0; ny<7; ny++)
{

for (int g=0;g<2;g++)
{

int obmenX=0,obmenY=0;

for (int nxx=0; nxx<7; nxx++)
{
for (int nyy=0; nyy<7; nyy++)
{
Nk[nxx][nyy]=Knk[nxx][nyy];
}
}
if (g==0 && nx!=6 && Nk[nx][ny]!=Nk[nx+1][ny] && Nk[nx][ny]<8 && Nk[nx+1][ny]<8)
{
obmenX=1;
ax[0]=Nk[nx][ny];ax[1]=Nk[nx+1][ny];
Nk[nx][ny]=ax[1];Nk[nx+1][ny]=ax[0];
}
if (g==1 && ny!=0 && Nk[nx][ny]!=Nk[nx][ny-1] && Nk[nx][ny]<8 && Nk[nx][ny-1]<8)
{
obmenY=1;
ax[0]=Nk[nx][ny];ax[1]=Nk[nx][ny-1];
Nk[nx][ny]=ax[1];Nk[nx][ny-1]=ax[0];
}

if (obmenX==1 || obmenY==1)
{

int N=0;
esho:
est=0;

for (int nxx=0; nxx<7; nxx++)
{
for (int nyy=0; nyy<7; nyy++)
{
Z=Nk[nxx][nyy];
if (nyy<5 && Z!=9)
{

if ((Z==Nk[nxx][nyy+1] || Nk[nxx][nyy+1]==(Z+1)*10) && (Nk[nxx][nyy+2]==Z || Nk[nxx][nyy+2]==(Z+1)*10))
{
est=1;
Nk[nxx][nyy]=(Z+1)*10;
Nk[nxx][nyy+1]=(Z+1)*10;
Nk[nxx][nyy+2]=(Z+1)*10;
if (nyy<4 && (Nk[nxx][nyy+3]==(Z+1)*10 || Nk[nxx][nyy+3]==Z))
{
five=1;
Nk[nxx][nyy+3]=(Z+1)*10;
if (nyy<3 && (Nk[nxx][nyy+4]==(Z+1)*10 || Nk[nxx][nyy+4]==Z))
{
five=2;
Nk[nxx][nyy+4]=(Z+1)*10;
}
}
}
}
if (nxx<5 && Z!=9)
{
if ((Z==Nk[nxx+1][nyy] || Nk[nxx+1][nyy]==(Z+1)*10) && (Nk[nxx+2][nyy]==Z || Nk[nxx+2][nyy]==(Z+1)*10))
{
est=1;
Nk[nxx][nyy]=(Z+1)*10;
Nk[nxx+1][nyy]=(Z+1)*10;
Nk[nxx+2][nyy]=(Z+1)*10;
if (nxx<4 && (Nk[nxx+3][nyy]==(Z+1)*10 || Nk[nxx+3][nyy]==Z))
{
five=1;
Nk[nxx+3][nyy]=(Z+1)*10;
if (nxx<3 && (Nk[nxx+4][nyy]==(Z+1)*10 || Nk[nxx+4][nyy]==Z))
{
five=2;
Nk[nxx+4][nyy]=(Z+1)*10;
}
}
}
}
if (g==0 && five==2)goto hodX;
if (g==0 && five==1)goto hodX;
if (g==1 && five==2)goto hodY;
if (g==1 && five==1)goto hodY;
}
}
if (est==1)
{
for (int nxx=0; nxx<7; nxx++)
{
for (int nyy=6; nyy>-1; nyy--)
{
if (Nk[nxx][nyy]>8)
{
if (Nk[nxx][nyy]>9)N++;
for (int y=1; y<7;y++)
{
if (nyy-y>-1 && Nk[nxx][nyy-y]<8 && Nk[nxx][nyy]>8)
{
Nk[nxx][nyy]=Nk[nxx][nyy-y];
Nk[nxx][nyy-y]=9;
}
}
if (Nk[nxx][nyy]>9)Nk[nxx][nyy]=9;
}
}
}
goto esho;
}
if (N!=0 && mana<N || (mana==N && ny>oy))
{
mana=N;
if (obmenX==1){ox=nx;oy=ny;l=0;}
if (obmenY==1){ox=nx;oy=ny;l=1;}
}
}
}
}
}
if (l==0)
{
mouse_hod (stx+Xk[ox][oy], sty+Yk[ox][oy], stx+Xk[ox+1][oy], sty+Yk[ox+1][oy]);
return;
}
if (l==1)
{
mouse_hod (stx+Xk[ox][oy], sty+Yk[ox][oy], stx+Xk[ox][oy-1], sty+Yk[ox][oy-1]);
return;
}
hodX:
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx+1][ny], sty+Yk[nx+1][ny]);
return;
hodY:
mouse_hod (stx+Xk[nx][ny], sty+Yk[nx][ny], stx+Xk[nx][ny-1], sty+Yk[nx][ny-1]);
return;
}
function mouse_hod(int x1, int y1, int x2, int y2)
{
mouse (LEFT, x1, y1);
sleep(800);
mouse (LEFT, x2, y2);
}
function load_image()
{
if (loadimage (#start_game[0][0], "C:\3_v_ryad\start_game.bmp")<1) return -1;
for (int n=0; n<8; n++)
{
if (loadimage (#fishki[n][0][0], "C:\3_v_ryad\"+format(n)+".bmp")<1) return -1;
}
return 1;
}
8. ShotGumm - 24 Мая, 2018 - 14:45:55 - перейти к сообщению
Если не сложно, то хотелось бы поподробнее разобрать работу данного скрипта, с комментариями.
В шапке данной игрушки нет и самому поэкспериментировать возможность отсутствует, в ролике на ютубе автор так же воздержался от подробного описания работы (на подобии того как разбиралась игра Music Wars, там все предельно ясно изложено)

В связи с чем прошу прошу помочь разобраться)

з.ы. для понимания моих целей следует упомянуть, что есть желание написать бота для игрушки Gems of war. Частично желаемую информацию подчерпнул из ролика Music wars, но дальше написания просто кликера дело не пошло, по функционалу Кибор выполняет задачи на уровне EasyScript'a. Но очевидно, что потенциал куда больше)
9. konctantin777 - 07 Сентября, 2018 - 11:29:04 - перейти к сообщению
Тоже всю голову сломал какой можно придумать алгоритм, чтобы всё методом перебора не запоминать (
10. Zireael - 07 Сентября, 2018 - 18:37:43 - перейти к сообщению
 Цитата:
какой можно придумать алгоритм

В чём сложность?
Находятся все картинки, заносятся в массив в виде чисел, что-то вроде:
 Цитата:
0 1 4 0 2
2 1 3 1 4
0 4 0 0 1
3 2 1 4 2
4 2 0 1 3

Ищутся пары чисел, например в 3 строке есть два 0, проверяются соседние ячейки на наличие 0. в третьей строке вначале 0, т. е. возможен ход чтобы собрать три 0 в ряд.

Powered by ExBB FM 1.0 Final