Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (10): « 1 2 3 4 [5] 6 7 8 9 » В конец    

> Описание: Как привязать переменные ?
Kibor
Отправлено: 27 Сентября, 2018 - 12:01:49
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




а где тот скрипт кликермана который все уже просчитывает?
покажите.
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 12:04:54
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




(для просмотра ссылки Вам необходимо авторизоваться)
 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 12:59:32
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Нет уж.
Ок. Чуть позже освобожусь и набросаю как вообще надо делать логику для таких задач.
А то что случится если вдруг мы перебором вручную решим делать бот для шахмат))
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 13:41:21
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Ну... Надо просто придумать как оптимизировать...
Ну... И человека который сможет это придумать Улыбка
 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 14:12:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 konctantin777 пишет:
Надо просто придумать как оптимизировать...

Это придумано еще до нас. Называется минимакс.
Используется в шахматных и подобных программах.
Принцип - делаем ход за себя и за противника. Оцениваем ситуацию.
Делаем ход еще за себя и за противника - оцениваем. И так перебираем все дерево ходов на нную величину. Выбираем первый ход с лучшей оценкой в конце.
Смысл перебрать все полностью ходы (если без оптимизации) за себя и за противника.
При оценке наши преимущества дают нам+, преимущества противника дают нам -. Тут вариации как будет идти оценка.

Набросал примитивный код с похожим принципом. Ну конечно за противника не ходит)

function perebor()//Перебирает все возможные комбинации меняя соседние фишки
При каждом ходе на поле появляется новая позиция.

Эта позиция оценивается функцией
function proverka()//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
которая возвращает тем больше оценку, чем длиннее найдена линия из фишек.

Благодаря сравнению оценок >= в функции perebor в приоритете нижние позиции.

Особо не тестировал и не оптимизировал.

CODE:
pause(1000);

int X=7;
int Y=7;
int SX=78, SY=129, FX=243, FY=294;


new int m[X][Y];
new int Xm[X][Y];
new int Ym[X][Y];
new string T[Y];
int kx1, ky1, kx2, ky2;
int x, y;
int x1, y1;
int x2, y2;

new int t[X][Y];

enablerealmouse(10, 0, 0, 0);
loadsymbolbase ("C:\3_v_ryad\Новая база.sib");
int Color_Fon[6];
Color_Fon[0]=102; Color_Fon[1]=11369000; Color_Fon[2]=12352582; Color_Fon[3]=13474616;
Color_Fon[4]=12431005; Color_Fon[5]=6704179;

loop()
{
readtext (NUM, #T[0], 2, -1, -1, -1, -1, -1, #Color_Fon[0], 14, -1, SX, SY, FX, FY, -1);
raschet();
perebor();
//messagebox (perebor());
/////
mousedown(LEFT, Xm[kx1][ky1], Ym[kx1][ky1]);
pause(1000);
mouseup(LEFT, Xm[kx2][ky2], Ym[kx2][ky2]);
sleep(200);
mousemove(10, 10);
/////
/*
/////
if (fopen ("c:\5.txt", "w")!=0)
{
for (y=0; y<Y; y++)
{
for (x=0; x<X; x++)
{
fwrite(m[x][y]);fwrite(" ");
}
fwrite(ENDL);
}
fclose();
}
/////
*/
pause(3000);
}

//01 23 5 2 1
function raschet()
{
int x1=0, y1=0;
char C[50];
int siz;
for (y=0; y<Y; y++)
{
strcpy(#C[0], T[y]);
siz=size(#C[0]);
for (x=0; x<siz; x++)
{
if (C[x]!=' ' && symbolcorrect(y, x)>0.5)
{
m[x1][y1]=formatsn(C[x]);
Xm[x1][y1]=SX+symbolxpos(y, x)+symbolwidth(y, x)/2;
Ym[x1][y1]=SY+symbolypos(y, x)-symbolheight(y, x)/2;
x1++;
if (x1>X-1)
{
x1=0;
y1++;
}
}
}
}
}






function perebor()//Перебирает все возможные комбинации меняя соседнте фишки
{
int tp;
int Max=-1;
int tMax=-1;

for (y=1; y<Y-1; y++)
{
for (x=1; x<X-1; x++)
{
//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}//Возвращаем массив t в исходную позицию фишек
//Делаем ход меняя x на x-1
tp=t[x][y];
t[x][y]=t[x-1][y];
t[x-1][y]=tp;
Max=proverka();//Оцениваем полученную ситуацию
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x-1; ky2=y;}//Если оценка больше предыдущей, записываем координаты и оценку сохраняем.
//Меняем назад на исходную.
tp=t[x][y];
t[x][y]=t[x-1][y];
t[x-1][y]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x+1][y];
t[x+1][y]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x+1; ky2=y;}
tp=t[x][y];
t[x][y]=t[x+1][y];
t[x+1][y]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x][y-1];
t[x][y-1]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y-1;}
tp=t[x][y];
t[x][y]=t[x][y-1];
t[x][y-1]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x][y+1];
t[x][y+1]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y+1;}
tp=t[x][y];
t[x][y]=t[x][y+1];
t[x][y+1]=tp;
}
}
//textout(0, 100, 50, format(tMax), 0);
return tMax;
}


