Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Помогите с кодом

Страниц (2): « 1 [2]
 

11. Zireael - 05 Ноября, 2020 - 06:13:46 - перейти к сообщению
 Цитата:
есть картинка(для просмотра ссылки Вам необходимо авторизоваться) как записать в файл массив вида

code (Отобразить)

findheapcolor можно заменить на findimage.
12. stasrus - 05 Ноября, 2020 - 06:54:47 - перейти к сообщению
Zireael , Большое спасибо, очень помогает в освоении.

Если будет время, не могли бы вы пояснить чуть подробнее, не совсем понятно как это все работает.

например вот это место
CODE:

// массив для хранения позиций
new int array[row][column];
initialarray(#array[0][0], 0);


Из справки:
 Цитата:
initialarray позволяет заполнить массив одинаковыми данными.

у нас же не одинаковые данные? может же быть много разных изображений
Да и с new не понятно для чего здесь?
 Цитата:
new - Динамичное выделение памяти


Дальше по функциям вроде могу примерно понять, но вот по логике скрипта совсем не понятно

CODE:

//поиск объектов
for(i=0; i<sizearray(colors); i++)
{
color[0]=colors[i];
count=findheapcolor(sizearray(PosX),#color[0],#kol[0],1,1,#PosX[0],#PosY[0], 100,50,100,50,coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,-1);
//messagebox("Найдено: "+format(count));
if(count)
{
for(j=0; j<count; j++)
{
//mousemove(coord[0]+PosX[j], coord[1]+PosY[j]); sleep(500);
int positionX = PosX[j] / width_section;
int positionY = PosY[j] / height_section;
//messagebox(format(positionX)+" "+format(positionY));
array[positionY][positionX] = i+1;
}
}
else messagebox("Не найдено");
}

// записать массив в файл
if(fopen(path, "w"))
{
for(i=0; i<row; i++)
{
for(j=0; j<column; j++)fwrite(array[i][j]);
fwrite(ENDL);
}
fclose();
start(path);
}


Где место которое присваивает изображению цифру 1 или 2?
Если будет возможность прокомментируйте каждую строку чтобы понять что вообще происходит . не хочется просто скопировать кусок чужого кода, интересно добраться до сути.
чтобы вы понимали насколько это все не просто, свою часть кода я писал почти 6 часов. но там немного больше было кода, еще нужно было открывать изображения по массиву. и постоянно чтото не работало
(Добавление)
Ув Zireael , я там в личку отписал по другому вопросу
13. ivantu - 05 Ноября, 2020 - 07:47:07 - перейти к сообщению
 stasrus пишет:
массив одинаковыми данными.

Имеется ввиду данными одного типа к примеру int
New динамический массив который имеет приставку new*, т.е. массив может увеличиваться в процессе.
 stasrus пишет:
Где место которое присваивает изображению цифру 1 или 2?

Тут поиск цвета, а не картинок, т.е. в квадрате к примеру пикселей красного цвета 200, а в круге 180, по этому принципу идет отслеживание обьектов.
 stasrus пишет:
count=findheapcolor(sizearray(PosX),#color[0],#kol[0],1,1,#PosX[0],#PosY[0], 100,50,100,50,coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,-1);
14. Zireael - 05 Ноября, 2020 - 17:16:35 - перейти к сообщению
 Цитата:
initialarray позволяет заполнить массив одинаковыми данными.
у нас же не одинаковые данные? может же быть много разных изображений

Чтобы изначально заполнить какими-то данными. Можно не заполнять, если какой-то объект не найдется запишет в файл вместо 0 что-то вроде этого -842150451.
 Цитата:
Да и с new не понятно для чего здесь?

Чтобы размер массива задать перемеными.
 Цитата:
т.е. в квадрате к примеру пикселей красного цвета 200, а в круге 180, по этому принципу идет отслеживание обьектов.

Нет. Просто поиск по цвету, количество тут незачем учитывать.
 Цитата:
Если будет возможность прокомментируйте каждую строку чтобы понять что вообще происходит

CODE:
//поиск объектов
for(i=0; i<sizearray(colors); i++) // цикл для всех цветов в массиве
{
color[0]=colors[i]; // присвоить переменной цвет, который будем искать
count=findheapcolor(sizearray(PosX),#color[0],#kol[0],1,1,#PosX[0],#PosY[0], 100,50,100,50,coord[0],coord[1],coord[2],coord[3], r,r,r,r,r,r,-1);
//messagebox("Найдено: "+format(count));
if(count) // если объект найден
{
for(j=0; j<count; j++) // цикл для всех найденных объектов
{
//mousemove(coord[0]+PosX[j], coord[1]+PosY[j]); sleep(500);
int positionX = PosX[j] / width_section; // позиция объекта исходя из его позиции на поле и ширины столбца
int positionY = PosY[j] / height_section; // позиция объекта исходя из его позиции на поле и высоты строки
//messagebox(format(positionX)+" "+format(positionY));
array[positionY][positionX] = i+1; // записать в массив цифру
}
}
else messagebox("Не найдено");
}

Допустим, имеется поле в 3 столбца шириной 120 пикселей. Значит ширина одного столбца 120 / 3 = 40 пикселей. Если объект нашёлся по оси X в координатах от 0 до 40 значит он в первом столбце, от 40 до 80 во втором, от 80 до 120 в третьем. По Y тоже самое.
15. stasrus - 06 Ноября, 2020 - 05:43:06 - перейти к сообщению
Zireael , ivantu , Большое спасибо за объяснение.
Это как crackme, ищу легкие игры для самообучения, но при всей их кажущейся простоте в итоге все оказывается далеко не так просто.

Вот эта игра была(для просмотра ссылки Вам необходимо авторизоваться) но придется ее оставить, все слишком сложно изза того что изображения все закрываются

Powered by ExBB FM 1.0 Final