Kibor |
Отправлено: 25 Июля, 2015 - 23:50:35
|
Эксперт
Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357
|
Простая реализация игры Три В Ряд, находящейся по этой ссылке
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;
}
|
|
|
Semos |
Отправлено: 28 Мая, 2016 - 16:42:31
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Май 2016
Откуда: Бийск
Репутация: 0
|
в общем тут перебором всех ходов, и если указать 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;
} (Отредактировано автором: 28 Мая, 2016 - 16:59:23) |
|
|
Semos |
Отправлено: 28 Мая, 2016 - 17:45:53
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Май 2016
Откуда: Бийск
Репутация: 0
|
где то в 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;
} (Отредактировано автором: 28 Мая, 2016 - 17:59:46) |
|
|
Semos |
Отправлено: 12 Июня, 2016 - 08:22:41
|
Прохожий
Покинул форум
Сообщений всего: 6
Дата рег-ции: Май 2016
Откуда: Бийск
Репутация: 0
|
В общем вот что получилось: ищет в первую очередь 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;
} |
|
|
Zireael |
Отправлено: 08 Сентября, 2018 - 02:37:43
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: какой можно придумать алгоритм
В чём сложность?
Находятся все картинки, заносятся в массив в виде чисел, что-то вроде:
Цитата: 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 в ряд. |
|
|
|