Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Попробую с 0 написать необычного робота

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

51. Kibor - 12 Января, 2014 - 04:30:39 - перейти к сообщению
А еще лучше так
Тут все уже понятно должно быть.
 Цитата:
int color, xe, ye;//разрешение экрана
getdisplay(color, xe, ye);//Узнать разрешение экрана

int stvol_X, stvol_Y;// координаты стартовой точки в волейболе
int k1_X[2], k1_Y[2];//координаты начала и конца рамки где искать 1коэф
int Ck1_x, Ck1_y;//координаты найденых цифр 1коэф 3шт
int fl1[10];// флаг, 1 если найдена цифра 1коэф
int rast_k1_x;//растояние от цифры до начала рамки поиска 1коэф

int n;
int CIF;
int X[2], Y[2];
string kf1="";// 1коэф
int z=10;
int razmerX[11];//тут размеры рисунков цифр

int x1=15;
int y1=1;

//Загрузка рисунков
int im_stvol[121][11];
loadimage (#im_stvol[0][0], "C:\citi\Image_ishody po partiyam.bmp");//рис стартовой точки в волейболе

//рис цифр

int ttt[20][20];loadimage (#ttt[0][0], "C:\citi\t.bmp");
int C_0[20][20];loadimage (#C_0[0][0], "C:\citi\0_citi.bmp");
int C_1[20][20];loadimage (#C_1[0][0], "C:\citi\1_citi.bmp");
int C_2[20][20];loadimage (#C_2[0][0], "C:\citi\2_citi.bmp");
int C_3[20][20];loadimage (#C_3[0][0], "C:\citi\3_citi.bmp");
int C_4[20][20];loadimage (#C_4[0][0], "C:\citi\4_citi.bmp");
int C_5[20][20];loadimage (#C_5[0][0], "C:\citi\5_citi.bmp");
int C_6[20][20];loadimage (#C_6[0][0], "C:\citi\6_citi.bmp");
int C_7[20][20];loadimage (#C_7[0][0], "C:\citi\7_citi.bmp");
int C_8[20][20];loadimage (#C_8[0][0], "C:\citi\8_citi.bmp");
int C_9[20][20];loadimage (#C_9[0][0], "C:\citi\9_citi.bmp");

razmerX[0]=imagewidth(#C_0[0][0]);
razmerX[1]=imagewidth(#C_1[0][0]);
razmerX[2]=imagewidth(#C_2[0][0]);
razmerX[3]=imagewidth(#C_3[0][0]);
razmerX[4]=imagewidth(#C_4[0][0]);
razmerX[5]=imagewidth(#C_5[0][0]);
razmerX[6]=imagewidth(#C_6[0][0]);
razmerX[7]=imagewidth(#C_7[0][0]);
razmerX[8]=imagewidth(#C_8[0][0]);
razmerX[9]=imagewidth(#C_9[0][0]);
razmerX[10]=imagewidth(#ttt[0][0]);

a: if (findimage(1, #im_stvol[0][0], 0, #stvol_X, #stvol_Y, 0, 0, xe, ye, z, z, z, z, z, z, 100, 1, -1)==1)//находим стартовую точку
{

//Ищет левый не белый пиксель в рамке на рисунке
int xn=stvol_X+70, yn=stvol_Y+38;
int xn1=xn+x1, yn1=yn+y1;
int min=999999;
s: if (xn<xn1)
{
yn=stvol_Y+38;
s1: if (yn<yn1)
{
if (getcolor(xn, yn)!=16777215)
{
if (xn<min){min=xn; stvol_X=xn-2;}
}
yn++;
goto s1;
}
xn++;
goto s;
}
X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;

int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (findimage(1, #C_0[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"0"; g=0;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_1[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"1"; g=1;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_2[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"2"; g=2;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_3[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"3"; g=3;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_4[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"4"; g=4;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_5[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"5"; g=5;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto ww;
}
if (findimage(1, #C_6[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"6"; g=6;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_7[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"7"; g=7;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_8[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"8"; g=8;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #C_9[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"9"; g=9;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}
if (findimage(1, #ttt[0][0], -1, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z , 100, 1, -1)==1)
{
kf1=kf1+"."; g=10;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
goto lop;
}



if (kf1!="")//Число есть
{
if (formatsn(kf1)<=5)
{
beep (1000, 500)
}
}


}
sleep(50);
goto a;


52. darow - 12 Января, 2014 - 06:17:44 - перейти к сообщению
да работает нормально... теперь этап следующий, сканируем и вторую справа цифру.
Значит задача сводится к тому, что мы имеем сканер цифр, теперь ему надо указать сканировать первые цифры а потом вторые и сравнивать... при положительном сравнении выдавать сигнал...
(Добавление)
все тоже самое делается, только для вторых цифр смещаемся по Х на 40 пикселей
(Добавление)
добавил к последнему скрипту его же половину но с такими изменениями сдвинул на 40 поиск пикселя, остальное все оставил так же:
CODE:
//Ищет левый не белый пиксель в рамке на рисунке в кэфе2
int xn=stvol_X+110, yn=stvol_Y+38;
int xn1=xn+x1, yn1=yn+y1;
int min=999999;
s: if (xn<xn1)
{
yn=stvol_Y+38;
s1: if (yn<yn1)
{
if (getcolor(xn, yn)!=16777215)
{
if (xn<min){min=xn; stvol_X=xn-2;}
}
yn++;
goto s1;
}
xn++;
goto s;
}
X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;

int g=0;
kf1="";

lop:

(Добавление)
и цикл поставил теперь в конце:
CODE:
goto lop;
}
if (kf1!="")//×èñëî åñòü
{
if (formatsn(kf1)>=5)
{
beep (1000, 500)
}
}

}
sleep(50);
goto a;


вообщем смысл работы кибора:
1) находит точку сканирования К1
2) сканирует К1
3)сравнивает с числом если верно то выдает сигнал и переходит к сканированию К2, если неверно то просто переходит к сканированию К2
4) сканирует К2
5) сравнивает с числом если верно выдает сигнал и идет на цикл, если неверно-просто идет на цикл...
(Добавление)
в итоге что-то очень долго думал и выдал:(для просмотра ссылки Вам необходимо авторизоваться) (Добавление)
ищу ошибку, но скорее всего, надо полностью поменять подход к этому решению...
Алгоритм должен выглядеть так:
1) сканирует К1
2) К1 сравнивает с числом:
-если верно, то выдавать звук, пропускать сканирование К2(в сканировании нет смысла), переходит вновь на цикл
- если неверно, то переходить к сканированию К2
3) сканирует К2
4) К2 сравнивает с числом:
- если верно, то выдает звук, переходит вновь на цикл
- если неверно, переходит вновь на цикл.
(Добавление)
короче задача сводится к элементарной логике:
CODE:
a: if (4>=5)
{
beep (500, 500)
}
else
{
if (3>=5)
{
beep (500, 1000)
}
else
{
beep (1000, 1000)
}
}

sleep(1000);
goto a;

(Добавление)
сделал аналогично верхнему скрипту лихо затормозил комп и вот че выкинуло:(для просмотра ссылки Вам необходимо авторизоваться)
53. darow - 12 Января, 2014 - 08:39:32 - перейти к сообщению
попробую применить функцию, чтобы слишком не разростался код
54. darow - 12 Января, 2014 - 11:28:08 - перейти к сообщению
и функцию не выходит применить... хелп ми! че ж делать? кто что посоветует?
55. Kibor - 13 Января, 2014 - 04:25:19 - перейти к сообщению
 darow пишет:
и функцию не выходит применить... хелп ми! че ж делать? кто что посоветует?


CODE:
int color, xe, ye;//разрешение экрана
getdisplay(color, xe, ye);//Узнать разрешение экрана

int stvol_X, stvol_Y;// координаты стартовой точки в волейболе
int k1_X[2], k1_Y[2];//координаты начала и конца рамки где искать 1коэф
int Ck1_x, Ck1_y;//координаты найденых цифр 1коэф 3шт
int fl1[10];// флаг, 1 если найдена цифра 1коэф
int rast_k1_x;//растояние от цифры до начала рамки поиска 1коэф

int n;
int CIF;
int X[2], Y[2];
string kf1="";// 1коэф
int z=10;
int razmerX[11];//тут размеры рисунков цифр

int x1=15;
int y1=1;

//Загрузка рисунков
int im_stvol[121][11];
loadimage (#im_stvol[0][0], "C:\citi\Image_ishody po partiyam.bmp");//рис стартовой точки в волейболе

//рис цифр

int ttt[20][20];loadimage (#ttt[0][0], "C:\citi\t.bmp");
int C_0[20][20];loadimage (#C_0[0][0], "C:\citi\0_citi.bmp");
int C_1[20][20];loadimage (#C_1[0][0], "C:\citi\1_citi.bmp");
int C_2[20][20];loadimage (#C_2[0][0], "C:\citi\2_citi.bmp");
int C_3[20][20];loadimage (#C_3[0][0], "C:\citi\3_citi.bmp");
int C_4[20][20];loadimage (#C_4[0][0], "C:\citi\4_citi.bmp");
int C_5[20][20];loadimage (#C_5[0][0], "C:\citi\5_citi.bmp");
int C_6[20][20];loadimage (#C_6[0][0], "C:\citi\6_citi.bmp");
int C_7[20][20];loadimage (#C_7[0][0], "C:\citi\7_citi.bmp");
int C_8[20][20];loadimage (#C_8[0][0], "C:\citi\8_citi.bmp");
int C_9[20][20];loadimage (#C_9[0][0], "C:\citi\9_citi.bmp");

razmerX[0]=imagewidth(#C_0[0][0]);
razmerX[1]=imagewidth(#C_1[0][0]);
razmerX[2]=imagewidth(#C_2[0][0]);
razmerX[3]=imagewidth(#C_3[0][0]);
razmerX[4]=imagewidth(#C_4[0][0]);
razmerX[5]=imagewidth(#C_5[0][0]);
razmerX[6]=imagewidth(#C_6[0][0]);
razmerX[7]=imagewidth(#C_7[0][0]);
razmerX[8]=imagewidth(#C_8[0][0]);
razmerX[9]=imagewidth(#C_9[0][0]);
razmerX[10]=imagewidth(#ttt[0][0]);

a: if (findimage(1, #im_stvol[0][0], 0, #stvol_X, #stvol_Y, 0, 0, xe, ye, z, z, z, z, z, z, 100, 1, -1)==1)//находим стартовую точку
{

//Ищет левый не белый пиксель в рамке на рисунке
poisk_pix();

X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;
int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (skan()==1)goto lop;


if (kf1!="")//Число есть
{
if (formatsn(kf1)<=5)
{
beep (1000, 500)
}
}


}
sleep(50);
goto a;


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


function skan()
{
if (findimage(1, #C_0[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"0"; g=0;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_1[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"1"; g=1;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_2[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"2"; g=2;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_3[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"3"; g=3;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_4[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"4"; g=4;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_5[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"5"; g=5;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_6[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"6"; g=6;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_7[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"7"; g=7;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_8[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"8"; g=8;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #C_9[0][0], 16777215, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z, 100, 1, -1)==1)
{
kf1=kf1+"9"; g=9;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
if (findimage(1, #ttt[0][0], -1, #Ck1_x, #Ck1_y, X[0], Y[0], X[1], Y[1], z, z, z, z, z, z , 100, 1, -1)==1)
{
kf1=kf1+"."; g=10;
X[0]=X[0]+Ck1_x+razmerX[g];
X[1]=X[0]+7;
return 1;
}
return 0;
}



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



function poisk_pix()
{
int xn=stvol_X+70, yn=stvol_Y+38;
int xn1=xn+x1, yn1=yn+y1;
int min=999999;
s: if (xn<xn1)
{
yn=stvol_Y+38;
s1: if (yn<yn1)
{
if (getcolor(xn, yn)!=16777215)
{
if (xn<min){min=xn; stvol_X=xn-2;}
}
yn++;
goto s1;
}
xn++;
goto s;
}

}
56. darow - 13 Января, 2014 - 10:06:44 - перейти к сообщению
отлично, хорошо получилось ввести 2 функции... но для того что бы кибор переходил сканить К2 я введу еще одну фукцию поиска пикселя со сдвигом на 40 пикселей:
CODE:
/////////////

function poisk_pix2()
{
int xn=stvol_X+110, yn=stvol_Y+38;
int xn1=xn+x1, yn1=yn+y1;
int min=999999;
s: if (xn<xn1)
{
yn=stvol_Y+38;
s1: if (yn<yn1)
{
if (getcolor(xn, yn)!=16777215)
{
if (xn<min){min=xn; stvol_X=xn-2;}
}
yn++;
goto s1;
}
xn++;
goto s;
}
57. Kibor - 13 Января, 2014 - 10:19:06 - перейти к сообщению
 darow пишет:
отлично, хорошо получилось ввести 2 функции... но для того что бы кибор переходил сканить К2 я введу еще одну фукцию поиска пикселя со сдвигом на 40 пикселей:

Зачем?
Может так?

 Цитата:
function poisk_pix(int sm)
{
int xn=stvol_X+sm, yn=stvol_Y+38;
int xn1=xn+x1, yn1=yn+y1;
int min=999999;
s: if (xn<xn1)
{
yn=stvol_Y+38;
s1: if (yn<yn1)
{
if (getcolor(xn, yn)!=16777215)
{
if (xn<min){min=xn; stvol_X=xn-2;}
}
yn++;
goto s1;
}
xn++;
goto s;
}

}


Использовать:
poisk_pix(70);//Для первого

poisk_pix(110);//Для второго



http://filesd.net/kibor/functions.php
58. darow - 13 Января, 2014 - 10:23:25 - перейти к сообщению
Использовать:
poisk_pix(70);//Для первого

poisk_pix(110);//Для второго

тогда надо 2 переменные заводить для function poisk_pix(int sm):
int sm1

int sm2
59. Kibor - 13 Января, 2014 - 10:27:08 - перейти к сообщению
Ничего не надо. Эти переменные уже объявлены в коде (в принимаемых параметрах).
function poisk_pix(int sm):
Внимательно читайте ссылку что я дал.
60. darow - 13 Января, 2014 - 10:27:09 - перейти к сообщению
попробовал логически заклить:

CODE:
a: if (findimage(1, #im_stvol[0][0], 0, #stvol_X, #stvol_Y, 0, 0, xe, ye, z, z, z, z, z, z, 100, 1, -1)==1)//находим стартовую точку
{

//Ищет левый не белый пиксель в рамке на рисунке
poisk_pix1();

X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;
int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (skan()==1)goto lop;


if (kf1!="")//Число есть
{
if (formatsn(kf1)>=2)
{
beep (1000, 500)
}
}
else
{
sleep(50);
goto b;
}
}
sleep(50);
goto a;


b: if (findimage(1, #im_stvol[0][0], 0, #stvol_X, #stvol_Y, 0, 0, xe, ye, z, z, z, z, z, z, 100, 1, -1)==1)//находим стартовую точку
{

//Ищет левый не белый пиксель в рамке на рисунке
poisk_pix2();

X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;
int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (skan()==1)goto lop;


if (kf1!="")//Число есть
{
if (formatsn(kf1)>=2)
{
beep (1000, 500)
}
}
}
sleep(50);
goto a;

крутит ошибок не выдает но и К1 и К2 не находит
(Добавление)
Ничего не надо. Эти переменные уже объявлены в коде (в принимаемых параметрах).
function poisk_pix(int sm):
Внимательно читайте ссылку что я дал.

хорошо сейчас просмотрю и попробую...
(Добавление)
зациклил по последнему варианту:
CODE:
a: if (findimage(1, #im_stvol[0][0], 0, #stvol_X, #stvol_Y, 0, 0, xe, ye, z, z, z, z, z, z, 100, 1, -1)==1)//находим стартовую точку
{

//Ищет левый не белый пиксель в рамке на рисунке
poisk_pix(70);

X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;
int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (skan()==1)goto lop;


if (kf1!="")//Число есть
{
if (formatsn(kf1)>=2)
{
beep (1000, 500)
}
}
else
{
{

//Ищет левый не белый пиксель в рамке на рисунке
poisk_pix(70);

X[0]=stvol_X; Y[0]=stvol_Y+38;
X[1]=X[0]+7; Y[1]=Y[0]+13;
int g=0;
kf1="";

lop:

//ищем по 1 цифре в рамке поиска. записываем координаты
if (skan()==1)goto lop;


if (kf1!="")//Число есть
{
if (formatsn(kf1)>=2)
{
beep (1000, 500)
}
}
}
}
sleep(50);
goto a;


все так же ищет, ошибок не выдает но и К1 и К2 не находит... вы меня правильно поняли, может я не верно изъясняюсь, мне нужно не 2 поиска вести а поочереди, если в К1 не нашло перейти на К2 и тд...
(Добавление)
после else забыл поменять poisk_pix(70);
на poisk_pix(110);
(Добавление)
та же самая история не находит не тот ни этот кэф...
(Добавление)
и вовсе сам перестает циклить... но ошибок не выдает...

Powered by ExBB FM 1.0 Final