1. Alexey_Tish - 11 Мая, 2024 - 07:41:57 - перейти к сообщению
В игре есть пиксельный прямоугольник, который рандомно движется: то вправо, то влево, по прямой, а также поплавок в виде круга, который движется вправо, при нажатии кнопки и влево, при бездействии, вдоль одной прямой с прямоугольничком. Если поплавок попал в прямоугольник, то он меняет цвет с зеленого на красный. Нужно сделать так, чтобы поплавок был в зоне прямоугольника определенное время, но при этом если поплавок будет вне зоны прямоугольника, то спустя какое-то время рыбалка завершается неудачей. Проблема в том, что прямоугольник движется довольно быстро и я не могу найти решение, которое будет достаточно быстро обрабатываться и срабатывать, чтобы большую часть времени поплавок был в нужной зоне. Я буду очень благодарен, если вы подскажете с помощью какой логической цепочки это можно реализовать. При надобности могу дать видео из игры или фото. Если вы можете предоставить готовое решение тг: @Lexa_Kalxoznik
2. GreatProgram - 11 Мая, 2024 - 08:26:41 - перейти к сообщению
Для какой игры бот?
(Если не хочешь распространяться, можно через ЛС форума...)
(Если не хочешь распространяться, можно через ЛС форума...)
3. Alexey_Tish - 11 Мая, 2024 - 12:59:31 - перейти к сообщению
4. GreatProgram - 12 Мая, 2024 - 01:15:46 - перейти к сообщению
В принципе логику придумал, но хромает знание синтаксиса и знание возможностей кибора...
(Добавление)
Можно реализовать через scanpixel, посекторно, но это муторное занятие...
Либо через findimage:
Вопрос можно ли вытащить в переменные эти значения (выделил красным):
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
(Добавление)
[code]int PosBX, PosBY;//Коричневый
int PosGX, PosGY;//Зеленый
int PosPX, PosPY;//Поплавок
int Image[3][7][5];
int SCREEN[673][6];
loadimage (#Image[0][0][0], "C:\ZO\Img0.bmp" ); // Можно ли так записать или нет?
loadimage (#Image[1][0][0], "C:\ZO\Img1.bmp" ); // Можно ли так записать или нет?
loadimage (#Image[2][0][0], "C:\ZO\Img2.bmp" ); // Можно ли так записать или нет?
int screen (#SCREEN[0][0], 624, 895, 1297, 901, -1);
findimage(1, Image[0][0][0], -1, PosBX, PosBY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
findimage(1, Image[1][0][0], -1, PosGX, PosGY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
findimage(1, Image[2][0][0], -1, PosPX, PosPY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
Далее можно сравнивать полученные значения PosBX, PosGX, PosPX.
И исходя из полученных значений принимать решение — нажать на кнопку мыши, что бы поплавок пошел вправо или нет...
Да это надо бы заключить в цикл, но сейчас не об этом.
(Добавление)
Можно реализовать через scanpixel, посекторно, но это муторное занятие...
Либо через findimage:
CODE:
int PosX, PosY;
int SCREEN[70][70];
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
int SCREEN[70][70];
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
Вопрос можно ли вытащить в переменные эти значения (выделил красным):
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
(Добавление)
[code]int PosBX, PosBY;//Коричневый
int PosGX, PosGY;//Зеленый
int PosPX, PosPY;//Поплавок
int Image[3][7][5];
int SCREEN[673][6];
loadimage (#Image[0][0][0], "C:\ZO\Img0.bmp" ); // Можно ли так записать или нет?
loadimage (#Image[1][0][0], "C:\ZO\Img1.bmp" ); // Можно ли так записать или нет?
loadimage (#Image[2][0][0], "C:\ZO\Img2.bmp" ); // Можно ли так записать или нет?
int screen (#SCREEN[0][0], 624, 895, 1297, 901, -1);
findimage(1, Image[0][0][0], -1, PosBX, PosBY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
findimage(1, Image[1][0][0], -1, PosGX, PosGY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
findimage(1, Image[2][0][0], -1, PosPX, PosPY, 0, 0, 673, 6, #SCREEN[0][0]);// Можно ли так записать или нет?
Далее можно сравнивать полученные значения PosBX, PosGX, PosPX.
И исходя из полученных значений принимать решение — нажать на кнопку мыши, что бы поплавок пошел вправо или нет...
Да это надо бы заключить в цикл, но сейчас не об этом.
5. GreatProgram - 12 Мая, 2024 - 10:01:42 - перейти к сообщению
Так в общем то что было выше, было не правильно.
Вот рабочий вариант, но его придется понастроить под себя, так как разрешение для которого я делал у меня 1920x1080.
Насколько я понял что бы вправо шел поплавок надо удерживать ЛКМ?
Если отпустить то будет откатываться постепенно влево?
Если так то вот изображения для работы скрипта ссылка
и код:
pause(1500);
int PosX[3],PosY[3];
int Img[3][7][5];
int SCREEN[673][6];
for (int n=0; n<3; n++)loadimage(#Img[n][0][0], "C:\ZO\Img"+format(n)+".bmp" );
int r=15;
againfish:;
screen (#SCREEN[0][0], 624, 895, 1297, 901, -1);
for (n=0; n<3; n++)findimage(1, #Img[n][0][0], -1, #PosX[n], #PosY[n], 0,0, 673,6, r,r,r,r,r,r, 60, 1, #SCREEN[0][0]);
if(PosX[0]>PosX[1])//если есть зеленая, но нет коричневой полосы
{
if(PosX[2]<PosX[0]+70){mousedown(LEFT,1650,800);pause(1200);mouseup(LEFT);}//если поплавок в зеленой зоне, но меншье чем (зеленая с +70 пикселей)
else pause(400);
}
if(PosX[0]<PosX[1])//если есть Коричневая, но нет зеленой полосы
{
if(PosX[2]<PosX[1]){mousedown(LEFT,1650,800);pause(1200);mouseup(LEFT);}
else pause(400);
}
if(PosX[2]>0 && PosX[2]<672) goto againfish;
//отладка:
//{int k=findimage(1, #Img[n][0][0], -1, #PosX[n], #PosY[n], 0,0, 673,6, r,r,r,r,r,r, 99, 1, #SCREEN[0][0]); messagebox(k);}
//messagebox(format(PosX[0])+"=PosX[0]green"+"^r^n"+format(PosX[1])+"=PosX[1]Brown"+"^r^n"+format(PosX[2])+"=PosX[2]poplavok" );
Вот рабочий вариант, но его придется понастроить под себя, так как разрешение для которого я делал у меня 1920x1080.
Насколько я понял что бы вправо шел поплавок надо удерживать ЛКМ?
Если отпустить то будет откатываться постепенно влево?
Если так то вот изображения для работы скрипта ссылка
и код:
Цитата:
pause(1500);
int PosX[3],PosY[3];
int Img[3][7][5];
int SCREEN[673][6];
for (int n=0; n<3; n++)loadimage(#Img[n][0][0], "C:\ZO\Img"+format(n)+".bmp" );
int r=15;
againfish:;
screen (#SCREEN[0][0], 624, 895, 1297, 901, -1);
for (n=0; n<3; n++)findimage(1, #Img[n][0][0], -1, #PosX[n], #PosY[n], 0,0, 673,6, r,r,r,r,r,r, 60, 1, #SCREEN[0][0]);
if(PosX[0]>PosX[1])//если есть зеленая, но нет коричневой полосы
{
if(PosX[2]<PosX[0]+70){mousedown(LEFT,1650,800);pause(1200);mouseup(LEFT);}//если поплавок в зеленой зоне, но меншье чем (зеленая с +70 пикселей)
else pause(400);
}
if(PosX[0]<PosX[1])//если есть Коричневая, но нет зеленой полосы
{
if(PosX[2]<PosX[1]){mousedown(LEFT,1650,800);pause(1200);mouseup(LEFT);}
else pause(400);
}
if(PosX[2]>0 && PosX[2]<672) goto againfish;
//отладка:
//{int k=findimage(1, #Img[n][0][0], -1, #PosX[n], #PosY[n], 0,0, 673,6, r,r,r,r,r,r, 99, 1, #SCREEN[0][0]); messagebox(k);}
//messagebox(format(PosX[0])+"=PosX[0]green"+"^r^n"+format(PosX[1])+"=PosX[1]Brown"+"^r^n"+format(PosX[2])+"=PosX[2]poplavok" );