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

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

1. stasrus - 25 Октября, 2020 - 12:41:25 - перейти к сообщению
Что не так с данным кодом? не хочет корректно работать. пытаюсь посчитать количество пикселей в области которая может быть разных цветов и присвоить переменной 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);
}


Чтото мой код не нравится программе(для просмотра ссылки Вам необходимо авторизоваться)
2. Zireael - 25 Октября, 2020 - 13:01:04 - перейти к сообщению
 Цитата:
Чтото мой код не нравится программе

Массив 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]);
3. stasrus - 25 Октября, 2020 - 17:05:02 - перейти к сообщению
Спасибо за пояснение, думал что массив с нулем будет 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 цвета идем по следующему условию
4. Zireael - 25 Октября, 2020 - 19:44:10 - перейти к сообщению
code (Отобразить)
5. stasrus - 26 Октября, 2020 - 07:07:23 - перейти к сообщению
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);
6. Zireael - 26 Октября, 2020 - 07:20:14 - перейти к сообщению
У этой части кода нет смысла, после выполнения получим переменную bot равную 10 если какой-то цвет найдётся или 0 если не найдется. Только это ничего не дает, нигде же записывается какого цвета нашлось 10 пикселей.
7. stasrus - 26 Октября, 2020 - 09:45:31 - перейти к сообщению
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 то как добавить знаки не понятно.

Сама игра(для просмотра ссылки Вам необходимо авторизоваться)
Прошу только не писать готовый код)
8. Zireael - 26 Октября, 2020 - 18:08:00 - перейти к сообщению
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("Строка не является примером");
9. stasrus - 26 Октября, 2020 - 18:16:52 - перейти к сообщению
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));
10. stasrus - 05 Ноября, 2020 - 05:21:08 - перейти к сообщению
Продолжаю пытаться самосовершенствоваться , застрял на данной задаче
есть картинка (для просмотра ссылки Вам необходимо авторизоваться) как записать в файл массив вида

CODE:

122
211
121


не могу придумать саму логику как это должно работать
пытался при нахождении изображения добавлять 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();
}


у меня идет поиск с левого верха в нижний левый низ и как поднять перенос не совсем понятно

CODE:

Zireael ();

Powered by ExBB FM 1.0 Final