12.07.2015 Views

Presentación Robocode

Presentación Robocode

Presentación Robocode

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Robocode</strong>Javier Villegas Gómez


Contenido●- Anatomía de un Robot- Mi primer Robot- Física del juego- Puntuaciones- Un vistazo a la API- Ejercicio 1- Ejercicio 2- Manejando Eventos- Ejercicio 3- Ejercicio 4- Ejercicio 5


Anatomía de un Robot-Cuerpo: Permite el movimiento del robot e incorpora elcañón y el radar.- Cañon: Apuntar y disparar.- Radar: Detecta enemigos, a no serque se le diga lo contrario sigue el movimiento del cañón.


Mi primer robotRobot/Editor/File/New RobotNombre y carpeta.package man;import robocode.*;public class MyFirstRobot extends Robot {public void run() {while (true) {ahead(100);turnGunRight(360);back(100);public voidonScannedRobot(ScannedRobotEvent e) {}}fire(1);Por último guardar ycompilar(Compiler/Compile)turnGunRight(360);}}


Física del Juego-Coordenadas:Sistema Cartesiano (x,y)x = Anchuray = Altura-Dirección:Se mide en grados0/360 grados = Norte90 grados = Este180 grados = Sur270 grados = Oeste


Física del Juego-Tiempo y distancia:El tiempo (t) se mide en "ticks". 1 tick = 1 turnoLa distancia se mide en pixeles de precisión doble, es decir, un robotse puede mover incluso una fracción de pixel.- Movimiento del robot:Aceleración(a): Un robot acelera a 1 pixel/turno y decelera a 2pixeles/turnoVelocidad(v): v = at. La velocidad máxima son 8 pixeles/turnoDistancia(d): d = vt


Física del Juego- Rotación del robot, cañón y radar:Rotación del robot: (10 - 0,75*(velocidad)) grados/turnoCuanto más rápido te muevas, más lento giras.Rotación del cañón: 20 grados/turno. Se le añade a la rotación delrobot.Rotación del radar: 45 grados/turno. Se le añade a la rotación delcañón.-Colisiones:Con otro robot: Cada robot recibe 0,6 de dañoCon un muro: velocidad * 0,5 -1 (nunca menor que 0)


Física del Juego- Balas:Potencia del disparo: minimo = 0, maximo = 3.Daño: 4 * potencia. Sí potencia > 1, se le suma 2*(potencia -1)Velocidad: 20 - 30*potenciaSobrecalentamiento: 1 + potencia / 5. Igual a 0 para disparar.Disparar consume la potencia del disparo de tu propia energía.Energía restaurada por impacto: 3 * potencia


- Ram Damage Bonus: Cuando matas un enemigo por impacto, ganas un 30% de todo eldaño que le has causado.PuntuacionesEsta es la tabla de puntuaciones al terminar el juego:- Total Score: La suma de todas las puntuaciones- Survival Score: Cada robot vivo, gana 50 puntos por cada robot que muere- Last Survival Bonus: El último robot vivo, gana 10 puntos por cada robot muerto antesque el.- Bullet Damage: 1 punto por cada punto de daño realizado a los enemigos- Bullet Damage Bonus: Cuando matas un enemigo ganas un 20% de todo el daño quele ha hecho.- Ram Damage: 2 puntos por cada punto de daño realizado con impactos


Un vistazo a la APIFunciones de la clase Robot: http://robocode.sourceforge.net/docs/robocode/- void ahead (double distancia): Mueve el robot hacia adelante(a donde apunte).- void back (double distancia): Lo mismo, pero hacia atrás.- void fire (double potencia): Dispara con la potencia especificada.- double getHeading(): devuelve la dirección a la que apunta el robot(en grados)- double getX()/ double getY(): Devuelve la posición X (ancho) o Y(alto)- void turnGunLeft(double grados): gira el cañón a la izquierda- void turnGunRight(double grados): gira el cañon a la derecha- void turnLeft(double grados): gira el robot a la izquierda- void turnRight(double grados): gira a la derecha- void turnRadarLeft(double grados): gira el radar a la izquierda- void turnRadarRight(double grados): lo gira a la derecha