function proverka()//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
{
int Ocenka;
int tOcenka=-1;

for (y2=0; y2<Y; y2++)
{
Ocenka=1;
for (x2=0; x2<X-1; x2++)
{
if (t[x2][y2]==t[x2+1][y2])Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}

for (x2=0; x2<X; x2++)
{
Ocenka=1;
for (y2=0; y2<Y-1; y2++)
{
if (t[x2][y2]==t[x2][y2+1])Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}
return tOcenka;
}

(Добавление)
Подредактировал perebor. Чуть оптимизировал

CODE:
function perebor()//Перебирает все возможные комбинации меняя соседнте фишки
{
int tp;
int Max=-1;
int tMax=-1;

for (y=1; y<Y-1; y++)
{
for (x=1; x<X-1; x++)
{
//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}//Возвращаем массив t в исходную позицию фишек
//Делаем ход меняя x на x-1
tp=t[x][y];
t[x][y]=t[x-1][y];
t[x-1][y]=tp;
Max=proverka();//Оцениваем полученную ситуацию
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x-1; ky2=y;}//Если оценка больше предыдущей, записываем координаты и оценку сохраняем.
//Меняем назад на исходную.
tp=t[x][y];
t[x][y]=t[x-1][y];
t[x-1][y]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x+1][y];
t[x+1][y]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x+1; ky2=y;}
tp=t[x][y];
t[x][y]=t[x+1][y];
t[x+1][y]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x][y-1];
t[x][y-1]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y-1;}
tp=t[x][y];
t[x][y]=t[x][y-1];
t[x][y-1]=tp;

//for (y1=0; y1<Y; y1++){for (x1=0; x1<X; x1++){t[x1][y1]=m[x1][y1];}}
tp=t[x][y];
t[x][y]=t[x][y+1];
t[x][y+1]=tp;
Max=proverka();
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y+1;}
tp=t[x][y];
t[x][y]=t[x][y+1];
t[x][y+1]=tp;
}
}
textout(0, 100, 50, format(tMax), 0);
return tMax;
}
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 16:56:00
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Я уже говорил, что кибор The Best ? )) Только у меня, наверное, карма испорчена.. Опять ошибается.. Тест распознавания 100%. Вручную ходил- скрин экрана- тест распознавания- всё сходится... А в файл уже неправильно записывает... Изменил только начало кода

pause(1000);

int X=8;
int Y=8;
int SX=173, SY=325, FX=639, FY=791;


new int m[X][Y];
new int Xm[X][Y];
new int Ym[X][Y];
new string T[Y];
int kx1, ky1, kx2, ky2;
int x, y;
int x1, y1;
int x2, y2;

new int t[X][Y];
//
enablerealmouse(10, 0, 0, 0);
string Text;
loadsymbolbase ("C:\3_v_ryad\1.sib"Подмигивание;
int Color_Text[17];
Color_Text[0]=3757551; Color_Text[1]=2891195; Color_Text[2]=3289550; Color_Text[3]=1643670; Color_Text[4]=6778768; Color_Text[5]=8688568; Color_Text[6]=10618712; Color_Text[7]=14072866; Color_Text[8]=13336625; Color_Text[9]=12984410; Color_Text[10]=4726964; Color_Text[11]=1481543; Color_Text[12]=1081383; Color_Text[13]=3062241; Color_Text[14]=12392841; Color_Text[15]=5058532; Color_Text[16]=460974;
int Color_Fon[4];
Color_Fon[0]=7367537; Color_Fon[1]=5525842; Color_Fon[2]=13547140; Color_Fon[3]=12695965;

loop()
{
readtext (NUM, #T[0], 2, -1, -1, -1, -1, #Color_Text[0], #Color_Fon[0], 14, -1, 173, 325, 639, 791, -1);

raschet();
perebor();
//messagebox (perebor());
/////
mousedown(LEFT, Xm[kx1][ky1], Ym[kx1][ky1]);
pause(1000);
mouseup(LEFT, Xm[kx2][ky2], Ym[kx2][ky2]);
sleep(200);
mousemove(10, 10);
/////
(Добавление)

(Добавление)
https://yadi.sk/i/5S_uc_oQk9GU1Q

(Отредактировано автором: 27 Сентября, 2018 - 17:07:38)

 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 17:55:03
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Зона правильная?
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 17:59:38
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Из распознавания текста брал. Потом ещё шпионом проверил
(Добавление)
readtext (NUM, #T[0], 2, -1, -1, -1, -1, #Color_Text[0], #Color_Fon[0], 14, -1, 173, 325, 639, 791, -1);

Отсюда брал координаты. Галочка стояла "экран"

(Отредактировано автором: 27 Сентября, 2018 - 17:59:53)

 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 18:07:46
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




int X=8;
int Y=8;
там вообще то 7.
(Добавление)
Просто скопируйте код и измените зону.
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 18:12:57
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017  
Откуда: Архангельск
Репутация: 6




Уже. Как не заработало,- сменил на 7 и зону сделал 7 на 7 клеток.
 
 Top
Страниц (10): « 1 2 3 4 [5] 6 7 8 9 » В конец
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by