RobocodeJavier Villegas Gómez Contenido ● - Anatomía de un Robot - Mi primer Robot - Física del juego - Puntuaciones - n vistazo a la AP! - "jercicio # - "jercicio $ - Manejando "ventos - "jercicio % - "jercicio & - "jercicio ' . . .Anatomía de un Robot -(uerpo) Permite el movimiento del robot e incorpora el ca*ón + el radar.Radar) -etecta enemigos. a no ser /ue se le diga lo contrario sigue el movimiento del ca*ón.(a*on) Apuntar + disparar. ltimo guardar + compilar 8(ompiler0(ompile9 . Por . turnGunRight(3 0). bac!(100). pac3age man4 import robocode. " : : " public #oid on$cannedRobot($cannedRobot%#ent e) { &ire(1). turnGunRight(3 0).54 public class M+FirstRobot e6tends Robot 7 public void run89 7 while (true) { ahead(100).Mi primer robot Robot0"ditor0File01e2 Robot 1ombre + carpeta. -. / Anchura . / Altura *0irecci1n+ $e mide en grado( 023 0 grado( / 3orte 40 grado( / %(te 150 grado( / $ur 670 grado( / 8e(te .'í(ica del )uego *Coordenada(+ $i(tema Carte(iano (.) . . ?a velocidad mA6ima son B pi6eles0turno -istancia8d9) d > vt . un robot se puede mover incluso una @racción de pi6el. es decir.Movimiento del robot) Aceleración8a9) n robot acelera a # pi6el0turno + decelera a $ pi6eles0turno Velocidad8v9) v > at.'í(ica del )uego -<iempo + distancia) "l tiempo 8t9 se mide en =tic3s=. # tic3 > # turno ?a distancia se mide en pi6eles de precisión doble. -(olisiones) (on otro robot) (ada robot recibe C. Ee le a*ade a la rotación del ca*ón. Ee le a*ade a la rotación del robot.F de da*o (on un muro) velocidad 5 C.D'58velocidad99 grados0turno (uanto mAs rApido te muevas. ca*ón + radar) Rotación del robot) 8#C . Rotación del ca*ón) $C grados0turno.'í(ica del )uego . Rotación del radar) &' grados0turno.C.Rotación del robot.' -# 8nunca menor /ue C9 . mAs lento giras. ma6imo > %. "nergía restaurada por impacto) % 5 potencia . Eí potencia H #. !gual a C para disparar.'í(ica del )uego .%C5potencia Eobrecalentamiento) # I potencia 0 '. -a*o) & 5 potencia. -isparar consume la potencia del disparo de tu propia energía. se le suma $58potencia -#9 Velocidad) $C .Galas) Potencia del disparo) minimo > C. . .ltimo robot vivo.Ram -amage Gonus) (uando matas un enemigo por impacto.9untuacione( "sta es la tabla de puntuaciones al terminar el juego) . gana 'C puntos por cada robot /ue muere . .?ast Eurvival Gonus) "l .<otal Ecore) ?a suma de todas las puntuaciones . gana #C puntos por cada robot muerto antes /ue el.Ram -amage) $ puntos por cada punto de da*o realizado con impactos .Gullet -amage) # punto por cada punto de da*o realizado a los enemigos .Gullet -amage Gonus) (uando matas un enemigo ganas un $CJ de todo el da*o /ue le Ka KecKo. ganas un %CJ de todo el da*o /ue le Kas causado.Eurvival Ecore) (ada robot vivo. void turnGun?e@t8double grados9) gira el ca*ón a la iz/uierda . pero Kacia atrAs.void @ire 8double potencia9) -ispara con la potencia especi@icada. . .double getLeading89) devuelve la dirección a la /ue apunta el robot8en grados9 .void turnRadar?e@t8double grados9) gira el radar a la iz/uierda .void turnRadarRigKt8double grados9) lo gira a la derecKa [email protected] a la A9< Funciones de la clase Robot) Kttp)00robocode. .void turnRigKt8double grados9) gira a la derecKa .void aKead 8double distancia9) Mueve el robot Kacia adelante8a donde apunte9.void bac3 8double distancia9) ?o mismo.:n #i(ta.double getM890 double getN89) -evuelve la posición M 8ancKo9 o N8alto9 .void turn?e@t8double grados9) gira el robot a la iz/uierda .net0docs0robocode0 .void turnGunRigKt8double grados9) gira el ca*on a la derecKa . si el robot gira.void setAdjustGunForRobot<urn8boolean independiente9 . el ca*ón0radar no gira.void scan89) vuelve a comprobar si detecta un robot 8usada en la @unción onEcannedRobot Kace /ue esta comience a ejecutarse de nuevo9 .void setAdjustRadarForRobot<urn8boolean independiente9 "stas dos @unciones Kacen /ue el ca*ón o el radar se vuelvan independientes del movimiento del robot. es decir.o a la A9< Eeguimos con la clase Robot) . .:n #i(ta. .void setAdjustRadarForGun<urn8boolean !ndependiente9) Kace /ue el Radar sea independiente del ca*ón. .:n #i(ta. en el se ejecutan los movimientos bAsicos del robot -void onEcannedRobot8EcannedRobot"vent event9) se llama cuando el radar detecta a otro robot .void onLitG+Gullet8LitG+Gullet"vent event9) esta @unción se llama cuando el robot recibe un impacto de bala.void onLitPall8onLitPall"vent event9) se llama cuando el robot cKoca contra un muro .void onLitRobot8LitRobot"vent event9) esta se llama cuando cKocamos con un robot .void run89) "s el mOtodo principal.o a la A9< "ventos) . Robot 3ami3aze) Gira Kasta /ue detecta un enemigo + cuando lo Kace se lanza a por Ol. + cuando cKoca comienza a disparar con la mA6ima potencia.%=ercicio 1 . . el ca*ón apuntarA Kacia abajo. .Robot /ue avance Kasta el muro superior + una vez llegue se desplace a la derecKa Kasta /ue cKo/ue + se dO la vuelta. para /ue dispare siempre /ue detecte un enemigo.%=ercicio 6 . + así sucesivamente. podemos acceder a los elementos de dicKo evento para obtener in@ormación /ue nos pueda resultar relevante. con respecto a nosotros 8-#BC Q getGearing Q #BC9 -double get"nerg+89) -evuelve la energía del robot con el /ue cKocamos -boolean isM+Fault89) -evuelve verdadero si Kemos provocado el cKo/ue (lase LitG+Gullet"vent .double getPo2er89) -evuelve la potencia de la bala .double getGearing89 .double getVelocit+89) -evuelve la velocidad de la bala .Mane=ando e#ento( "n las @unciones /ue reciben un evento como parAmetro de entrada. por ejemplo) (lase LitRobot"vent .double getGearing89) -evuelve la orientación del robot con el /ue Kemos cKocado. double getLeading89) devuelve la orientación del robot detectado. en grados 8C Q getLeading Q %FC9 . (lase EcannedRobot"vent . +a /ue es el /ue mAs posibilidades o@rece + donde se pueden realizar mAs cAlculos.double get-istance89) devuelve la distancia con el robot detectado .Mane=ando e#ento( "l evento mAs usado.double getVelocit+89) devuelve la velocidad del robot .double getGearing89 .double get"nerg+89) devuelve su energía . . si es mu+ poca 8menor de %9 no es conveniente desperdiciar energía con un disparo de potencia ma+or.Robot /ue dispare con mAs o menos @uerza 8+ por lo tanto menos o mAs velocidad9 seg. asi como si este se esta moviendo o no 8si no se mueve podemos disparar mAs lento9.n la distancia a la /ue estO el enemigo. AdemAs debemos tener en cuenta la energía del enemigo.%=ercicio 3 . %=ercicio > . 1ota) no es necesario realizar cAlculos complejos. basta con estimar a ojo por donde estarA el enemigo. pero ademAs nuestro robot debe detectar la dirección en la /ue se mueve el enemigo para girar el ca*ón en dicKa dirección.!gual /ue el ejercicio %. . pero esta vez controlaremos /ue el robot solo avance lo necesario cuando embista a un enemigo. Pista) ?a @unción double getGearing89 puede sernos mu+ . . pues nos da la orientación de nuestro enemigo.%=ercicio ? . + en el caso de /ue lo reciba se gire en la dirección en la /ue estA el enemigo. + /ue ademAs detecte si el golpe lo da o lo recibe.Mejora del 3ami3aze 8ejercicio #9) vamos a reutilizar el robot /ue realizamos en el primer ejercicio.til. + Kaga lo mismo cuando le impacte una bala. pero con respecto a nuestra propia orientación. @ ahoraAAA RA (SMGA<!RT . . cuyos fondos proceden de la Consejería de Economía.MucKas gracias por vuestra atenciónTT Este programa ha sido realizado con f i nanciación del Proyecto de Mejora Docente "Consolidación de los conocimientos de programación mediante el desarrollo de videojuegos: una experiencia en el año de Turing" (código AAA_13_019) de la Convocatoria de Actuaciones Avaladas para la Mejora Docente. Innovación. Ciencia y Empleo de la Junta de Andalucía. Formación del Profesorado y Difusión de Resultados de la Unidad de Innovación Docente de la Universidad de Cádiz. Curso 2012/2013.