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

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

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

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



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


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




Но там в принципе главное это функции
perebor и proverka
массив в котором записано должен называться
new int t[X][Y];
а каким образом он заполнится не важно.
можно и по поиску изображений.
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 18:53:03
Post Id



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


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




Значит так и сделаю. Но почему тест распознавания одно показывает, а файл другое...
 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 19:15:46
Post Id



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


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




Не знаю. Настройки или зона не та. Или плохо обучена что другие фигуры не распознает.
 
 Top
konctantin777
Отправлено: 27 Сентября, 2018 - 20:06:26
Post Id



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


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




Вот как вы это понимаете ??? У меня уже мозг вспух пытаясь совместить )
(Добавление)
Подскажите, что то не получается заполнить массив... Ща взорвусь!
function coord(int aa, int ii, int #zz)
{
for(int j=0;j<aa;j++)
{
if(zz<size_field)
{
arr[zz][0]=posX[j]; // координата X
arr[zz][1]=posY[j]; // координата Y
arr[zz][2]=ii; // номер картинки
zz++;
t[posX[j]][posY[j]]=ii;
}
}
}
 
 Top
Kibor
Отправлено: 27 Сентября, 2018 - 22:29:29
Post Id



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


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




Короче вот готовая функция нахождения лучшего хода.
А как уже сканируют экран не важно.


Из за ограничений передачи указателей переданных с функции в функцию другую (а хотелось сделать без глобальных переменных ) пришлось прибегнуть к адресной арифметике, что несколько тормозит работу.

Это надо сохранить в файл и назвать как угодно. К примеру Лучший_ход.txt
CODE:
function perebor(int #t, int X, int Y, int #kx1, int #ky1, int #kx2, int #ky2)//Перебирает все возможные комбинации меняя соседнте фишки
{
int adr=address(#t[0][0]);
int tp;
int Max=-1;
int tMax=-1;
int x, y;
for (y=1; y<Y-1; y++)
{
for (x=1; x<X-1; x++)
{
//Делаем ход меняя x на x-1
tp=t[x][y];
t[x][y]=t[x-1][y];
t[x-1][y]=tp;
Max=proverka(X, Y, adr);//Оцениваем полученную ситуацию
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;

tp=t[x][y];
t[x][y]=t[x+1][y];
t[x+1][y]=tp;
Max=proverka(X, Y, adr);
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;

tp=t[x][y];
t[x][y]=t[x][y-1];
t[x][y-1]=tp;
Max=proverka(X, Y, adr);
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;

tp=t[x][y];
t[x][y]=t[x][y+1];
t[x][y+1]=tp;
Max=proverka(X, Y, adr);
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;
}
}
return tMax;
}


function proverka(int X, int Y, int mas)//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
{
int Ocenka;
int tOcenka=-1;
int x, y;
for (x=0; x<X; x++)
{
Ocenka=1;
for (y=0; y<Y-1; y++)
{
if (addressi(mas+(x*Y+y)*4)==addressi(mas+(x*Y+y+1)*4))Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}

for (y=0; y<Y; y++)
{
Ocenka=1;
for (x=0; x<X-1; x++)
{
if (addressi(mas+(x*Y+y)*4)==addressi(mas+((x+1)*Y+y)*4))Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}
return tOcenka;
}


Это его использование в своем скрипте
CODE:
#include "C:\Лучший_ход.txt"//В начале скрипта

int X=7, Y=8;//Размерность поля


/*
Массив с типами фигур. Заполнить любыми числами по типу и любым способом
Координаты фишек надо хранить так же в двухмерных массивах. Пример:
new int fX[X][Y];//Координаты X фишек
new int fY[X][Y];//Координаты Y фишек
*/
new int mas[X][Y];



/*
Индексы заменяемых массивов. kx1 ky1 меняется на kx2 ky2
то есть фишки с координатами fX[kx1][ky1] fY[kx1][ky1] и fX[kx2][ky2] fY[kx2][ky2] поменяются местами
*/
int kx1, ky1, kx2, ky2;


/*
//Использование
if (perebor(#mas[0][0], X, Y, #kx1, #ky1, #kx2, #ky2)>2)//Есть замена
{
//Тут поменять местами фишки.
messagebox ("Есть замена "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));
}
*/






//Тест с файла (убрать после весь ниже код)
if (fopen ("c:\Исходник.txt", "r")!=0)//В этом файле массив 7 на 8 заполнен цифрами которые соответствуют фишкам
{
for(int n1=0; n1<Y; n1++)
{
for(int n=0; n<X; n++)
{ fread(mas[n][n1]);
}
}
fclose();//закрываем файл
}

int L=perebor(#mas[0][0], X, Y, #kx1, #ky1, #kx2, #ky2);
//Покажет лучший результат замены
messagebox ("Лучший ход на "+format(L)+" Заменить "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));



Сам файл теста примерно такой
CODE:
0 1 2 3 4 5 2
2 3 1 1 2 5 3
1 5 1 7 5 9 2
5 5 2 1 5 5 2
4 3 2 5 2 0 5
0 6 1 4 5 6 1
5 5 5 2 5 5 5
0 5 4 5 5 1 5





////////////////////////////////////////////////////////////////////////////////////////////////////////////////






А это быстрее, но с глобальной одной переменной.
mas_pole. Такое имя должно быть массива в котором хранятся фишки.

Это надо сохранить в файл и назвать как угодно. К примеру Лучший_ход.txt
CODE:
function perebor(int X, int Y, int #kx1, int #ky1, int #kx2, int #ky2)//Перебирает все возможные комбинации меняя соседнте фишки
{
int tp;
int Max=-1;
int tMax=-1;
int x, y;
for (y=1; y<Y-1; y++)
{
for (x=1; x<X-1; x++)
{
//Делаем ход меняя x на x-1
tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x-1][y];
mas_pole[x-1][y]=tp;
Max=proverka(X, Y);//Оцениваем полученную ситуацию
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x-1; ky2=y;}//Если оценка больше предыдущей, записываем координаты и оценку сохраняем.
//Меняем назад на исходную.
tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x-1][y];
mas_pole[x-1][y]=tp;

tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x+1][y];
mas_pole[x+1][y]=tp;
Max=proverka(X, Y);
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x+1; ky2=y;}
tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x+1][y];
mas_pole[x+1][y]=tp;

tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x][y-1];
mas_pole[x][y-1]=tp;
Max=proverka(X, Y);
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y-1;}
tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x][y-1];
mas_pole[x][y-1]=tp;

tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x][y+1];
mas_pole[x][y+1]=tp;
Max=proverka(X, Y);
if (Max>=tMax){tMax=Max; kx1=x; ky1=y; kx2=x; ky2=y+1;}
tp=mas_pole[x][y];
mas_pole[x][y]=mas_pole[x][y+1];
mas_pole[x][y+1]=tp;
}
}
return tMax;
}


function proverka(int X, int Y)//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.
{
int Ocenka;
int tOcenka=-1;
int x, y;
for (y=0; y<Y; y++)
{
Ocenka=1;
for (x=0; x<X-1; x++)
{
if (mas_pole[x][y]==mas_pole[x+1][y])Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}

for (x=0; x<X; x++)
{
Ocenka=1;
for (y=0; y<Y-1; y++)
{
if (mas_pole[x][y]==mas_pole[x][y+1])Ocenka++;
else Ocenka=1;
if (Ocenka>tOcenka)tOcenka=Ocenka;
}
}
return tOcenka;
}







Это его использование в своем скрипте
CODE:
#include "C:\Лучший_ход.txt"//В начале скрипта

int X=7, Y=8;//Размерность поля


/*
Массив с типами фигур. Заполнить любыми числами по типу и любым способом
Координаты фишек надо хранить так же в двухмерных массивах. Пример:
new int fX[X][Y];//Координаты X фишек
new int fY[X][Y];//Координаты Y фишек
*/
new int mas_pole[X][Y];//ОБЯЗАТЕЛЬНО с ТАКИМ ИМЕНЕМ, так как тут она используется глобально в коде нахождения лучшего хода



/*
Индексы заменяемых массивов. kx1 ky1 меняется на kx2 ky2
то есть фишки с координатами fX[kx1][ky1] fY[kx1][ky1] и fX[kx2][ky2] fY[kx2][ky2] поменяются местами
*/
int kx1, ky1, kx2, ky2;






/*
//Использование
if (perebor(X, Y, #kx1, #ky1, #kx2, #ky2)>2)//Есть замена
{
//Тут поменять местами фишки.
messagebox ("Есть замена "+format(kx1)+" " +format(ky1)+" -" +format(mas[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas[kx2][ky2]));
}
*/






//Тест с файла (убрать после весь ниже код)
if (fopen ("c:\Исходник.txt", "r")!=0)//В этом файле массив 7 на 8 заполнен цифрами которые соответствуют фишкам
{
for(int n1=0; n1<Y; n1++)
{
for(int n=0; n<X; n++)
{
fread(mas_pole[n][n1]);
}
}
fclose();//закрываем файл
}

int L=perebor(X, Y, #kx1, #ky1, #kx2, #ky2);
//Покажет лучший результат замены
messagebox ("Лучший ход на "+format(L)+" Заменить "+format(kx1)+" " +format(ky1)+" -" +format(mas_pole[kx1][ky1])+" на "+format(kx2)+" " +format(ky2)+" -" +format(mas_pole[kx2][ky2]));
 
 Top
konctantin777
Отправлено: 28 Сентября, 2018 - 20:31:51
Post Id



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


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




Zireael , У меня только твой код (по скученности) всё находит и в файл ок записывает. Подскажи как заполнить int mas_pole[X][Y]; ? Почему то добавление mas_pole[posX[j]][posY[j]]==ii; не работает....



function coord(int aa, int ii, int #zz)
{
for(int j=0;j<aa;j++)
{
if(zz<size_field)
{
arr[zz][0]=posX[j]; // координата X
arr[zz][1]=posY[j]; // координата Y
arr[zz][2]=ii; // номер картинки
mas[posX[j]][posY[j]]==ii;
zz++;

}
}
}
 
 Top
Zireael
Отправлено: 28 Сентября, 2018 - 21:01:30
Post Id



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


Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
Почему то добавление mas_pole[posX[j]][posY[j]]==ii; не работает....

CODE:
new int field[row][col]; // поле

Во всем скрипте переименовать массив field в mas_pole.
 
 Top
Zireael
Отправлено: 29 Сентября, 2018 - 19:30:00
Post Id



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


Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
совместить Ваш код с кодом от Кибора

code (Отобразить)
 
 Top
konctantin777
Отправлено: 29 Сентября, 2018 - 19:43:28
Post Id



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


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




Спасибище !
 
 Top
Zireael
Отправлено: 30 Сентября, 2018 - 00:17:40
Post Id



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


Покинул форум
Сообщений всего: 4464
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
function proverka(int X, int Y, int mas)//Оценивает после замены ситуацию. Находит все совпавшие линии ровные присваивая им оценку равную кол фишек.

Тоже самое в 1.5 раза быстрее (Отобразить)
 
 Top
Страниц (10): В начало « 2 3 4 5 [6] 7 8 9 10 »
Сейчас эту тему просматривают: 19 (гостей: 19, зарегистрированных: 0)
« Вопросы и решение проблем »


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




Powered by