stasrus |
Отправлено: 25 Октября, 2020 - 19:41:25
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Что не так с данным кодом? не хочет корректно работать. пытаюсь посчитать количество пикселей в области которая может быть разных цветов и присвоить переменной top количество пикселей
чтобы сравнить с другой переменной которую реализовываю таким же методом.
тоесть если в области нашло 10 пикселей 255 цвета то значит область равняется красной, если нашло 10 пикселей 0 цвета то черной
да понимаю что можно использовать другой метод findheapcolor, но интересно реализовать через массив именно этим методом, для самообучения
CODE:int x[10],y[10],n=0,top,color[3];
color[0]=255;
color[1]=65532;
color[2]=4641792;
color[3]=0;
top=findcolor(10, #x[0],#y[0], 863, 354, 1054, 392, color[n], -1);
while (top<10)
{
top=findcolor(10, #x[0],#y[0], 863, 354, 1054, 392, color[n], -1);
n++;
sleep(100);
}
Чтото мой код не нравится программе(для просмотра ссылки Вам необходимо авторизоваться) |
|
|
Zireael |
Отправлено: 25 Октября, 2020 - 20:01:04
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Чтото мой код не нравится программе
Массив color на 3 элемента, а записываете 4.
Размер массива color равен 3, значит переменная n не может быть больше 3. У вас же она постоянно увеличивается и нигде не обнуляется.
CODE:int x[10],y[10],n=0,top,color[4];
color[0]=255;
color[1]=65280;
color[2]=4641792;
color[3]=0;
int size_color = sizearray(color);
top=0;
while (top<10)
{
top=findcolor(10, #x[0],#y[0], 863, 354, 1054, 392, color[n], -1);
n++;
if(n>size_color)n=0;
sleep(100);
}
messagebox(color[n-1]); |
|
|
stasrus |
Отправлено: 26 Октября, 2020 - 00:05:02
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Спасибо за пояснение, думал что массив с нулем будет 4
Но все равно не работает правильно, точнее вообще по сути не работает, messagebox возвращает какой-то непонятный бред
(для просмотра ссылки Вам необходимо авторизоваться)
Для самообучения делаю ботов для разных игр, на данный момент для вот этой
Игра
CODE:
int x[10],y[10],n=0,n2=0,top,bot,color[4],color2[4];
color[0]=255;
color[1]=65532;
color[2]=4641792;
color[3]=0;
color2[0]=255;
color2[1]=65532;
color2[2]=4641792;
color2[3]=0;
int size_color = sizearray(color);
int size_color2 = sizearray(color);
pusk:
top=findcolor(10, #x[0],#y[0], 863, 354, 1054, 392, color[n], -1);
while (top<10)
{
top=findcolor(10, #x[0],#y[0], 863, 354, 1054, 392, color[n], -1);
n++;
if(n>size_color)n=0;
sleep(100);
}
messagebox(color[n-1]);
bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, color2[n2], -1);
while (bot<10)
{
bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, color2[n2], -1);
n2++;
if(n2>size_color2)n2=0;
sleep(100);
}
messagebox(color2[n2-1]);
//bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 255, -1);
//if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 65532, -1);
//if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 4641792, -1);
//if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 0, -1);
//
attack ();
goto pusk;
function attack();
{
if (bot==top)
{
mousedown(LEFT, 959, 774);
mouseup(LEFT, 959, 704)
sleep (500);
}
else
{
mousedown(LEFT, 959, 774);
mouseup(LEFT, 909, 774)
sleep (500);
}
}
Ziriael как думаете у такого полета мысли был шанс сделать это?
CODE:bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 255, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 65532, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 4641792, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 0, -1);
получается если не нашли 10 пикселей 255 цвета идем по следующему условию(Отредактировано автором: 26 Октября, 2020 - 00:20:15) |
|
|
Zireael |
Отправлено: 26 Октября, 2020 - 02:44:10
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:enablerealmouse(1, 0, 0, 0);
int x[10],y[10],n;
int color[4] = {255, 65532, 4641792, 0};
int size_color = sizearray(color);
// координаты слова, черный фон окна провал не должен попадать с эту область
int coord0[4]={846, 313, 1065, 374}; // левый верхний и правый нижний угол
// координаты шестгигранника с цветом
int coord1[2]={960, 767};
int r=30; // отклонение в цвете
pause(1000);
loop()
{
// поиск цвета слова
n=0;
while (findcolor(10, #x[0],#y[0], coord0[0], coord0[1], coord0[2], coord0[3], color[n],r,r,r,r,r,r, -1)<10)
{
n++;
if(n==size_color)n=0;
sleep(1);
}
loop()
{
if(scanpixel(coord1[0], coord1[1], color[n], r,r,r,r,r,r,-1)) // если цвет найден
{
mousedown(LEFT, coord1[0], coord1[1]);
sleep(1);
mouseup(LEFT, coord1[0], coord1[1]-200); // курсор вверх
sleep(300);
break; // выход из цикла
}
else
{
mousedown(LEFT, coord1[0], coord1[1]);
sleep(1);
mouseup(LEFT, coord1[0]-200, coord1[1]); // курсор влево
sleep(150);
}
sleep(1);
}
} |
|
|
stasrus |
Отправлено: 26 Октября, 2020 - 14:07:23
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Zireael , Красиво получилось
Ziriael как думаете у такого полета мысли был шанс сделать это в теории? по идее логика то рабочая должна быть, сразу присвоили переменной 255 цвет и смотрим равна ли она 10 если нет присваиваем ей следующий цвет. это как бы вариант без массивов. вторая переменная по верху была также но скрипт так и не заработал.
bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 255, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 65532, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 4641792, -1);
if (bot<10) bot=findcolor(10, #x[0],#y[0], 946, 1054, 956, 1064, 0, -1);(Отредактировано автором: 26 Октября, 2020 - 14:10:17) |
|
|
stasrus |
Отправлено: 26 Октября, 2020 - 16:45:31
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Zireael , Спасибо за объяснение
Возник такой вопрос
есть такая картинка(для просмотра ссылки Вам необходимо авторизоваться)
Реализовал пока так
CODE:
string number1,marks,number2;
loadsymbolbase ("C:\kibor_set (1)\test\game3.sib");
readtext (NUM, #number1, 8, 1, -1, -1, -1, -1, -1, 0, -1, 767, 209, 949, 341, -1); //первое число
readtext (NUM | MARK, #marks, 8, 1, -1, -1, -1, -1, -1, 0, -1, 928, 239, 989, 317, -1);// знаки
readtext (NUM | MARK, #number2, 8, 1, -1, -1, -1, -1, -1, 0, -1, 982, 227, 1066, 322, -1);// второе число
застрял на том что не пойму что делать с marks во что его преобразовывать и как добавлять его в переменную?
Если числа я могу перевести в int через formatsn то как добавить знаки не понятно.
Сама игра(для просмотра ссылки Вам необходимо авторизоваться)
Прошу только не писать готовый код)(Отредактировано автором: 26 Октября, 2020 - 16:48:13) |
|
|
Zireael |
Отправлено: 27 Октября, 2020 - 01:08:00
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
CODE:string Text = "23 - 6 ="; // допустим это распознаный текст
string number[2], marks, temp;
regexreplace(-1, #Text, Text, "[^\d\+\-\*\/]", ""); // удалить из строки всё кроме чисел и знаков операции
if(regexsearch(1, #temp, Text, "\d+[\+\-\*\/]\d+")) // проверка что в строке есть 2 числа и знак операции
{
if(regexsearch(2, #number[0], Text, "\d+")) // поиск двух чисел
{
regexreplace(-1, #marks, Text, "\d", ""); // удалить из строки все числа, т. е. остаётся только знак операции
int result;
if(marks=="+")result = formatsn(number[0]) + formatsn(number[1]);
if(marks=="-")result = formatsn(number[0]) - formatsn(number[1]);
if(marks=="*")result = formatsn(number[0]) * formatsn(number[1]);
if(marks=="/")result = formatsn(number[0]) / formatsn(number[1]);
}
messagebox(Text+"="+format(result));
}
else messagebox("Строка не является примером"); |
|
|
stasrus |
Отправлено: 27 Октября, 2020 - 01:16:52
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Zireael , Благодарю за ответ, все стало понятно)
Жаль что я сам до этого не додумался сделать через if
Цитата: if(marks=="+" result = formatsn(number[0]) + formatsn(number[1]);
if(marks=="-" result = formatsn(number[0]) - formatsn(number[1]);
if(marks=="*" result = formatsn(number[0]) * formatsn(number[1]);
if(marks=="/" result = formatsn(number[0]) / formatsn(number[1]);
У меня был план сделать както так
result = (formatsn(number1)+marks+formatsn(number2)); |
|
|
stasrus |
Отправлено: 05 Ноября, 2020 - 13:21:08
|
Участник
Покинул форум
Сообщений всего: 62
Дата рег-ции: Сент. 2020
Репутация: -1
|
Продолжаю пытаться самосовершенствоваться , застрял на данной задаче
есть картинка (для просмотра ссылки Вам необходимо авторизоваться) как записать в файл массив вида
не могу придумать саму логику как это должно работать
пытался при нахождении изображения добавлять 1 или 2, но это както тупо
CODE:
sleep(1000);
if (findimage(-1, #Image_1[0][0], 0, #PosX_0[0], #PosY_0[0], 0, 0, 1920, 1080, -1)=1)
{
fopen ("c:\5.txt", "a");
fwrite ("1");
fclose();
}
int PosX_01[512];int PosY_02[512];
if (findimage(-1, #Image_2[0][0], 0, #PosX_01[0], #PosY_02[0], 0, 0, 1920, 1080, -1)=1)
{
fopen ("c:\5.txt", "a");
fwrite ("2");
fclose();
}
у меня идет поиск с левого верха в нижний левый низ и как поднять перенос не совсем понятно
|
|
|
|