200412861_fase#1

  • Uploaded by: Carlos Barrios
  • 0
  • 0
  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 200412861_fase#1 as PDF for free.

More details

  • Words: 1,412
  • Pages: 12
ROBOCODE - FASE#1 Carlos Andres Barrios Gonzalez [email protected] Ing. Huber Flores

Guatemala, Guatemala Universidad de San Carlos de Guatemala Facultad de Ingenier´ıa. Escuela de Ciencias y Sistemas. Junio, 2009

1

Resumen

RoboCode es un simulador de combates entre tanques desarrollado por IBM Alphaworks. Esta escrito en lenguaje java y es open source. El simulador proporciona un API con una serie de objetos y m´etodos para programar el tanque. El jugador debe elegir la mejor estrategia para controlar el tanque y vencer a los dem´ as robots en la arena de combate.

2

Abstract

RoboCode is a robot combat simulator developed by IBM Alphaworks. It is written in java language and it is open source. The simulator provides an API with a series of objects and methods to program the tank. The player should select the best strategy to control the tank and conquer the other robots in the combat arena.

1

3

ROBOCODE - Introducci´ on

Build the best. Destroy the rest Robocode es un entorno gratuito de simulaci´on de guerras de tanques robots, desarrollado por un ex programador de IBM, Mathew Nelson, fan´atico de Java y los robots en Alphaworks de IBM. Los tanques rob´oticos son programados en java y posteriormente son cargados en un simulador donde se desarrolla el combate. Existen dos modos de juego: • Batalla individual: en el que cada robot lucha contra todos los dem´as. • Batalla en equipo: en el que un ej´ercito de robots lucha por la victoria de modo colaborativo. El simulador proporciona un API con una serie de objetos y m´etodos para programar el tanque. El jugador debe elegir la mejor estrategia para controlar el tanque con desplazamientos, giros, control de radar, control de ca˜ n´on y disparo. Adem´ as debe controlar todos los eventos que se producen como ser impactado, detectar a un enemigo, chocar contra una pared, etc. ASPECTOS REALISTAS • Las actuaciones llevan tiempo; mientras rotas te pueden disparar. • Las balas tardan en llegar. • El sensor unidireccional debe apuntar al adversario para verlo. • El ca˜ n´ on se calienta al disparar y debe enfriarse antes del pr´oximo disparo. • Chocar contra los obst´aculos debilita. ASPECTOS NO REALISTAS: • Los sensores y el resto de los componentes son silenciosos. 2

• Los sensores detectan velocidad, posici´on, orientaci´on y energ´ıa restante. • Los combates tienen lugar en un entorno plano 2D y cerrado.

4

ANATOMIA DE ROBOCODE

4.1

TANQUE

Cada robot esta formado de tres partes: • Veh´ıculo • Arma • Radar

Figure 1: Tanque

4.2

ARENA

Se presenta en un plano cartesiano con el origen en la esquina inferior izquierda. • Las coordenadas son expresadas como (x,y). • Siempre son positivas • El origen de coordenadas esta en (0,0)

3

Figure 2: Tanque

5

SINTAXIS Y COMANDOS PARA EL ROBOT

Cada robot se programa en lenguaje Java, la clase que representa al robot debe implementar la clase robot y debe de importar el paquete robocode.* • run():La clase robot de la que heredamos implementa la clase Runnable, por lo que se debe implementar el m´etodo run():Este m´etodo se estar´a ejecutando durante toda la vida del robot. • Cada robot es un thread de java, que responde ante distintos eventos.

4

5.1

METODOS DE LA CLASE ROBOT

• Void ahead(double distance): Mueve el robot hacia delante con la distancia medida en p´ıxeles • Void back(double distance): Se mueve hacia atr´as cierta distancia medida en p´ıxeles • Void doNothing(): Ese turno no realiza acci´on, salta ese turno. • Void fire(double power): Dispara un proyectil • Bullet fireBullet(double power): Dispara un proyectil • double getBattleFieldHeight(): Devuelve la altura del campo de batalla • double getBattleFieldWidth(): Devuelve el ancho • double getEnergy(): Devuelve la energ´ıa actual del robot • double getGunHeading(): Devuelve la orientaci´on del arma en grados, relativo a la posici´ on del tanque • double getHeading(): Devuelve la orientaci´on del tanque en grados • int getOthers(): Retorna la cantidad de oponentes que hay en el campo de batalla • int getNumRounds(): Devuelve la cantidad de rondas que se pelearan. • double getRadarHeading(): Devuelve la orientaci´on del radar en grados • int getRoundNum(): Retorna el round actual • long getTime(): Devuelve el tiempo de juego actual en el round, que es igual al turno actual • double getVelocity(): Devuelve la velocidad del robot medida en p´ıxeles/turno • double getWidth(): Devuelve el ancho del robot medida en pixeles • double getX(): Devuelve la posici´on en el eje x del robot, seg´ un el eje de robocode. • double getY(): Devuelve la posici´on en el eje x del robot, • void setAdjustGunForRobotTurn(boolean independent): Establece que el arma gire independientemente del giro del tanque • void setAdjustRadarForGunTurn(boolean independent): Establece que el radar gire independientemente del giro del arma • void setAdjustRadarForRobotTurn(boolean independent): Establece que el radar gire independientemente del giro del cuerpo del tanque 5

