2023年机器人足球实验报告.pdf
1.课程设计分析1.1 课题规定(1)了解5 V s 5机器人足球仿真比赛平台及其策略。(2)在C语言编程环境下,完毕策略的编写和调试。(3)运用所写的程序进行足球机器人比赛,并在比赛中完善所写的策略。1.2 编写目的通过对机器人足球仿真这一课程设计的了解,设计,编写和调试,实现足球策略在机器人上的优化应用,使己方机器人仿真足球队在比赛中获胜。最终达成能纯熟运用C语言程序设计知识解决实际问题,实现具体目的的目的,并初步掌握工程化项目化软件开发的方法及过程。1.3背景机器人足球如今已为越来越多的人所关注。其国际认可的比赛按机器人可分为三大类:大中型机器人足球实物组比赛,微型机器人足球实物组比赛,机器人足球仿真组比赛;按数量分可分为:3 v s 3,5 V s 5,l l v s l 1等。机器人足球仿真5 V s 5组比赛是在国际认可的同一平台T h e Robot S o c c e r S i m u 1 a t o r Di r e c to r 8.5上运营各队的策略,从而实现比赛的目的。而其策略是基于V i s u a l C+编写的,只要掌握了 C语言课程设计的知识就可以实现策略的编写。-STUTUGiESBIRBHMtSUSEH M TMfWGAMfTMf BillSCtRE Mww:RUF2.用户手册2.1 运营环境规定 Pentium II I 6 0 0 MHz 2 5 6 m e gabytes o f ram TN T2 3 d Graphi c s a c cel e rator w ith 3 2 mega b y te s o f ra m 24 x CD-ROM Scree n re s olu t ion of 800 x 600 16 b i t S o u nd c a rd M ic ro s o f t W in dows 9 8 D i r e ct X 8.0 10 me g abyt e s o f f r e e hard d r ive spa c e Dir e ctor 8.5 Visual C+6.02.2使用方法 将包含源代码的工程文献用V i sual C+5.0 以上版本打开,编 译(快捷键F7),链接生成动态链接库。把生成的动态链接库文献复制到C:S trateg eb lu e目录下。并更具需要更换文献名称。打开5Vs5平台程序,将文献名称输入到STRATEGIES目录下的Blue栏中,再用鼠标单击L i ngo把链接状态更改为C+,然后在点击Send选项。链接文献过程完毕。在右侧的工具栏中,点击STARE,开始比赛。如需进一步了解该软件的用法,单击右下角HELP选项。2.3注意事项 本文中所提供的策略程序,只能在蓝队(右队)中使用。3.系统设计3.1程序预期功能实现进攻防守两大功能的合理灵活的切换;通过实现快速反映,精拟定点定向移动,路线优化设计等方法实现高效进攻和防守。3.2功能模块的划分4.具体设计及算法4.1进攻的具体设计及算法(1)当球在对方半场时为进攻模式1主攻1:当球接近对方禁区时,在对方球门罚球区守侯,伺机射门;否则辅助助攻球员进攻。主攻2:当球接近对方禁区时,在对方球门大禁区一侧守侯,伺机射门;否则辅助助攻球员进攻,控球。助攻1:控球,将球带进对方禁区,辅助主攻机器人进攻。助攻2:在助攻1机器人后方适当位置定点,随时接应助攻1机器人。守门员:调整位置到初始位置(2)当球在我方半场且不由对方控球时为进攻模式2主攻1:控球,将球带进对方禁区,辅助主攻机器人进攻。主攻2:在助攻1机器人后方适当位置定点,随时接应助攻1机器人。助攻:准备进入对方半场并寻找有利袭击位置。防守:定位到球与我方球门之间的适当位置,随时准备截球。(3)此外一套进攻方案:每个机器人都作为一个独立的实体,分别进行判断:机 器 人1 :当球在对方半场大禁区线外时,追球;当球在对方半场大禁区线内上方时,留守下方,准备接反弹出来的球;当球在对方半场大禁区线内下方时,留守中间,伺机射门。机器人2:当球在对方半场大禁区上下方时,将球传向门前;当球在对方大禁区和中场线之间时,控球,将球带向球门。机器人3:。始终追球机器人4:当球在对方半场大禁区线外时,追球;当球在对方半场大禁区线内上方时,留守中间,伺机射门;当球在对方半场大禁区线内下方时,留守上方,准备接反弹出来的球。4.2防守的具体设计及算法当球在我方半场且对方控球时为防守模式主防:定位到球前方截球,使球向对方半场移动。助防:定位到球与球门之间的适当位置截球,协助主防和守门员。后卫1:定位到球门前适当位置做好截球接应准备。后 卫2 :定位到球门前适当位置做好截球接应准备。守门员:开始就自行运动到如图所示位置,这样可借助球门柱防止守门员因惯性偏离球门,可大大提高其运动速度,并可减少与其他队员的碰撞。局限性之处在于因碰撞而姿态变化后调整空间较小。球门范围外时,守门员保持在离球最近位置侯球。(2)当球在图中所示阴影内时,守门员进入积极防守状态。积极防守状态按球的方向和位置不同分四种状态:(1)球的运动方向指向球门,此时守门员应位于球的运动方向上,阻截球的运动。、(2)球的运动方向背离球门。此时守门员应位于球与两门柱连线夹角的角平分线方向上,为下一次截球作准备。持,球门内时运动。卤 二(4)当球在如图虚线内运动时,守门员与球相反运动,以把球撞出.4.3数据结构机器人球员的数据(V e c t o r 3 D p o s表达机器人的三维坐标;r o t a t i o n表达机器人的方向;v e l o c i t y L e f t表达机器人的左轮速度,v e l o c i t y R i g h t表达机器人的右轮速度;)t y p e d e f s t r u c t(V e c t o r 3 D p o s;d o u b l e r o t a t i o n ;d o u b 1 e v e 1 o c i t y L e f t,v e l o c i t y R i g h t;R o b o t;对 方 机 器 人(成员意义同上)t y p e d e f s t r u c tV e c t o r 3 D p o s;d o u b l e r o t a t i o n;O p p o n e n t R o b o t;总的环境参量结构(h o m e P L A YE R S,P E R _ S IDE表达我方几号机器人;o p p o n e n t P L A YE R S _ PE RS I D E 表达对方几号机器人;c u r r e n tB a 11表达当前球的位置,l a s tBa l l表达上个周期球的位置,p r e d i c t e d Ba l 1表达下个周期球的位置,用来预测球下个周期位置;f i e l d Bo u n d s表达场地边界坐标,g o a 1 Bo u n d s表达球门边线坐标;ga m eS ta t e表达比赛状态,w h o s Ba l 1表达球的掌控状态,*use r D a t a预留给用户的数据指针)ty p e d e f s t r u c tR o b o t h o m e P L A Y E R S _ P E R _ S I D E ;O p p o n e n t R o b o t o p p o n e n t P L A YE R S _ P E R _ S I D E ;B a l l c u r r e n t B all,las tBa 1 1,predict edB all;Bo u n d s f i e I d Bo u n d s,go a l Bo u n d s ;l o n g g a m e S t a te;1 o n g who s Ba 1 1 ;v o i d *u s e r D a ta;E n v i r o n m e n t;4.4程序流程4.5函数说明基本动作v o i d P r e d i c t B a 11(E n v i r o n m e n t*e n v );预测球的位置,单步预测,运用微量调节。入口参数:环境参量。v o i d V e l o c i ty (R o b o t*r o b o t,d o u b 1 e v 1,d o u b l e v r );将响应产生的机器人速度写入系统参量中,即引发机器人运动。入口参数:机器人指针,左轮速度,右轮速度。v o i d A n g l e 1(R o b o t*r o b o t,i n t d e s i r e d a n g 1 e);使机器人转到预定角度。入口参数:机器人指针,预定角度。v o i d A n g 1 e 0 f P o s i t i o n (R o b o t *r o b o t,d o u b l e x ,d o u b 1 e使机器人转某一角度,指向特定点。入口参数:机器人指针,特定点横坐标,特定点纵坐标。以下函数有方向性,基于以上的基本动作v o i d N o r m a l Ga m e _ R i gh t(E n v i r o n m e n t*e n v );右队总策略。入口参数:环境参量。v o i d D e f e n d e r _ R i ght(E n v i r o n m e n t*e n v);v o i d D e f e n d l _ R i g h t(E n v i r o n m e n t*e n v);v o i d D e f e n d 2_ R i gh t(E n v i r o n m e n t*e n v);v o i d D e f e n d _R i ght_p y (E n v i r o n m e n t*e n v);右队防守策略。入口参数:球员指针,环境参量。v o i d D e f e n c e I R i g h t(R o b o t*r o b o t,E n v i r o n m e n t*e n v);右队防守策略。入口参数:球员指针,环境参量。v o i d G o a l Ke e p e r _ I n _ R i ght(R o b o t*r o b o t,E n v i r o n m e n t*e n v);右队守门员策略。入口参数:球员指针,环境参量。新加入的策略v o i d K i c k (E n v i r o n m e n t*e n v,R o b o t D r o b o t,d o u b l e a im _ a n gl e );基本动作,绕到球后方,带球运动到对方球场。入口参数:环境参量,球员指针,目的角度。v o i d P o s i ti o n 1_c z (R o b o t*r o b o t,d o u b l e x ,d o u b l e y );移动到预定点,这是整个程序最重要的底层函数基础。入口参数:球员指针,预定点横坐标,预定点纵坐标。v o i d P o s i ti o n _ p y(R o b o t*r o b o t,d o u b 1 e x,d o u b l e y);移动到预定点,无速度衰减。入口参数:球员指针,预定点横坐标,预定点纵坐标。v o i d A tta c k _ c z l (R o b o t*r o b o t,E n v i r o n m e n t*e n v );v o i d A t t a c k _ h x(R o b o t*r o b o t,E n v i r o n m e n t *e n v );机器人袭击策略。入口参数:球员指针,环境参量。v o i d S h o o t_R i g ht_ c z (R o b o t*r o b o t,E n v i r o n m e n t*e n v ,d o ub1 e a i m x ,d o u b l e a i m y);射门函数,这是进攻中最重要的底层函数基础,引导机器人相指定点射门。入口参数:球员指针,环境参量,指定点横坐标,指定点纵坐标void Go a 1 k e e p e r _ r i gh t _hx (Robot *r o b o t,E n v i r o n m e n t*e n v )根据球的运动轨迹,预计球将到达球门的位置,移动到该点截球。入口参数:球员指针,环境参量。v o i d G o a l k e e p e r _ R i ght_ p y 2(R o b o t*r o b o t,E n v i r o n m e n t*e n v )快速反映,在球的运动方向上拦截。入口参数:球员指针,环境参量。5.总结5.1 存在的局限性(1)定 位 函 数 在 S h o o t 时,击球定位的过程中精度很低,有时会丢球。(2)精确到点的位置函数尚有待进一步改善,现阶段在实现时尚有一定的误差,有 一定的振荡现象。(3 )守门员角度校正函数尚有待改善,现阶段其实现角度校正时不分前后,导致守门员有时遭碰撞后复位前后相反,不能很好防守。5.2 我们的体会我们的程序,建立在稳定、快速的底层函数中,并且在强大有效的上层策略分配下,结合动态分派角色技术,组织成为一支能与正式比赛队相抗衡的仿真机器人足球队。此外,改善了现有的定位运动函数,使我方进攻、防守的整体性能大幅提高;自行编写射门函数,使机器人具有智能射门袭击能力;采用了动态分派技术,对高效进攻进行了有益的尝试;新增了机器人“独立思考-综合攻防”的新思绪,为此后高级智能化足球机器人进行了一次超前并且大胆的尝试。同时,我们也有一些策略与功能未能付诸实现,如运用一阶微分量来精确控制下车的运动没有实现;在动态分派角色时,还只是逐次刷新分派,没有保证角色连 续性的算法;守门员程序还没有做好精确有效的纵向运动的专用底层程序。小组在熟悉C+界面、学习现有代码、尝试编写、正式编写、组合调试的各个过程中,互相交流、帮助,各自充足发挥自己的长处,最后让我们小组在并不很长的时间内很好的完毕了课题任务。我们最大的收获还在于,在实际编写中领悟模块化思想,在实际的合作中体会编程规范性的重要性,由此建立起的工程学意识将使我们受益终生。大家在一起的这段时间中,团队的有机合作让我们在看似繁琐、枯燥的过程中不仅收获了知识,更收获了快乐。我相信这次的课程设计的完毕并不是终点,而是一个新的起点,在这个起点上,我们会更加努力的学习与实践,让自己更加优秀。6.程序代码(只给出部分)/S t r a t e g y.c p p:Defi n es t he e n t r y point for t h e D L Lappl icat ion./#in c l u d es t d afx.h#incl u d eSt r at e g y .h H#i n cl u d e#inc l u d e#d e f i ne s q u a r e(a)(a)*(a)/求平方#d efine l eng(a,b,c,d )s q r t(s q u ar e(a)-(c)+s q u a r e(b)-(d)/自定义函数,求两点间距离BOOL APIENTRY DI 1 Ma i n(H ANDLE h Mod u l e,D WORD u 1 _r e as o n_ f o r _cal l,LPVO I D 1 pRe s er v edO 0)(s w i t c h(u l _r eas on_ f o r _cal l)ocas e DLL_PROCESS_ATTACH:c as e D L L _ T H R E A D_ATTACH:。cas e DL L_TH READDETACH:。c as e D L L _ P ROCESS_DETACH:o b r ea k;r e t u r n TRUE;cons t d o u bl e PI=3.1 4 1 59 2 3;char m y Mes s ag e 2 0 0 ;/v oid Pr e d i c t Ba 1 1 (E n v ir o n m e n t *env );v oid Goaliel(Robot*robot,E n v i r onment*e nv);void NearBoun d 2(Rob o t*robo t,dou b 1 e v 1,d ouble v r,En v ironment*e n v);void A ttack 2(R obot*ro b ot,E n v ironmen t*env);v o id D e fend(R o bo t*robot,E n vironm e n t *env,doubl elow,do u ble hig h);/by moo n a t 9/2/2023voi d MoonAttack(Robot*robot,E n viro n m e nt*env);/just f or test i n g t o ch e c k whe t her th e&e n v opponentwork s or notvoid M o o nFol 1 o wO p p one n t(Ro b ot*ro b ot,Opponen t R o b o t*o p ponent);v o id Veloc i ty(Ro b ot*r o bot,i nt vl,i n t vr);void Angle(Ro b ot D ro b o t,int de s i r ed_angle);v o i d P o sit i on(R o bot*r obot,double x,d o uble y);void Angl e 1 (Ro b ot*ro b ot,i nt desir e d _ ang 1 e);void An g leOfP o s i t ion(Robo t*robo t,double x,doub l e y);vo i d Pos i t i onl(Robot Drobot,dou b 1 e x,d o u b le y);b o o l Posit i on2(Robot*robot,dou b le x,do u ble y);bo o 1 GoaliePositi o n(Robot D ro b o t,d o uble x,do u bl e y);void Defe nee l_Rig h t(R ob o t*ro b o t,En v iro n m e nt*e nv)v oid D e f e nd er _ R i gh t (En v i r onm e n t *e n v);v oid Defen d 1 _R i ght (E n v ir onm ent *e n v );v oid Defen d 2 Right(E nv i r onm ent *env);v oi d De f end _Righ t _ p y (E nv i r onm e n t*env);vo i d Pos it ionl _ c z (Robot *r obot,d o u bl e x,d o u b l e y );v o i d D e fend (Robot Dr obot,Env i r onm ent *env,d ou bl e l ow,dou bl e h i g h );vo i d Defe n cel _Right (R o bot *r obot,Env i r o nm ent *e n v);v oid Po s it ionl _cz (Robot *r obot,d ou b 1 e x,d ou bl e y );v oid Po s i t i on 0 _c z (Robot D r o b o t,d o u bl e x,d ou b l e y);v oid G o a lKe e p e r _In_ R ight (Robot *r obot,E n v i r o nm en t*env);v oid K i ck(En v i r o n m e nt *en v ,Ro b ot o bot,d ou b l e a i ma n g 1 e);v o id A t t a c k_cz l (Rob o t *r o b o t ,E n v ir o nm ent *env ,d ou bl e x,d ou bl e y );v oid S h o ot _ R i g h t _ c z (Rob o t *r o bot,E nv i r o nm e n t*env );vo i dA tta c k l(Ro b ot *r obot ,Env i r onm ent *e n v);v oid At t a c k 3 (R o bot Dr obot ,En v ir onm ent *e n v);v oid At t a c k 4 (Robo t o b ot ,E n v ir o n m e n t *e n v);v oid s hoo t (Robot r o bot ,En v ir onm ent *env);v o i d pas s (R o bo t *r o b o t ,E n v ir onm ent *e n v );v oi d No r m al Gam e_Ri g ht _w l (Env i r onm ent *e n v);v oid Goal keepe r _ r ight _ h x (Rob o t *r o b ot,Env i r o n m ent *env);v oid Go a Ikeep e r _R i gh t _ p y 2 (Ro b o t *r obot,E n v i r onm e n t*e n v );v oid K ick(En v ir onm ent *env,Rob o t Dr obot,d o u bl e aim _a n g1 e);v oid Def end 1 _R i ght (Env i r o nm e n t *env);v oid s h o o t _ 1 (Robo t *r obot,Env i r o nm ent *env);v oid cl o s et o(Rob o t r ob o t,Env ir o nm e n t *env);v oid K i c k(En v ir o n m en t *e nv ,R o bot *r obot ,Vect or 3 D T oPos);v oid _c d eci od p r in t f(c o n s t ch a r *fo r m a t ,.);v oid Def e ncel _ Right l (R o b ot *r obot,En v ir o nm ent *env);ex t er n C S TRATEGY_ A P I v oid Cr e a t e(E n v i r o n m e n t *e nv )/al 1 ocat e u s er d at a and as s ign t o env-u s er Dat a/eg.e nv-u s e r Da t a=(v o i d*)new My V a r iab 1 e s0;e x t er n C ST R A T E G Y_AP I v o i d De s t r oy (E n v i r o nm ent *en v )(3 fr ee an y u s e r d at a cr e a t ed i n Cr eat e(Env i r o n m e n t *)/e g.if(e n v-use r Dat a!=N ULL)d el e t e(My V ar ia b l es *)env-u s er Dat a;)ex t er n C STRATEGY_ AP I vo i d S t r at egy (E n v ir o nm ent *env )(/t he bel ow cod e s ar e j u s t fo r d em ons t r at i o n pu r po s e.d on f t t a k e t h i s s er iou s l y pl eas e.int t e s t l n t =1 0 0;i nt k;s w it ch(en v g am e St at e)3 cas e 0:/d e fa u 1 to on F o 1 1 ow 0 pponen t (&e n v -h o m e 1,&env-o p po n ent);MoonFo 1 1 o w Oppone n t (&e n v -h om e 2,&env-oppo n e nt 3 );MoonFol l ow Op p o n en t (&env-h o m e 3 ,&env-oppone nt 4 );b o。P o s i t ion(&e n v -hom e 3 ,e n v-c u r r e n t Bal l.p os .x ,e n v c u r r e nt Ba 1 1 .pos.y );o onAt t a c k (&e nv-h om e 3,env );g N or m al Gam e_Right _ w l (env);3 if(env c u r r ent Ba 1 1.pos.x hom e 3 ,3 0);o if(en v c u r r ent Bal 1 .pos.x hom e 1,e n v);ooo3 3 P os it ion 2 (&e n v-hom e 2 ,e n v-c u r r ent B al l.pos.x,e n vcu r r ent Ba 1 1.p o s.y);oif(e n v-cu r r en t Bal l.pos.x 79)8(De f e n d l _Righ t (e n v);Goal K eeper _I n _ Right (&e n v-h o m e 2,e n v );O 3 3 if(env-cu r r ent B a 1 1 .p o s.x 78)。D e fe n d 2 _Right (env);3 G o a l keeper _ r igh t _h x (&env-hom e 3,e n v);0 3 oi f(env-hom el.pos.x e n v -cu r r en t Ba 1 1.p os.x)0 0 Pr ed ic t B a l l(e n v);0 P 0 s i t io n(&e n v-ho m el,env-p r ed ict ed B a1 1.pos.x,env-p r ed i c t e d Bal l.p o s.y);0 0g/*Shoot _ R ight _cz(&e nv-hom e3,en v);N o r m a 1 G a m e _Right _w 1 (e n v);g D e fenc e l _Rig h t (&env-hom e 3,env);D e fe n d e r _Righ t (env);b。S h oot _Rig h t _ c z (&e nv-h o m e ,e n v );3 A t t a c k 1 (&env -hom e 1 ,e n v);o At t acks(&en v -h o m e3 ,e n v);o At t a ck 4 (&env-h om e4,e nv);s h oo t (&e n v -h om e 2,e nv);pas s(&e n v-hom e 2,env);o At t a ck2 (&e nv-hom e 2,env);o Pos i t i o n 1 (&env-ho m e 1,&env-opponent 2 .p o s.x,&e nv-o p p on e nt 2.pos.y);8 G o al K e eper _ I n _Right (&env-h om el,e n v);g Sh o o t _Ri g h t _ c z (&e n v -hom e2 ,en v );K i c k(e nv,&env-hom e3,1 80);b D ef e n d 1 _Rig h t (Env i r o n m e n t *e n v);8Vo i d Defend 2 _Righ t (En v ir onm ent *e n v);g v oid De f e nd _Rig h t _ py (En v i r onm en t *e n v );P os it i on 1 _c z (&env-hom e 1 ,e nv-cu rr ent Bal l.po s .x,en v -cu r r e nt B al l.p os.y );if(&e n v -c u r r en t Bal l.pos.x 3 s hoot (&env-h o m e2,e n v);ooi f(&env-cu r r en t Ba 1 1.pos.x 78)Pos it ionl (&env-h o me L1 ,&e n v-cu r r ent Bal l.p o s.x,)8 G o a 1 iel (&e n v -hom e 0,env );g br e a k;*/cas e F R E E B A L L:g/F o 1 l ow opp o n e nt gu yo o n F ol 1 ow O p p o ne n t (&e n v-h o m e 1 ,&env-o p p on e n t 2 );MoonFol l o w O p p o n e n t (&env-hom e 2,&e nv-op p o nent 3 );oM o on F ol l ow Op p onent (&e n v-hom e 3 ,&e n v -o p po nent 4 );g/at t a c kM o onAt t ack(&en v -h o m e 3,env );g Goal k eep e rg Goal i e 1 (&en v-h om e 0,e nv );“/b y m oon at 2 4/0 3/2 0 2 3。/b e 1 o w cod e w il l n o t w or k.n ev er try.。伯 n v hom e0.po s .x =50;o /env-hom e 0.po s .y =0;8/env h om e0.r o t a t io n=2 0.0 ;bbr e a k;3 c a se P L A C E _ K I C K:oM o on At t a c k(&env-h o m e 2,e n v );ob r eak;归o cas e PENALTY_K ICK:s w it c h(env-w h o s B a 1 1 )O 0 ocas e ANYONES_BALL:。M o onAt t ack(&e n v-h o me 1 ,env );3 b r ea k;c a s e B L U E _ B A L L :ooMoo n A t t a ck(&env-h o m e 4,e n v);3 。br e a k;oocas e Y E L L O W BALL:g 朝 o onAt t a c k (&e n v-hom e 0 ,env );b br e ak;$b obr ea k;cas e FREE_K I CK:匕 F I L E *d e bu gf i 1 e;d ebu gf i 1 e=f o p en(d e b u g f il e.t x t,a);003 for (k=0 ;k f p r int f(d e b u gfil e,r obot:%d x:%f y:%f z:%fg k,e n v -opp o n e n t k.pos.x,env-opp o n e nt k.pos.y,3 3 en v op p o n e nt kJ.p os.z );3 ofcl o s e(d ebu gfil e);o M o on A t t a c k(&env hom e 0,e n v );o br eak;o c a s e G0 AL_K ICK:3 /oM o onA t t a ck(&e n v-h o m e 4,env );/P o s it ion(&env-hom e4,en v c u r r e nt Ba 1 1 .pos.x ,e nv-cu r r ent Bal l.pos.y);/As ho o t (&e nv -ho m e 3,env);g K i c k(env,&env hom e 3 ,1 8 0 );8b r eak;)v oid c l o se t o(Rob o t Dr obot,Env ir onm ent *e n v)vo i d a vo i d(Robo t *r o b ot,E n v i r o n m e n t *env)v oid MoonAt t ack(Ro b ot *r obot,E n v ir onm ent *e nv )bPr ed ic t B a 1 1 (e nv );3 Pos i t ion(r obot,env-p r ed i ct ed Bal l.p o s .x ,e n v -p r ed ict e d Bal l.pos.y);v oid Mo o nFo 1 1 o w O ppon e nt (R o b o t *r obo t ,0 pp o nent Robot*o p p on e nt )3 Pos i t ion(r obot,oppone n t pos.x ,o p p onent-p o s.y);)v oid Vel ocit y (Robot *r obo t ,int v 1,i nt v r )(r obot v e 1 oc i t y Le f t =v 1;r ob o t-v el ocit y R i ghtv r ;v oid Angl e(Robot *r obot,in t d es ir e d _ a ngl e)int t he t a _e,v 1,v r;t het a_ e=d es i r e d a n gl e (i nt)r obot -r ot at i o n;w hi 1 e(t he t a _ e 1 80)t he t a_ e-=3 60;w h i l e(t h et a_ e -1 8 0 )t he t a_ e+=3 60;if(t h e t a _e 90)t het a_e-=18 0;d i f(ab s (t het a_ e)5 0)o v l =(int)(9./90.0 *(d ou bl e)t het a _ e);v r =(int)(9./90.0 *(d ou bl e)t het a_e);el s e i