Laboratoire SUPINFO de recherche en robotique

Tuto Robocode – Part 2

PNG  IHDRA> pHYs+ IDATxieU97|/Ayd$ylc (LU_ W媀PAw;j]Dc.WC4՘Ʋ Ʋ$˲4ie0l0X/>`Q^֚Mr&Ap? zP\޽;^Kբ8h1I;H$K$ğ*$Af5xOf ziΞ=x;_1Nvrb%xшxUXk6c[(hjlDT$pVxJkK 4Ri\k,{j .qlU~[䄧v J@ BwDAM ^0P˒a3;Ɔ Ybnj4ӓ7i;Ux1BȀ9l K;njs>F{:0mq(Wz-D<ƴ$1Fec5ڈiM02> zvdWQ <5{=nƟ$,) qr=`quK%6LMQjT`N4@ui8I+1v}9 ;=>+K}luUT)ɢ&jgЦ\jVtȕkם{#m,#pQUg}c|5.KzQ+K wvzTm"Np`V9IuDQvю9B8a|iĤfuC^YF=Yft:_ +֩cd@ʀ,;k.*'Ԃm1QdzZ)Q'8v  u- v6E+@r@eDɸ4V"d}jVR]Ѧ x0 2/) kXS"xF"7Dvud@*`||)瘚`mm2Ay/MCg,3RgP(2B 4nF0@ F .CFقM MTRDaFQ+ E `@lr$B" ޘ&lqhCql0(QFd JPDz(W19x?wχhBnc7 )&SZ)jMA4QMVb^e߱>7rU=F2KXjCFr9ߑf2tJ a5m0{ F`#0H)5g"4ӔL"P;H1hPBОjD )MݎV)<(AAU:fRd!;O|#WdְۭCMa)i&,uÚT"L .Z$ lWB j1h'aI䣿䗤bll B^tuQ(LpCH윔l%m^N /4F2~/0kuI_ *:E6$QIɾ{ba6;X:Oi#ђ*Sv,M 5G%"ģj|QC9sqVtї$OᏈl~'_Ɉ:$! H֊QVVw~h֔Cs$Ib<'%Dw %y4iv0a!JQkd6qT@$Y5(La];rp36qYA!dHh4KX/d2=;V5J&$hPZ+A@P(tbF<ʆNoi23X NLc÷ۙO:-^駟fcc2NDS 6>T5CsKhLJ\58>(j/AkG-dh1YlllZ ؠ*+шNjkqv)D\`\_pAxAX^j%I` ɢ tT0Qf"4_/&M3$ӫc}M֚kKEA@J+{(ed0Gk5QxZIvoS,-/#Aޡ˜L IL7huS7Pф7 ~k*rru˫k{055[뮻Y]]3<_?Z={W*S"ʫjv{QEeY EBHHVx|pQBIe$}؜8}*i "Ix$8m!(X k=wzz6{4_x9B!!/kr >zYc1qF)M&&~?>ϟ8[3&''Yصsӓg[yo.\X_gN~g[n_}̿W䡇3ت7hVfUTJCSkynK/!]V(PꥐzhBeUO;{~yɧehh,QN+@L\itqevGb~@$7 F Ѭ V AؔF_F!x6skbjrWחwGYf++;v u??[^3|g.8;wdrbq47|ǖe9x xH$3Ѽ~fsq&{T:2 `Q!O&%#Ӫ vY$$dYк纀৞geLM`uԉ2;s]s4 ™5ɩu^=?:PUY1>>Wp/HSaK5*aP=CxycG?C_87qiLyߧNˤxrİ~Xh;dffNgMozl2ǫO&x'޵[ngr0Z+Ub͡phN1J5E04qD(FEUtDVJ4"E_BJ Z+ dxo8q0'x[owx='8z4 E] }:]L~R Ӥ*T qh;yBhKף@ Bkif{{>?OCM/߲g>^ul߾={og`2p4F:A$jfT:|J~lФUri Q&9M%)76;AGW_w/C9+<ӧN!"ݿ̿?ŝ~<}o~[曱~/%GJF%>rghD:Ǎf_bPCTM*({%J DdZ%=O6:>^J[~SbUW35=Dž (mlt@#DDd MKфW}UUZC&@|>IkI􍠄FWTH=޹g?Y/^5*VWW?CO4"~/N ebV"30CPf\HКHz#ihäW(ăM]V33-&gi͒;`4^,116K!C Z̹WImo!`~)NG 0G8Fꅾ22dY>e҆eٵk*'O-ėYY(uf3 $vђ!$\MED0 b >@G:gQ=;suA"/zotD5>ٿ'\sNv9|(2V𬬬G F,:d^cEkWRhVv*9Tꝓ :[gVVVu$lZ[FŰFC;Z582Rh] j}AFdY>_d'>2?mu~^rqy'/$,.tXYEPJ\*|MS nE XC 666X^Y:ޞRYRME|u4`{.Vtv!cJJt9*( IDAT*@H7/!&(M"`1ގY,X4G ǕJ–*"o(8=۸W̶9~ӧcrf['ٶ}ݻ&ٻg~5oayi;rg|UYe.꺢WO6 $Q4!NH$֘MmPF~ /}ǯ{|Z(D,"ZbwQ ctQVCbW*:8f-1Ám4LP rrQd9Mp?Jdibo kWei$$V* }X an7_X*Q1 Ծ(G!;R)4JYjOT!ˠ*&-s8ӧ8|K+ׄ,OF`q$,A}-s\}^n>8Ɂpo~#+̹s(>N4ZņJZiBXd^DwVZ逄O@\ 0 !U.IOWgێ ȳU b׋ kbġGYʲі}sV_%ux~0)@ƩK st33?MflW䆛w0=35\w:}4Ǟ?󬭯DӥZFJ,vM/ <7A:b>H=zs㸺&PPWج@C+k#Ntt ArԵyH1cLJ D) 9E{&ԕC[Ŏ]mv>ȅ'O.s\%Ԯ,y!>C0h(;Hj!Gk8Q\#%5\{4YA2T*+ bXXrlF35 /E")k؎5%{erԥK(!gn~ݧlqgv0uϭpvSϟgye/6a$ާ^5*1&'g)'Nbvf-sͱw>nv$/.kk:yvEMe%)x BWzk)E'y

s3gX=("!,W]Ŗ1 ^ymrlsg<1ήRmP31)y j"' >c㊝'wv유ȄHB/14vHjpTcϮq2nynu"}*%$vA%Qm͖mazzV"~'qq,K0Fd# 1a-Z\w;ZpiW0c"~YXpmve*^{D,]ΒAVΆǏp: (e>NVpe k|cͻhUh_YwFS:B, Lv8ס… <|djr7r}?skpI>xQ:@h K#LFHabz H}Bݥy`~8=u,!t "H栍S2Ɖkz4}2êI4y*ܗޓH1˛1#gMPL4>` XԦQrN[fۻY&dE/byZh1.MVxZy5ZHe djۇX&>9|K_J>#U[ooeјS*V"ʘ5-(K;č7m㆛/"ؔFg|&ސ%ec4W@g@+>8D*…ca߾7w>꧹}<|_dye;|ezḪݻٟ;rdB;/|O9\]sy=Z{}Ç8~$5/2=-_;fgڼپc8WM,4:Cg er:'ܗs~9ֶ4iA(I~.=. qU*TvA tnf] -c,-#6DEM&IgE \H*mjEcU$\q&#GQJ1=5]wM7Ė-\{ٳgX]]Jap2?+N~~8o %͛c^ׇsiT6]%6|bE4ݎUeUgS5'ˇX[ *ڪ IJ$QDE۟Ze$ך<1FdۛPM4("V4#11bmVȭnQ9A,GA#0MF`bhB cұ(rnf{ý?yCA_OiQm9vy=:xjO7} Ey<7\{ __S΂ +'cnQoΈo!*6Y[`~~yOW'8 M`8B &x0v,k`Q*8XΪj1S MQ5 Lj  3^FFpHuTR69ylXKlqҘ@`dxUT~٣_vAbU Ds^Gy>=G0m4qQ<:t?/| t{].7t3[fW%! G]UL0==8LLN[E됺(ҡm1&hKPIkXƘ8 :dIajT@nc$^ 3T>m>MZAH) Y!ӆe399A]WZӆK|\o`mu, G"~vխzu5FHBnerr_2|[nٙN8#=JmwACo}}zĉ|`a VXdΚg}fv]άULM2AxʘS^ 謪dRb]q1}PLMl1öLoi393>ъy_D⪚"1|DW;fca\eA'޲^R; 3ss<EUUt() &E=)iPlziƦH~Fs\"kӞ(@j&&ژ,56%(\"l޴PhgInm?̃wxW̰w$vj'SZǹ.lw^8O<~.Ǝ`]2'-BhkS¢TsAVuǶ" 60e_4-H)aQ"鬩2x )Wa39:,/ c&mq7cbH* |r4 xqx_S>Tk[\EgYh,#(gtEj%3w',>X 87:39t +Wg..h@19֭ڝ͵P^oL\{^.sx4ʣ`k3e eYsqivaee="ep.: o@sRR}kJ$ NI uu,TngIV..e-꾰pK=_`JB4{*ehxnww]y~ְn߾ݷn  `Tǎˡ) )'8Q JbU0eqdIHBjw:֐Z us{}9Cp+@S}$*#c%ɘKcquG\R EQrϛna{{Sh:ʱl{N˕Scۃڱ&JK\:|hA%Q!O`ZWR -˒^GiK2%SS}y #M2*V4&i+\h)kٸA%Jp(snk4`A}fƒdwš3U%]ŀ/_b{-HcV7h> qZW3P B_fӣQh9{nF<(sf$S+Oa-;;ym<^L{[Ϸ}}&yWtj`eRW-⢦1z~sg.C1Y@ok({sIFllyl8z5K,!ffAg68ZrN87E\{lĹSvKheW5ƎmL.o{( QD{]&gu]B#|ZL:hNbK LWX1i]VvU>~|n|]vw(U"PUYؑl^̙3dowB]״ʐC 05CǟfscL `L ؤ┅.yƔ׾,(2qݍ8{q={M~8 ȵ)QvH4 u ϩ D,P+|h"P6 e`G.N1uM]p'Ŋ|{cya۶|MkK گB(F1hǎ]&g=x2ǎbtIXYZ]67;"C *.:Lx$eYӧ.rwP&cЬ`eN[c- W9mpE:J IDATG'9GکRm;Ff"GeQ2b<m-0K-Zө=yEP(@bbC4M҅عh@oڈ7s+Ξ׏hkVhj8a"~`D[+aa5լęV/j@k?vš[54.rx}C"7:nfkp9K[k44r2DK񲼪'$y9{5d2XrMZjF=6y VEikshq%Y90-m^ueKҩ6$|ZO866XFH(c,kwM8|b6#[OB 8zl`M;%DǼEqI0*QGSQ!]`SWQAW =-%TtL„y%;-0Mm"6ulaXfs{XA"<zE&>klox>nboNӉhL;GVXeh4ᰤ?М8~#+e>up-ԕKLO/IX|3:W66&x(!8穪&Q Dr̽Yăr+|>V8ci̕vB^YYX1RL_཮f]f"yC]{z5X8xs-{;B8vHl:Wk5(l)J 7c꤃׶ I:-})Z3LSv Њk>5֣ :VfLScX-PpRMq-󪒦>߂CłŢ4U{pQ2%WV-T:}{lay O<ѭvⷵRkNR\n׊1PXYctloQ:VEE}i|$VjFC kĿɈn(D*$MVVqV&-3}"ǴzZ?(=G2I,UռŵTx}oGcK\+~ZZREG(dmw_?RwU GɟS>sk z ?ɭ{=ЇxgZ%j첺q4Yl'o* 7-#d* zV$ry9!XZD!}KȝԢK׺]ced@I\S{vjrD.>$SϼuniU舐uS)DYJEU4B;QJ1NGz5Ǐ?;0Νo6:&Ο;뮿_>и k[57 Ϝ9#_;|wGBHrɖ׈R d*9(iقG!a01({ie2Ax/u北л l> 78vԮiXX?hj!m;kkTt(U:.m3ǵFpWQؒP*2ѦɲD\(8'AnQz'Ni L+.W9[;L-k\{NQcs2Ї#soݿ؉l0a)DuP˅O]!:`t#\|͍p $"&zW "?1u(+Y(4M-e(-Ñe2H9h S->H j$9L\c =Dĥ%V3Œcu td{I)V)X%à_bb/~%F,쩓Im)O*_O{;?sf) Ξ?{xϞ9Os(w}l5lu5D]BnA׶ŀ+}!՘'rV.Z)7p DCSli(R_Rt57dX;otO/5gcQ:!B!"0o“ BY9r&/:(?S?M]W]I`gg',='N#ٌG̟_ڶJ~jF8v+VX?_Ưr%wv){=nFzR SN;󻜻pǰP-B%IBJ$gkk7m]ϽoUiašEpHњO5ql+ n"Nz$V F* 6ۻ[n7{G/娚p|DOH݅^Q[& (F2puG>r_\{E͍mp?s]q>|9{,O?}{/|O#`JZS[SԒHQhԻ/$O=9v(GQ /([IL"J*nRLO'4ƻsvv1PShCGq) 8PXְ? ĤWz#*$9/ sJkzE!̙3]e}?8|˔e6O?$ԧDm w}(xAҾյ(O l 7)z^)2R }BYxIJ$R9u?*lѡy҈kC{]is\p}>O{텋O>SO=M4aLz>Ƿ-LTDje^d/'^GFz 6ؿu'bM-}b-0i*5t eE0FdDˢޔ|<>X^iVNVc%n;MHOMۙ]G#ҎCӢGd:nI&eIQ(5ַv ٌ}#MP#[8Wȗ;Oq{yU4-RJVh)X 1e87{ |y>Goo(5+@ y2'mşH!Z1'"ϜHSDIw@lnEp~K+++~8:#Y#Htzzᐶ@QmCt-59).nF>.`DQkV M=oy <3|+'LZ̧Z"l4 PJ/}rXS!h-Yr QK v.1͢蝅dZc30F|G&i t#u+$ ~sK5뎳 `8S63ϙN'첻=+e9xg D ]*ocX"@ݴTբeFV}֕ѐ'-ം)YԒEJ&$eD!n_PJiywbOΐ/6"_j CB1NUcYUQע#r9w2m2h@Y B̫9ռ>ՎTUXm4}+Kj7dj8KlZv8r7IW%yQFʅSB!KB$*/Dmn@=i?ٚIw / HiT+[G , O/vA{\wl6O:sI{i% BLxo A.xv4d$If_  ߶$UJ3ԕ.ݎ1 ^>4SN,Ή;e=FC4Fb$dûR+<$DIF2aT8ueBZ]BDP#0b!&'LL9΋d\pνa{MK'(:[R?(){ɴ'Ho6%8dDoS=V셭U",7l^D )4 -(WU(SJ_xmre;h`8$V_ɾDL{Y ,QQ=&$ڸ46s v@TKP-FYZh]"4Es 5ޏW8vlncǮauuDJ6|LGsu'(Jal6'N&80Pڦ4Y1@2@CBlV(t Z3HvH,I&_+uLTn'mQh*t6'nj`*- %7r︕[o#GuLjӺ 0bec\ڂ !)Q,xݜ:u/ CI@PwUDl %JBA,d2􂘤bHV뎅|#T ',GyrN=!Eqt5Lc$P]dUZ_zr؞b-iX!31rqD!isnxB`Ȥԧ(!9.H*w[fcH8o,{5d]1LokAk^Kwb,00:s:x^H~uc "@ )TإH]7WMml)INQ)!?jв[آ띩ZD\ٿb,wΡHVuHR6#c.<yŅ_ZkI`'nb!Yռ(7ݽX)Kϑw(@T0Iˠ))㊋.ذuS-qKAt"wy+ Y1&q%D?վ·s肙תm2ηx(~k|+ZG Ay5Q*(R`-O D\`Pa]}!7t?0Gp7QRoSgRl4_a.P]N\1Mq1c~|=WtigJ6UMM"<|h(|!?XZ0mC5ݳ51Z.]no|ӝDZzdȈ=oQ-Eɑ4K{Mqھ|$HٺN$YkwR3.yō ΞevR%%Sߵo4b6;Nap.(TeT`R: f\'wI tEܶmqҿ"/-eH@Ēy^N1@od% w4mwrت +\£*LcߠW6'ͰN% )ԶHL**S)K q֕mm`x $CJyU(O&3逆p&I ϑ%* 10"{qX_Y_bbKKLa5o Sloc{gz2G5o>p~vH箚ͨM\t^+p8IDATF1@GHB!Ha9EnFzDmh:zxm Z)ʢO #~g9(, 6Z%1Aas%{ i2Ej[=7~dx+,Q;f0:" Nʼn60 )ҤP3O0eZZL5]#aFkMYZ  =5+f*BIЖkEqJ޷,9n\;N.#!I(՚:zf=f+U#]{vw.180[Ah0N0R!5i]J_[Î碢I^{5vxsu2z)8z1)d᥽Ug4FA-:Mgem\0T ETѨA/QVTӚGu[7SM d @( ȶ9>TyՙlYSK ) s4;sIMS@q']TJˢ*acΜdP*vE^PwU@0qhH CBt\|Ӡǔe`C49'5p|U<35+n̫g |2O/KO|}с-j56;c8sG)H4dT$V2(2E⟬BDŽ3 >eleVm(IcRE.7 yfV&U_9[҇BGr!F.]hE1WP:-_HQXci

30 avr, 2013

 

 

Dans cette partie 2, nous allons aborder plus en détails les différentes méthodes d’ événements disponibles, ainsi que la récupération de données.
Plus vous récupérez d’informations sur vous et vos ennemis, plus votre I.A sera performante.

Allons-y!

 

Le Champ de bataille:

Vous vous rappelez de ce schéma:

coordonées

Et bien les méthodes getX() et getY() vont nous permettre de récupérer les coordonnées de notre robot sur le champs de bataille.

C’est mieux si le robot sait où il se situe.

Ces méthodes retournent un double.

Exemple:
double x = getX();
double y = getY();
System.out.println(« Coordonées du robot:  » + x + » , « + y );

 

Le champ de bataille est de taille variable, un bon code doit pouvoir s’adapter à tout terrain.

getBattleFiledWidth() et getBattleFieldHeight() permettent de récupérer respectivement la largeur et la hauteur du champ de bataille.

Ces méthodes retournent un double.

Exemple:
double largeur = getBattleFiledWidth();
double hauteur = getBattleFiledHeight();
System.out.println(« Dimensions du terrain:  » + largeur + » , « + hauteur );

 

Combien d’adversaire doit-je affronter?

getOthers() renvoie un ‘int’ qui indique le nombre d’autre robot sur le champs de bataille.

Exemple:

System.out.println(« Il y a « +getOthers()+ » autre(s) robot(s) sur le terrain. »);

 

Les événements:

Nous avons déjà vu, en première partie :

onScannedRobot(ScannedRobotEvent event), onHitByBullet(HitByBulletEvent event) ,  et onHitWall(HitWallEvent event).

Nous allons rentrer dans les entrailles de ces méthodes et voir ce que nous pouvons en tirer… :)

 

public void onScannedRobot(ScannedRobotEvent event)
{

event.getDistance();      //Cela va nous permettre de récupérer la distance en pixel, entre notre robot et le robot scanné.

event.getEnergy();      //Nous renverras l’énergie du robot scanné.

event.getHeading();      //Renvoie l’orientation en degré, du robot ennemi par rapport à l’avant de notre robot.

event.getName();      //Le nom du robot scanné.

event.getVelocity();     //Et enfin, sa vitesse de déplacement.

}

Vous pouvez constater que les informations du  radar ne sont pas à prendre à la légère…

 

Pour mieux comprendre le fonctionnement du radar de votre robot, rendez-vous dans le menu ‘Options‘, puis ‘Preferences’, puis ‘ View Options

optionscan

 

Cocher la case ‘Visible Scan Arcs‘ dans la partie ‘Arena‘. Vous verrez alors apparaître lors des combats, le radar de chaque robot.

scanner

 

Continuons, 

public void onHitByBullet(HitByBulletEvent event)

{

event.getName(); //Retourne le nom du robot qui vous a touché.

event.getPower(); //Retourne la puissance du tir.

}

 

public void onHitWall(HitWallEvent event)

{

event.getBearing(); //Retourne en degré la partie de votre robot qui a heurté le mur.

Cette valeur est comprise entre 0 et 180 ou 0 et -180, comprenez la partie droite ou gauche de votre robot.

}

 

Pour des événements supplémentaires, je vous invite à consulter la documentation de la classe « Robot »cette page.. (On apprends mieux en cherchant soi-même ;) )

 

Mais sachez tout de même que vous pouvez:

– Savoir si vous avez touché quelqu’un avec la méthode onBulletHit(BulletHitEvent event).

– Savoir si vous avez raté votre cible avec la méthode onBulletMissed(BulletMissedEvent event).

– Savoir si un autre robot est mort avec la méthode onRobotDeath(RobotDeathEvent event).

 

 

D’autres méthodes bien utiles:

Scan() : Permet d’appeler la méthode onScannedRobot(). Utile si vous voulez gagnez du temps d’exécution, on boucler sur cette dernière méthode.

Stop() : Arrêteras tout exécution du programme en cours.

Resume() : Reprendra l’exécution du programme bloqué précédemment par la méthode Stop().

 

 

Voilà, je vous laisse assimiler tout ça, et je vous rappel, n’hésitez pas à commenter ce Tuto, et à poster vos questions ou remarques.

Bonne programmation!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>