konctantin777 |
Отправлено: 15 Сентября, 2018 - 06:32:32
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Zireael пишет: Цитата: Для начала, чтобы хоть просто работал.
Он и работает для той игры, которой написан.
Вот и хочу понять как..
stx; sty; fx; fy; это же координаты игрового поля ?
Не могу понять Xk[0][0]=14; Yk[0][0]=14;//24 почему комментарий 24 ? |
|
|
konctantin777 |
Отправлено: 15 Сентября, 2018 - 11:00:28
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Ну, хоть ты тресни, не получается в виз редактор загнать- не работает (
код без "нод" (Отобразить)int k[8];
int col_KIB, ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int Image_0_KIB[29][28];
int Image_1_KIB[36][29];
int Image_2_KIB[33][25];
int Image_3_KIB[26][30];
int Image_4_KIB[35][29];
int Image_5_KIB[28][24];
int Image_6_KIB[36][30];
int Image_7_KIB[36][30];
start_();
int r=55, p=70, r1=50, p1=90;
int start_game[60][60], fishki[8][60][60], screen_game[1000][1000];
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];
stx=166; sty=152; fx=577; fy=567;//координаты самой игры. узнать в шпионе. координаты экрана
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*120;
Yk[nx][ny]=Yk[0][0]+ny*120;
}
}
m_KIB1: findimage_(#Image_0_KIB[0][0], 0, 1000, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[0], #Xf[0], #Yf[0]);
findimage_(#Image_1_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[1], #Xf[0], #Yf[0]);
findimage_(#Image_5_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[2], #Xf[0], #Yf[0]);
findimage_(#Image_2_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[3], #Xf[0], #Yf[0]);
findimage_(#Image_3_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[4], #Xf[0], #Yf[0]);
findimage_(#Image_4_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[5], #Xf[0], #Yf[0]);
findimage_(#Image_6_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[6], #Xf[0], #Yf[0]);
findimage_(#Image_7_KIB[0][0], 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, -1, -1, -1, 0, 100, 100, 0, 0, ex_KIB, ey_KIB, #k[7], #Xf[0], #Yf[0]);
function start_()
{
getdisplay(col_KIB, ex_KIB, ey_KIB);
load_image_();
pause(1000);
}
function mouse_(int p1, int m, int xm, int ym, int p2)
{
pause(p1);
if (m==1) mouse(LEFT, xm, ym);
if (m==2) mouse(MIDDLE, xm, ym);
if (m==3) mouse(RIGHT, xm, ym);
if (m==4) mousedown(LEFT, xm, ym);
if (m==5) mousedown(MIDDLE, xm, ym);
if (m==6) mousedown(RIGHT, xm, ym);
if (m==7) mouseup(LEFT, xm, ym);
if (m==8) mouseup(MIDDLE, xm, ym);
if (m==9) mouseup(RIGHT, xm, ym);
if (m==10) mousedbl(LEFT, xm, ym);
if (m==11) mousedbl(MIDDLE, xm, ym);
if (m==12) mousedbl(RIGHT, xm, ym);
if (m==13) mousemove(xm, ym);
pause(p2);
}
function findimage_(int #Image, int t, int p1, int p2, int m, int xm, int ym, int mov_m, int mov_x, int mov_y, int p3, int wait, int cycle, int fon, int r, int p, int k, int xs, int ys, int xf, int yf, int#sum, int#x, int#y)
{
int timKIB, sumKIB, xKIB, yKIB, tx, ty, tcycle=0;
sty: pause(p1);
sumKIB=0;
if (t!=0) timKIB=gettime();
a: if (r==0 && p==100){sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, -1); if (sum>0) goto e;}
else {sum=findimage(k, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, -1); if (sum>0) goto e;}
if (t==0) return 0;
if (gettime()-timKIB<t){sleep(20); goto a;}
return 0;
e: sumKIB=sum; xKIB=x[0]; yKIB=y[0];
pause(p2);
if (m==1){mouse(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==2){mouse(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==3){mouse(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==4){mousedown(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==5){mousedown(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==6){mousedown(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==7){mouseup(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==8){mouseup(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==9){mouseup(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==10){mousedbl(LEFT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==11){mousedbl(MIDDLE, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==12){mousedbl(RIGHT, xs+xKIB+xm, ys+yKIB+ym); goto hy;}
if (m==13)mousemove(xs+xKIB+xm, ys+yKIB+ym);
hy: if (mov_m==1)mousemove(mov_x, mov_y);
if (m>0 && m<14)pause(p3);
if (wait!=-1)
{
for (int ttim=gettime(); gettime()-ttim<wait; sleep(20))
{
if (r==0 && p==100){if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, -1)==0)return sumKIB;}
else {if (findimage(1, #Image[0][0], fon, #x[0], #y[0], xs, ys, xf, yf, r, r, r, r, r, r, p, 1, -1)==0)return sumKIB;}
}
if (tcycle<cycle){tcycle++; goto sty;}
return 0;
}
return sumKIB;
}
function load_image_()
{
loadimage (#Image_0_KIB[0][0], "C:\3_v_ryad\0.bmp" ;
loadimage (#Image_1_KIB[0][0], "C:\3_v_ryad\1.bmp" ;
loadimage (#Image_2_KIB[0][0], "C:\3_v_ryad\3.bmp" ;
loadimage (#Image_3_KIB[0][0], "C:\3_v_ryad\4.bmp" ;
loadimage (#Image_4_KIB[0][0], "C:\3_v_ryad\5.bmp" ;
loadimage (#Image_5_KIB[0][0], "C:\3_v_ryad\2.bmp" ;
loadimage (#Image_6_KIB[0][0], "C:\3_v_ryad\6.bmp" ;
loadimage (#Image_7_KIB[0][0], "C:\3_v_ryad\7.bmp" ;
}
|
|
|
Zireael |
Отправлено: 23 Сентября, 2018 - 16:23:55
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Скачать длл отсюда: (для просмотра ссылки Вам необходимо авторизоваться) и закинуть в папку с kibor.exe.
Код можно переделать под поле любых размеров.
3 в ряд (Отобразить)CODE:// игра: http://kibor-bot.com/online_games.html
external(INT, "Sort", "Sort", pathfolder()+"\math.dll" ); // функция сортировки из длл
int row=7, col=7; // размеры поля (количество строк и столбцов)
// параметры для findimage
int r=60; // разбежность для поиска картинок (подобрать, если не находит картинки)
int p=75; // точность поиска (подобрать, если не находит картинки)
int fon=-1; // цвет фона, если не используется указать -1
int sx=77, sy=85, fx=243, fy=254; // координаты для findimage
////////////
// картинки должны иметь имена '0.bmp', '1.bmp' и т.д.
int image[8][40][40]; // массив на 8 картинок размером не более чем 40*40
string path="C:\Users\yacir\Desktop\3_v_ryad\"; // путь к картинкам
////////////
// тут ничего не менять
int size_field=row*col; // размер поля
new int field[row][col]; // поле
new int arr[size_field][3]; // массив для всех найденных картинок, хранит координаты и номер картинки
new int posX[size_field];
new int posY[size_field]; // массивы для координат картинок
new int scren[fx-sx+1][fy-sy+1]; // массив для скрина экрана
int count_image = sizearray(image), found;
for(int i=0; i<count_image; i++)loadimage(#image[i][0][0], path+format(i)+".bmp" ); // загрузка картинок
int stepX=(fx-sx)/col, stepY=(fy-sy)/row; // расстояние между картинками
////////////
loop()
{
dynamic(); // поиск динамики, ждёт когда фишки перестанут сдвигаться
found=find(); // поиск картинок и их сортировка
////// вывод количества найденных картинок (можно убрать)
if(found==size_field)textbkcolor(16000000, 65280);
else textbkcolor(65280, 300);
textout(99, 300, 300, "Найдено картинок: "+format(found)+" из "+format(row*col), 0);
////////
if(found==size_field) // если найдено нужное количество картинок
{
SaveArray(); // сохранение массива в файл (можно убрать)
find_hod() // поиск хода и ход
}
sleep(100);
}
function dynamic()
{
int x, y;
loop()
{
finddynamic(0, #x, #y, 0, 0, 0, 0, sx, sy, fx, fy, -1); sleep(200);
if (finddynamic(1, #x, #y, 1, 1, 5, 5, sx, sy, fx, fy, -1)==0)
{
finddynamic(0, #x, #y, 0, 0, 0, 0, sx, sy, fx, fy, -1); sleep(200);
if (finddynamic(1, #x, #y, 1, 1, 5, 5, sx, sy, fx, fy, -1)==0)break;
}
}
}
function SaveArray()
{
int i, j, k;
// сохранение массива в файл, сохраняется рядом с каринками
if(fopen(path+"Array.txt", "w")!=0)
{
string tmp;
for (i=0; i<row; i++)
{
tmp="";
for (j=0; j<col; j++)
{
for (k=0; k<count_image; k++)
{
if(field[i][j]==k){tmp=tmp+format(k)+" "; break;}
}
}
fwrite(tmp);fwrite(ENDL);
}
fclose();
}
}
function find()
{
int i, j, z=0;
// поиск картинок
screen (#scren[0][0], sx, sy, fx, fy, -1); // скрин
for(i=0; i<count_image; i++)
{
int a=findimage(size_field, #image[i][0][0],fon, #posX[0], #posY[0], 0,0,fx-sx,fy-sy,r,r,r,r,r,r,p,1,#scren[0][0] );
//messagebox(a); // сколько найдено
if(a>0)
{
for(j=0;j<a;j++)
{
if(z<size_field)
{
arr[z][0]=posX[j]; // координата X
arr[z][1]=posY[j]; // координата Y
arr[z][2]=i; // номер картинки
z++;
}
}
}
}
if(z==size_field)sort_image(#arr[0][0], #field[0][0], row, col ); // если найдено нужное количество картинок, то они сортируются
return z;
}
// сортировка картинок по полю
function sort_image(int #m, int #m1, int row, int column)
{
int i, j;
new int temp[row][3]; // дополнительный массив
Sort(address(#m[0][0]), row*column, 3, 0 ); // сортировка массива по первому столбцу (по координате X)
for(i=0; i<column; i++)
{
for(j=0; j<row; j++)
{
temp[j][0]=m[i*row+j][0];
temp[j][1]=m[i*row+j][1];
temp[j][2]=m[i*row+j][2];
}
Sort(address(#temp[0][0]), row, 3, 1); // сортировка массива по второму столбцу (по координате Y)
for(j=0; j<row; j++)m1[j][i]=temp[j][2];
}
delete temp;
}
function find_hod()
{
int i, j;
for(i=0; i<row; i++){
for(j=0; j<col-1; j++){if(field[i][j]==field[i][j+1]){
if(j+3<col){if(field[i][j]==field[i][j+3]){hod(i, j+3, i, j+2); return}}
if(j>=2){if(field[i][j]==field[i][j-2]){hod(i, j-2, i, j-1); return}}
if(j+2<col){if(i>0){if(field[i][j]==field[i-1][j+2]){hod(i-1, j+2, i, j+2); return}}
if(i+1<row){if(field[i][j]==field[i+1][j+2]){hod(i+1, j+2, i, j+2); return}}}
if(j>=1){if(i>0){if(field[i][j]==field[i-1][j-1]){hod(i-1, j-1, i, j-1); return}}
if(i+1<row){if(field[i][j]==field[i+1][j-1]){hod(i+1, j-1, i, j-1); return}}}}}}
for(i=0; i<col; i++){
for(j=0; j<row-1; j++){if(field[j][i]==field[j+1][i]){
if(j+3<row){if(field[j][i]==field[j+3][i]){hod(j+3, i, j+2, i); return}}
if(j>=2){if(field[j][i]==field[j-2][i]){hod(j-2, i, j-1, i); return}}
if(j+2<row){if(i>0){if(field[j][i]==field[j+2][i-1]){hod(j+2, i-1, j+2, i); return}}
if(i+1<col){if(field[j][i]==field[j+2][i+1]){hod(j+2, i+1, j+2, i); return}}}
if(j>=1){if(i>0){if(field[j][i]==field[j-1][i-1]){hod(j-1, i-1, j-1, i); return}}
if(i+1<col){if(field[j][i]==field[j-1][i+1]){hod(j-1, i+1, j-1, i); return}}}}}}
for(i=0; i<row; i++){
for(j=0; j<col-2; j++){if(field[i][j]==field[i][j+2]){
if(i>0){if(field[i][j]==field[i-1][j+1]){hod(i, j+1, i-1, j+1); return}}
if(i+1<row){if(field[i][j]==field[i+1][j+1]){hod(i, j+1, i+1, j+1); return}}}}}
for(i=0; i<col; i++){
for(j=0; j<row-2; j++){
if(field[j][i]==field[j+2][i]){
if(i>0){if(field[j][i]==field[j+1][i-1]){hod(j+1, i, j+1, i-1); return}}
if(i+1<col){if(field[j][i]==field[j+1][i+1]){hod(j+1, i, j+1, i+1); return}}}}}
}
function hod(int x1, int y1, int x2, int y2)
{
mouse(LEFT, sx+stepX*y1+stepX/2, sy+stepY*x1+stepY/2 ); sleep(300);
mouse(LEFT, sx+stepX*y2+stepX/2, sy+stepY*x2+stepY/2 ); sleep(300);
mousemove(sx-10, sy); sleep(300);
} |
|
|
Zireael |
Отправлено: 23 Сентября, 2018 - 20:02:33
|
Эксперт
Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: А как то влияет если на поле есть не все загруженные картинки ?
Без разницы.
Цитата: Если просто их искать, то находятся, а в этом коде даже с большим разбегом ищутся не все.
Findimage в любом коде работает одинаково, или находит или нет.
Если игра в браузере, то картинки делать в том браузере, в котором запускается игра. В разных браузерах картинки отличаются по цвету. Это же касается разных пк. |
|
|
|