Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
Про такие массивы на форуме видел- почитаю- спасибо за подсказку. Просто непонятно пока как искать если в разных рядах... Пока не соображу как искать если и в разных рядах "0" (
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
(( Подскажите ссылку где "объясняются" массивы, чтобы можно было разобраться ?
Zireael
Отправлено: 09 Сентября, 2018 - 20:55:40
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
Цитата:
Подскажите ссылку где "объясняются" массивы, чтобы можно было разобраться ?
Лучше отдельную тему создайте с вопросами.
CODE:
int a[3]; // одномерный массив на 3 элемента (можно сравнить со списком)
a[0] = 10; // присвоить значение первому элементу
a[1] = 25; // присвоить значение второму элементу
a[2] = 7; // присвоить значение третьему элементу
messagebox(a[0]);
messagebox(a[1]);
messagebox(a[2]);
messagebox("Тоже самое в цикле");
for(int i=0; i<sizearray(a); i++) // цикл для всех элементов массива
{
messagebox(a[i]); // сообщение, переменная i отвечает за индекс, т. е. к какому элементу идёт обращение
}
CODE:
int b[3][3]; // двухмерный массив 3*3 (можно сравнить с шахматной доской)
// у каждой клетки есть номер по горизонтали и вертикали
//b[0][0] - первый индекс это номер строки массива, второй индекс номер столбца
// т. е. b[1][2] это будет обращение к элементу во второй строке массива в третьем столбце
// нумерация начинается с 0, т. е. первая строка/столбец это не 1, а 0.
b[0][0]=1; b[0][1]=2; b[0][2]=3;
b[1][0]=4; b[1][1]=5; b[1][2]=6;
b[2][0]=7; b[2][1]=8; b[2][2]=9;
messagebox(b[1][2]); // выведет 6
for(int i=0; i<sizearray(b); i++) // цикл для всех строк массива
{
for(int j=0; j<sizearray(b[]); j++) // цикл для всех столбцов массива
{
messagebox(b[i][j]); // сообщение
}
}
konctantin777
Отправлено: 14 Сентября, 2018 - 17:48:01
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
Набросал скрипт который легко настроить на другую игру.
Работает по принципу распознавания текста.
Надо создать и обучить свою базу для распознавания текста.
Подробнее на видео.
CODE:
pause(1000);
int X=7;
int Y=7;
int SX=78, SY=126, FX=243, FY=291;
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 X=8; // размерность игрового поля (сколько клеток)
int Y=8; // размерность игрового поля (сколько клеток)
int SX=210, SY=418, FX=579, 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;
loop()
{
readtext (NUM, #Text, 2, 3, -1, -1, -1, #Color_Text[0], -1, 18, -1, SX, SY, FX, FY, -1); //Сканирует указанную область экрана, окна или файла изображения, чистит изображение от шума и распознает текст и записывает его в string или char
raschet();
perebor();
/////
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]); //Копирование string в массив char
siz=size(#C[0]); //Возвращает количество элементов массива char до первого нуля или длину строки string
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; //Возвращает позицию символа по X от начала зоны поиска. Левый угол
Ym[x1][y1]=SY+symbolypos(y, x)-symbolheight(y, x)/2;
x1++;
if (x1>X-1)
{
x1=0;
y1++;
}
}
}
}
}
function perebor()
{
for (y=0; y<Y; y++)
{
for (x=0; x<X-3; x++)
{
if (m[x][y]==m[x+1][y] && m[x][y]==m[x+3][y]){kx1=x+3; ky1=y; kx2=x+2; ky2=y; return;}
}
}
//////
for (y=0; y<Y; y++)
{
for (x=3; x<X; x++)
{
if (m[x][y]==m[x-1][y] && m[x][y]==m[x-3][y]){kx1=x-3; ky1=y; kx2=x-2; ky2=y; return;}
}
}
//////
for (x=0; x<X; x++)
{
for (y=0; y<Y-3; y++)
{
if (m[x][y]==m[x][y+1] && m[x][y]==m[x][y+3]){kx1=x; ky1=y+3; kx2=x; ky2=y+2; return;}
}
}
//////
for (x=0; x<X; x++)
{
for (y=3; y<Y; y++)
{
if (m[x][y]==m[x][y-1] && m[x][y]==m[x][y-3]){kx1=x; ky1=y-3; kx2=x; ky2=y-2; return;}
}
}
//////
for (y=0; y<Y-1; y++)
{
for (x=0; x<X-2; x++)
{
if (m[x][y]==m[x+1][y] && m[x][y]==m[x+2][y+1]){kx1=x+2; ky1=y+1; kx2=x+2; ky2=y; return;}
if (m[x][y]==m[x+2][y] && m[x][y]==m[x+1][y+1]){kx1=x+1; ky1=y+1; kx2=x+1; ky2=y; return;}
if (m[x+1][y]==m[x+2][y] && m[x+1][y]==m[x][y+1]){kx1=x; ky1=y+1; kx2=x; ky2=y; return;}
}
}
//////
for (y=1; y<Y; y++)
{
for (x=0; x<X-2; x++)
{
if (m[x][y]==m[x+1][y] && m[x][y]==m[x+2][y-1]){kx1=x+2; ky1=y-1; kx2=x+2; ky2=y; return;}
if (m[x][y]==m[x+2][y] && m[x][y]==m[x+1][y-1]){kx1=x+1; ky1=y-1; kx2=x+1; ky2=y; return;}
if (m[x+1][y]==m[x+2][y] && m[x+1][y]==m[x][y-1]){kx1=x; ky1=y-1; kx2=x; ky2=y; return;}
}
}
///////
for (x=0; x<X-1; x++)
{
for (y=0; y<Y-2; y++)
{
if (m[x][y]==m[x][y+1] && m[x][y]==m[x+1][y+2]){kx1=x+1; ky1=y+2; kx2=x; ky2=y+2; return;}
if (m[x][y]==m[x][y+2] && m[x][y]==m[x+1][y+1]){kx1=x+1; ky1=y+1; kx2=x; ky2=y+1; return;}
if (m[x][y+1]==m[x][y+2] && m[x][y+1]==m[x+1][y]){kx1=x+1; ky1=y; kx2=x; ky2=y; return;}
}
}
//////
for (x=1; x<X; x++)
{
for (y=0; y<Y-2; y++)
{
if (m[x][y]==m[x][y+1] && m[x][y]==m[x-1][y+2]){kx1=x-1; ky1=y+2; kx2=x; ky2=y+2; return;}
if (m[x][y]==m[x][y+2] && m[x][y]==m[x-1][y+1]){kx1=x-1; ky1=y+1; kx2=x; ky2=y+1; return;}
if (m[x][y+1]==m[x][y+2] && m[x][y+1]==m[x-1][y]){kx1=x-1; ky1=y; kx2=x; ky2=y; return;}
}
}
///////
}
Kibor
Отправлено: 21 Сентября, 2018 - 22:08:13
Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
А в фале правильно определяет?
5.txt
konctantin777
Отправлено: 21 Сентября, 2018 - 22:59:03
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
Нет. Везде -842150451 . А при тесте распознавания вообще без ошибок было. Координаты проверил, что экранные...
Kibor
Отправлено: 21 Сентября, 2018 - 23:03:09
Эксперт
Покинул форум
Сообщений всего: 8218
Дата рег-ции: Март 2013 Откуда: Одесса
Репутация: 357
координаты экранные?
konctantin777
Отправлено: 21 Сентября, 2018 - 23:04:22
Эксперт
Покинул форум
Сообщений всего: 1152
Дата рег-ции: Окт. 2017 Откуда: Архангельск
Репутация: 6
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.