Кибор » Кибор - Интегрированная среда разработки ботов » Готовые скрипты » Реализация бота игры Три В Ряд

Страниц (4): « 1 [2] 3 4 »
 

11. konctantin777 - 08 Сентября, 2018 - 12:49:08 - перейти к сообщению
Про такие массивы на форуме видел- почитаю- спасибо за подсказку. Просто непонятно пока как искать если в разных рядах... Пока не соображу как искать если и в разных рядах "0" (
12. konctantin777 - 09 Сентября, 2018 - 12:27:39 - перейти к сообщению
(( Подскажите ссылку где "объясняются" массивы, чтобы можно было разобраться ?
13. Zireael - 09 Сентября, 2018 - 12:55:40 - перейти к сообщению
 Цитата:
Подскажите ссылку где "объясняются" массивы, чтобы можно было разобраться ?

Лучше отдельную тему создайте с вопросами.
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]); // сообщение
}
}
14. konctantin777 - 14 Сентября, 2018 - 09:48:01 - перейти к сообщению
Ок.
15. Kibor - 17 Сентября, 2018 - 17:13:40 - перейти к сообщению
Набросал скрипт который легко настроить на другую игру.
Работает по принципу распознавания текста.
Надо создать и обучить свою базу для распознавания текста.
Подробнее на видео.


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;



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();

/////
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()
{
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;}
}
}
///////
}
16. konctantin777 - 21 Сентября, 2018 - 14:03:48 - перейти к сообщению
У меня почему то в левый верхний угол уходит...

код (Отобразить)
17. Kibor - 21 Сентября, 2018 - 14:08:13 - перейти к сообщению
А в фале правильно определяет?
5.txt
18. konctantin777 - 21 Сентября, 2018 - 14:59:03 - перейти к сообщению
Нет. Везде -842150451 . А при тесте распознавания вообще без ошибок было. Координаты проверил, что экранные...
19. Kibor - 21 Сентября, 2018 - 15:03:09 - перейти к сообщению
координаты экранные?
20. konctantin777 - 21 Сентября, 2018 - 15:04:22 - перейти к сообщению
Несколько раз проверил. Да.

Powered by ExBB FM 1.0 Final