Zireael |
Отправлено: 12 Сентября, 2018 - 00:21:59
|
Эксперт
Покинул форум
Сообщений всего: 4463
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Поле 10х10. Создаём массив massiv[110][110]
Хватит массива 10*10.
Цитата: и если есть нужная фигура записываю "1"
Записывать надо номер картинки. Чтобы можно было потом сравнивать данные.
Цитата: А есть более оптимальный алгоритм заполнить массив ?
Искать картинки через findimage.
Цитата: Например, нужно нажать на координаты которые соответствуют massiv[5][1] и massiv[6][1]
Если размер клетки допустим 40*40, значит 3я клетка будет начинаться в координатах 120 (3*40). |
|
|
konctantin777 |
Отправлено: 12 Сентября, 2018 - 06:58:19
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Цитата: Хватит массива 10*10.
С запасом беру...
Цитата: и если есть нужная фигура записываю "1"
Цитата: Записывать надо номер картинки. Чтобы можно было потом сравнивать данные.
Не понял. Номер картинки это ведь и есть массив ? Например massiv[0][5] означает номер картинки 6 в 1м ряду ?
Цитата: А есть более оптимальный алгоритм заполнить массив ?
Искать картинки через findimage.
Через него и ищу, НО по очерди в каждой клетке..
Цитата: Например, нужно нажать на координаты которые соответствуют massiv[5][1] и massiv[6][1]
Если размер клетки допустим 40*40, значит 3я клетка будет начинаться в координатах 120 (3*40).[/quote]
Это да, но как об этом кибору сказать ?(Отредактировано автором: 12 Сентября, 2018 - 06:59:02) |
|
|
Zireael |
Отправлено: 12 Сентября, 2018 - 16:33:37
|
Эксперт
Покинул форум
Сообщений всего: 4463
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: ? Например massiv[0][5] означает номер картинки 6 в 1м ряду ?
CODE:massiv[0][5]=3; // в первом ряду, шестом столбце картинка 3
massiv[2][3]=2; // в третьем ряду, четвёртом столбце картинка 2
Цитата: ищу, НО по очерди в каждой клетке
Сразу искать все картинки одного типа, заполнять массив в зависимости от полученных координат.
Цитата: , но как об этом кибору сказать ?
CODE:int sx=300, y=200; // левый верхний угол поля
int x=40, y=40; // размеры клетки
mousemove(sx+x*3, sy+y*4); // переместить курсор в левый верхний угол клетки в четвёртом ряду, пятом столбце |
|
|
konctantin777 |
Отправлено: 12 Сентября, 2018 - 19:04:48
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Поторопился я задать столько вопросов- сам запутался ( Надо по- очереди...
Думал, что надо записывать состояние клетки, а не её номер..
1. Сначала проверяем всё поле и ищем все фишки нужного цвета.
код (Отобразить)CODE:int kol_vo_figur, figur_x, figur_y;
int col_KIB, ex_KIB, ey_KIB, sum_KIB, x_KIB, y_KIB;
int Image_0_KIB[26][17];
start_();
findimage_(#Image_0_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, #kol_vo_figur, #figur_x, #figur_y);
function start_()
{
getdisplay(col_KIB, ex_KIB, ey_KIB);
load_image_();
pause(1000);
}
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;
}
(Добавление)
2. Получили массив с порядковым № изображения и его координатами. А как его привязать к нужной клетке ?
(вначале ведь соотносим 100 клеток massiv[0][0]=0; massiv[1][0]=1; massiv[2][0]=2; и т.д. ?
(Добавление)
переменные (Отобразить)n=0, nx=0, ny=0, для перещёлкивания координат в поиске изображения
massiv[110][110],
massiv_x,
massiv_y,
x1=1, левый край игрового поля
x2=2, правый край игрового поля
y1=1,верхний край игрового поля
y2=2, нижний край игрового поля
razmer_kletki_x, размер клетки
razmer_kletki_y, размер клетки
kol_vo_figur[100], кол- во фигур на поле
figur_x[100], координаты найденной фигуры
figur_y[100] координаты найденной фигуры (Отредактировано автором: 12 Сентября, 2018 - 19:24:03) |
|
|
Zireael |
Отправлено: 12 Сентября, 2018 - 21:24:52
|
Эксперт
Покинул форум
Сообщений всего: 4463
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Получили массив с порядковым № изображения и его координатами. А как его привязать к нужной клетке ?
CODE:int sx=300, y=200; // левый верхний угол поля
int x=40, y=40; // размеры клетки
mousemove(sx+x*3, sy+y*4); // переместить курсор в левый верхний угол клетки в четвёртом ряду, пятом столбце
Из этого примера:
sx+x*3=420
sy+y*4=360
Надо из этого получить 3 и 4, чтобы записать номер картинки в massiv[3][4]...математика где-то 5й класс, решение уравнений. |
|
|
Zireael |
Отправлено: 13 Сентября, 2018 - 20:09:43
|
Эксперт
Покинул форум
Сообщений всего: 4463
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Как привязать к нужному массиву, а чтобы не записалось в massiv[0][0] ?
CODE:int i=3;
int j=4;
massiv[i][j]=2; // записать 2 в 4 строку 5 столбец |
|
|
konctantin777 |
Отправлено: 14 Сентября, 2018 - 19:38:19
|
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017
Откуда: Архангельск
Репутация: 6
|
Дело ясное, что дело тёмное... Подскажите где в оригинальном коде (Отобразить)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;
} забито значение "размер поля под фишку" ? Чтобы переделать под "Небеса"... |
|
|
|