CODE:
pause(1000);
int Бот_Обучение=getcontrol(CHECK_0);
string OPIT[10000];
string SHAR[10000];
int OC[10000];
if (Бот_Обучение==1)enabletimer(0);
int MOC=formatsn(getcontrol(EDIT_0));//0
//Координаты сканирования линии
int LINE_X1=780;
int LINE_X2=1110;
int LINE_Y1=740;
int LINE_Y2=LINE_Y1+1;
//Зона сканирования шара
int Shar0[4]={645, 950, 678, 973}
int Shar1[4]={935, 940, 980, 970}
int Shar2[4]={1170, 940, 1220, 970}
int otrez=10;//Делим на столько отрезков линию
int otr=(LINE_X2-LINE_X1)/otrez;//Узнаем длину отрезка
int r=20;
int Color_White=16448255;//Белый пиксель
int Цвет_Шар=5921369;//Цвет пикселя шара
int CE, XE, YE;
int SCREEN[5000][5000];
string T;
string Shar;
int kml_OPIT=0;
if (fopen ("E:\бот\бот\ii.txt", "r")!=0)
{
A: fread(OPIT[kml_OPIT]);
fread(SHAR[kml_OPIT]);
if (fread(OC[kml_OPIT]))
{
//Нсли файл открыт для работы бота
if (Бот_Обучение==0)
{
if (OC[kml_OPIT]>=MOC) kml_OPIT++;//Если оценка равна илы выше чем в настройках
}
else kml_OPIT++;
goto A;
}
fclose();
if (kml_OPIT>0) kml_OPIT++;
OPIT[kml_OPIT]="";
}
int tkml_OPIT=kml_OPIT;//Запоминаем сколько уроков мы прочитали с файла
getdisplay(CE, XE, YE);
int p2=100;//Пауза после нажатия
Положение_Шара();//Узнаем пложение шара
loop()
{
T="";
screen (#SCREEN[0][0], 0, 0, XE, YE, -1);//Получаем скрин всего экрана
for (int X=LINE_X1; X<LINE_X2; X=X+otr)
{
if (sumcolor(otr, X, LINE_Y1, X+otr, LINE_Y2, Color_White, r, r, r, r, r, r, #SCREEN[0][0])==otr) T=T+"_";//Если на данном отрезке все пикселя белые
else T=T+"O";
}
//Если обучение
//<37 ^38 >39
if (Бот_Обучение==1)
{
//Если во время обучения была нажата кнопка, откатываем несколько шагов запомненных уроков назад (так как до этого шар был не на верном месте)
if (getkeystate(37) || getkeystate(38) || getkeystate(39))
{
kml_OPIT=kml_OPIT-3;
if (kml_OPIT<tkml_OPIT)kml_OPIT=tkml_OPIT;//Не откатывать менее чем прочитали с файла
sleep(p2);
continue;
}
if (T=="__________" || T=="OOOOOOOOOO")continue;//Игнорирует полностью белое или заполненное поле пикселей
OPIT[kml_OPIT]=T;//Запоминаем карту заполненных пикселей
Положение_Шара();//Узнаем пложение шара
SHAR[kml_OPIT]=Shar;//Запоминаем положение шара
kiborlog (0, OPIT[kml_OPIT]+" "+SHAR[kml_OPIT]+" -- "+format(kml_OPIT), 5, 5, 500, 300);
kml_OPIT++;//Увеличиваем счетчик уроков
OPIT[kml_OPIT]="";
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//Если запущен Бот на работу
if (Бот_Обучение==0)
{
//Смотрим весь список уроков
for (int n=0; n<kml_OPIT; n++)
{
if (T==OPIT[n])//Если карта просканированных пикселей совпала с картой урока
{
if (Shar!=SHAR[n])//Если положение шара не такое как на уроке
{
//Сдвигаем шар в нужную позицию учитывая где он сейчас
if (Shar=="0")
{
if (SHAR[n]=="1"){key(39);sleep(p2); Положение_Шара();}
if (SHAR[n]=="2"){key(39);sleep(250);key(39);sleep(p2); Положение_Шара();}
}
if (Shar=="1")
{
if (SHAR[n]=="0"){key(37);sleep(p2); Положение_Шара();}
if (SHAR[n]=="2"){key(39);sleep(p2); Положение_Шара();}
}
if (Shar=="2")
{
if (SHAR[n]=="0"){key(37);sleep(250);key(37);sleep(p2); Положение_Шара();}
if (SHAR[n]=="1"){key(37);sleep(p2); Положение_Шара();}
}
}
kiborlog (0, T+" "+Shar+" -- "+OPIT[n]+" "+SHAR[n], 5, 5, 500, 300);
goto NNR;//Выходим с цикла чтения уроков
}
}
kiborlog (0, T+" "+Shar, 5, 5, 500, 300);
NNR:;
}
}
ex:;
function save()
{
string OPIT1[10000];
string SHAR1[10000];
int OC1[10000];
int kml_OPIT1;
//Присваиваем оценки каждому уроку по количеству его совпадений Пикселей и Положению шара
//Уроки (совпадение Пикселей и Положению шара) могут повторяться, но самые высокие оценки получат те которые выше по списку
initialarray(#OC[0], 0);
for (int e=0; e<kml_OPIT; e++)
{
for (int e1=e+1; e1<kml_OPIT; e1++)
{
if (OPIT[e]==OPIT[e1] && SHAR[e]==SHAR[e1])OC[e]++;
}
}
////////////////////////////////
//Отсеиваем все уроки 0 оценкой
//Отсеиваем уроки (совпадение Пикселей и Положению шара) которые ниже по списку
//Остаются только уроки с наиболее высшей оценкой, так как они выше по списку.
kml_OPIT1=0;
for (e=0; e<kml_OPIT; e++)
{
if (OC[e]==0)goto nn;
for (e1=0; e1<kml_OPIT1; e1++)
{
if (OPIT[e]==OPIT1[e1] && SHAR[e]==SHAR1[e1])goto nn;
}
OPIT1[kml_OPIT1]=OPIT[e];
SHAR1[kml_OPIT1]=SHAR[e];
OC1[kml_OPIT1]=OC[e];
kml_OPIT1++;
nn:;
}
////////////////////////////////
string T_OPIT;
string T_SHAR;
int T_OC;
//Сравниваем оценки которые присвоены одинаковым Совпадением пикселей, но имеют разное положение шара
//Составляем список состоящий только из уроков которые имеют высшие оценки.
//Будут появляться дубликаты
kml_OPIT=0;
for (e=0; e<kml_OPIT1; e++)
{
T_OPIT=OPIT1[e];
T_SHAR=SHAR1[e];
T_OC=OC1[e];
for (e1=0; e1<kml_OPIT1; e1++)
{
if (OPIT1[e]==OPIT1[e1])
{
if (OC1[e1]>T_OC)
{
T_OPIT=OPIT1[e1];
T_SHAR=SHAR1[e1];
T_OC=OC1[e1];
}
}
}
OPIT[kml_OPIT]=T_OPIT;
SHAR[kml_OPIT]=T_SHAR;
OC[kml_OPIT]=T_OC;
kml_OPIT++;
}
////////////////////////////////
//Отсеиваем дубликаты
kml_OPIT1=0;
for (e=0; e<kml_OPIT; e++)
{
for (e1=0; e1<kml_OPIT1; e1++)
{
if (OPIT[e]==OPIT1[e1] && SHAR[e]==SHAR1[e1])goto nn1;
}
OPIT1[kml_OPIT1]=OPIT[e];
SHAR1[kml_OPIT1]=SHAR[e];
OC1[kml_OPIT1]=OC[e];
kml_OPIT1++;
nn1:;
}
////////////////////////////////
if (fopen ("E:\бот\бот\ii.txt", "w")!=0)
{
for (e=0; e<kml_OPIT1; e++)
{
fwrite(OPIT1[e]);fwrite(" ");
fwrite(SHAR1[e]);
fwrite(" ");
fwrite(OC1[e]);
fwrite(ENDL);
}
fclose();
}
goto global ex;
}
function Положение_Шара()
{
loop()
{
screen (#SCREEN[0][0], 0, 0, XE, YE, -1);
if (sumcolor(2, Shar0[0], Shar0[1], Shar0[2], Shar0[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])==2 &&
sumcolor(2, Shar1[0], Shar1[1], Shar1[2], Shar1[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2 &&
sumcolor(2, Shar2[0], Shar2[1], Shar2[2], Shar2[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2){Shar="0"; return;}
if (sumcolor(2, Shar1[0], Shar1[1], Shar1[2], Shar1[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])==2 &&
sumcolor(2, Shar0[0], Shar0[1], Shar0[2], Shar0[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2 &&
sumcolor(2, Shar2[0], Shar2[1], Shar2[2], Shar2[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2){Shar="1"; return;}
if (sumcolor(2, Shar2[0], Shar2[1], Shar2[2], Shar2[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])==2 &&
sumcolor(2, Shar0[0], Shar0[1], Shar0[2], Shar0[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2 &&
sumcolor(2, Shar1[0], Shar1[1], Shar1[2], Shar1[3], Цвет_Шар, r, r, r, r, r, r, #SCREEN[0][0])<2){Shar="2"; return;}
}
}
CREATE_TIMER(0, 100)//Номер таймера, выполнение таймера через мсек.
{
if (getkeystate(65))
{
save();
}
}
CREATE_INTERFACE
{
DIALOG "Название окна" 237 180 //РазмерX РазмерY
BUTTONSCRIPT "Запустить" 125 121 100 25 //ПозицияX ПозицияY РазмерX РазмерY
//Добавление контролов управления ......
CHECK_0 0 /*Выключена*/ "Обучение" 10 130 105 18 //ПозицияX ПозицияY РазмерX РазмерY
STATIC_0 "Не учитывать оценки менее" 10 10 150 18 //ПозицияX ПозицияY РазмерX РазмерY
EDIT_0 "0" 170 8 50 18 //ПозицияX ПозицияY РазмерX РазмерY
}