5.2

MOVIMIENTOS DEL ROBOT:

Metodos que cambian la direcci´on y desplazamiento del robot: • turnRight(double degree) • turnLeft(double degree) • ahead(double distance) • back(double distance) • turnGunRight(double degree) • turnGunLeft(double degree) • turnRadarRight(double degree) • turnRadarLeft(double degree) • setAdjustGunForRobotTurn(boolean flag) • setAdjustRadarForRobotTurn(boolean flag) • setAdjustRadarForGunTurn(boolean flag)

5.3

OBTENCION DE INFORMACION:

Metodos para obtener informaci´on: • getX() • getY() • getHeading() • getGunHeading() • getRadarHeading() • getBattleFieldWidth() • getBattleFieldHeight()

5.4

EVENTOS:

• ScannedRobotEvent: se dispara cuando el radar detecta un robot a su paso por una zona angular. • BulletHitEvent: se lanza cuando nuestro robot alcanza con un disparo a uno de los enemigos. • HitRobotEvent: se lanza cuando nuestro robot colisiona con un robot enemigo. 6

• HitWallEvent: se dispara cuando el robot choca contra un muro de los que limitan el campo de batalla. • HitByBulletEvent: se lanza cuando nuestro robot es alcanzado por un disparo. • Clase ScannedRobotEvent: • public double getBearing(): Devuelve el ´angulo (en grados) del enemigo en relaci´ on al ´ angulo que apunta tu tanque/robot. Devuelve valores entre -180o a 180o • public double getDistance(): Devuelve la distancia al enemigo. Clase BulletHitEvent: • public double getEnergy(): Devuelve la energ´ıa restante del adversario descontada. Clase HitRobotEvent: • public double getBearing(): Devuelve el ´angulo (en grados) del enemigo contra el que se ha chocado en relaci´on al ´angulo que apunta tu tanque/robot. • public double getEnergy(): Devuelve la energ´ıa del enemigo tras la colisi´ on. Clase HitWallEvent: • public double getBearing(): Devuelve el ´angulo (en grados) del obst´aculo con el que se colisionaen relaci´on al ´angulo que apunta el tanque/robot. Clase HitByBulletEvent: • public double getBearing(): Devuelve el ´angulo (en grados) del enemigo en relaci´ on al ´ angulo que apunta EL tanque/robot.

7

6

EJEMPLO: Creaci´ on de un Robot

6.1

INSTALACION DE ROBOCODE:

• Descargar robocode de: http://robocode.sourceforge.net/ • Para iniciar la instalaci´on, ejecutar desde consola: java - jar robocode-1.7.1.3-Beta-setup.jar

6.2

CREACION DE UN ROBOT:

• Ejecutar robocode

• En el men´ u ROBOT, seleccionar EDITOR.

8

• En la ventana de ROBOT EDITOR, seleccionar NEW, Robot. • Ingresar el nombre del robot y los datos para generar la clase de java. • Se generara autom´ aticamente el c´odigo para un robot b´asico, en este se deber´ a de programar los movimientos, acciones, eventos, etc del robot.

• Seleccionar en el men´ u Compilar para comprobar el c´odigo del robot.

9

6.3

CREACION DE UNA BATALLA:

• En el men´ u de Robocode, seleccionar BATTLE, New para un nuevo combate.

• Agregar los robots para la batalle y configurar la arena.

10

6.4

ARENA:

Vista de la Arena de Batalla:

Resultados de la Batalla:

7

Conclusiones 1. Robocode es un entorno gratuito de simulaci´on de guerras de tanques robots, desarrollado por un ex programador de IBM, Mathew Nelson. 2. Esta escrito en lenguaje java y es open source. 3. El simulador proporciona un API con una serie de objetos y m´etodos para programar el tanque. 4. Los tanques rob´ oticos son programados en java y posteriormente son cargados en un simulador donde se desarrolla el combate. 5. Existen dos modos de juego: batalla individual y batalla en equipo.

11

6. Cada robot se programa en lenguaje Java, la clase debe implementar la clase robot y debe de importar el paquete robocode.* 7. La clase robot de la que heredamos implementa la clase Runnable, por lo que se debe implementar el m´etodo run().

8

Bibliograf´ıa [1 ]: ”Rock ’em, sock ’em Robocode!”. By Sing Li ([email protected]). [2 ]: ”http://www.it.uc3m.es/jvillena/” By Julio Villena Rom´an. [3 ]: ”Robocode: un juego para aprender”. By R. Espinola. [4 ]: ”Robocode Argentina” By Robocode Argentina. [5 ]: http://dailaguna.blogspot.com/2008/01/robocode-aprende-java-jugando.html

12

More Documents from "Carlos Barrios"

200412861_fase#3
May 2020 7
200412861_fase#1
May 2020 5
November 2019 3
Facetasenero4
December 2019 4
May 2020 9