Un vistazo a la APISeguimos con la clase Robot:- void setAdjustGunForRobotTurn(boolean independiente)- void setAdjustRadarForRobotTurn(boolean independiente)Estas dos funciones hacen que el cañón o el radar se vuelvan independientes delmovimiento del robot, es decir, si el robot gira, el cañón/radar no gira.- void setAdjustRadarForGunTurn(boolean Independiente): hace que el Radar seaindependiente del cañón.- void scan(): vuelve a comprobar si detecta un robot (usada en la funciónonScannedRobot hace que esta comience a ejecutarse de nuevo)


Un vistazo a la APIEventos:- void run(): Es el método principal, en el se ejecutan los movimientos básicos del robot-void onScannedRobot(ScannedRobotEvent event): se llama cuando el radar detecta aotro robot- void onHitByBullet(HitByBulletEvent event): esta función se llama cuando el robotrecibe un impacto de bala.- void onHitRobot(HitRobotEvent event): esta se llama cuando chocamos con un robot- void onHitWall(onHitWallEvent event): se llama cuando el robot choca contra un muro


Ejercicio 1- Robot kamikaze: Gira hasta que detecta un enemigo y cuando lo hacese lanza a por él, y cuando choca comienza a disparar con la máximapotencia.


Ejercicio 2- Robot que avance hasta el muro superior y una vez llegue se desplacea la derecha hasta que choque y se dé la vuelta, y así sucesivamente, elcañón apuntará hacia abajo, para que dispare siempre que detecte unenemigo.


Manejando eventosEn las funciones que reciben un evento como parámetro de entrada, podemos acceder alos elementos de dicho evento para obtener información que nos pueda resultarrelevante, por ejemplo:Clase HitRobotEvent- double getBearing(): Devuelve la orientación del robot con el que hemos chocado, conrespecto a nosotros (-180 < getBearing < 180)-double getEnergy(): Devuelve la energía del robot con el que chocamos-boolean isMyFault(): Devuelve verdadero si hemos provocado el choqueClase HitByBulletEvent- double getBearing()- double getPower(): Devuelve la potencia de la bala- double getVelocity(): Devuelve la velocidad de la bala


Manejando eventosEl evento más usado, ya que es el que más posibilidades ofrece y donde se puedenrealizar más cálculos.Clase ScannedRobotEvent- double getHeading(): devuelve la orientación del robot detectado, en grados (0


Ejercicio 5- Mejora del kamikaze (ejercicio 1): vamos a reutilizar el robot querealizamos en el primer ejercicio, pero esta vez controlaremos que elrobot solo avance lo necesario cuando embista a un enemigo, y queademás detecte si el golpe lo da o lo recibe, y en el caso de que loreciba se gire en la dirección en la que está el enemigo, y haga lo mismocuando le impacte una bala.Pista: La función double getBearing() puede sernos muy útil, pues nosda la orientación de nuestro enemigo, pero con respecto a nuestrapropia orientación.


Y ahora...¡A COMBATIR!


Muchas gracias por vuestra atención!!Este programa ha sido realizado con fi nanciación del Proyecto de Mejora Docente "Consolidaciónde los conocimientos de programación mediante el desarrollo de videojuegos: una experiencia en elaño de Turing" (código AAA_13_019) de la Convocatoria de Actuaciones Avaladas para la MejoraDocente, Formación del Profesorado y Difusión de Resultados de la Unidad de Innovación Docentede la Universidad de Cádiz, Curso 2012/2013, cuyos fondos proceden de la Consejería deEconomía, Innovación, Ciencia y Empleo de la Junta de Andalucía.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!