Código Java:
Ver original
import java.util.*; /** * Clase que contiene un robot que se mueve por un recinto */ { /** * Constante estatica para la direccion; * es relativa a la orientacion del robot */ public static int DELANTE=Recinto.DELANTE; /** * Constante estatica para la direccion; * es relativa a la orientacion del robot */ public static int DETRAS=Recinto.DETRAS; /** * Constante estatica para la direccion; * es relativa a la orientacion del robot */ public static int IZQDA=Recinto.IZQDA; /** * Constante estatica para la direccion; * es relativa a la orientacion del robot */ public static int DCHA=Recinto.DCHA; // posicion del robot, en celdas, y angulo, en cuadrantes (0, 1, 2, 3) private int posX, posY; private int angulo; // expresado en cuadrantes // recinto en el que se mueve el robot private Recinto rec; /** * Constructor al que se le pasa la posicion inicial en celdas, * y el angulo inicial en grados (multiplo de 90) */ { this.angulo=(angulo%360)/90; rec=new Recinto(); if (rec.posicionValida(posX,posY)) { this.posX=posX; this.posY=posY; rec.cambiaRobot(posX, posY,angulo); } else { posY+"no es valida"); this.posX=25; this.posY=25; rec.cambiaRobot(25, 25,angulo); } } /** * Avanza el robot una celda si se puede; * retorna true si avanzo, o false si habia un obstaculo delante */ public boolean avanza() { if (rec.hayObstaculo(Recinto.DELANTE)) { return false; } else { switch (angulo) { case 0: posX++; break; case 1: posY--; break; case 2: posX--; break; case 3: posY++; } rec.cambiaRobot(posX,posY,angulo*90); return true; } } /** * Gira el robot 90 grados */ public void gira90() { angulo=(angulo+1)%4; rec.cambiaRobot(posX,posY,angulo*90); } /** * Indica si el robot tiene un obstaculo en la direccion indicada * La direccion se expresa mediante las constantes estaticas * DELANTE, DETRAS, IZQDA, DCHA, y es relativa al angulo actual del robot */ public boolean hayObstaculo(int direccion) { return rec.hayObstaculo(direccion); } /** * Pinta el robot y el recinto */ public void pinta() { espera(50); rec.pinta(); } // Espera un rato expresado en milisegundos private void espera(int milisegundos) { try { } } /** * Indica si el robot esta dentro del laberinto */ public boolean estaDentroLaberinto() { return 30<=posX && posX<=80 && 30<=posY && posY<=80; } }
Código Java:
Ver original
import fundamentos.Dibujo; import fundamentos.ColorFig; /** * Clase que representa un recinto con obstaculos, en el que se * mueve un robot movil */ public class Recinto { /** * Constante para la direccion de movimiento; * es relativa a la orientacion del robot */ public static int DELANTE=0; /** * Constante para la direccion de movimiento; * es relativa a la orientacion del robot */ public static int DETRAS=2; /** * Constante para la direccion de movimiento; * es relativa a la orientacion del robot */ public static int IZQDA=1; /** * Constante para la direccion de movimiento; * es relativa a la orientacion del robot */ public static int DCHA=3; // ventana para hacer el dibujo private Dibujo dib; // iconos disponibles {"icono0.png","icono90.png","icono180.png","icono270.png"}; // posicion del icono private int posX=0, posY=0; // icono a usar 0, 1, 2, 3, para 0, 90, 180, 270 grados private int icono=0; //celda del recinto, que define los obstaculos a dibujar // true indica que la celda esta ocupada por un obstaculo private boolean[][] celda; // obstaculos a usar, teniendo en cuenta que el robot mide mas // de una celda. Contiene el dibijo de las celdas, aumentado // true indica que la celda esta ocupada por un obstaculo private boolean[][] obstaculo; // maximo numero de celdas contenidas en el recinto private int maxX=120; private int maxY=120; //Tamano de las celdas del dibujo private int paso=5; // margen que debe librarse alrededor del robot, en celdas // el robot mide (2*margen+1)*paso private int margen=2; // limites del dibujo private int limiteX=paso*(maxX+2); private int limiteY=paso*(maxY+2); /** * Constructor que da un valor concreto al recinto */ public Recinto() { dib= new Dibujo("Recinto",limiteX,limiteY); celda= new boolean[maxX][maxY]; // se inicializa a false por omision obstaculo= new boolean[maxX][maxY]; // se inicializa a false por omision // colocar los bordes superior e inferior del recinto for (int i=0; i<maxX; i++) { celda[i][0]=true; celda[i][maxY-1]=true; } // colocar los bordes izqdo y dcho del recinto for (int i=0; i<maxY; i++) { celda[0][i]=true; celda[maxX-1][i]=true; } // crear un laberinto en el centro // lineas horizontales for (int i=30; i<=80; i++) { celda[i][30]=true; } for (int i=30; i<=70; i++) { celda[i][40]=true; } for (int i=40; i<=50; i++) { celda[i][50]=true; } for (int i=60; i<=70; i++) { celda[i][50]=true; } for (int i=40; i<=50; i++) { celda[i][70]=true; } for (int i=30; i<=80; i++) { celda[i][80]=true; } // lineas verticales for (int i=40; i<=80; i++) { celda[30][i]=true; } for (int i=40; i<=50; i++) { celda[40][i]=true; } for (int i=50; i<=70; i++) { celda[50][i]=true; } for (int i=60; i<=80; i++) { celda[60][i]=true; } for (int i=40; i<=70; i++) { celda[70][i]=true; } for (int i=30; i<=80; i++) { celda[80][i]=true; } // Colocar los obstaculos for (int i=0; i<maxX; i++) { for (int j=0; j<maxY; j++) { if (celda[i][j]) { { { obstaculo[x][y]=true; } } } } } } // transforma coordenada x de celda al dibujo private int coordX(int x) { return x*paso+paso; } // transforma coordenada x de celda al dibujo private int coordY(int y) { return y*paso+paso; } /** * Pintar el dibujo */ public void pinta() { dib.borra(ColorFig.blanco); dib.ponGrosorLapiz(1); dib.ponColorLapiz(ColorFig.rojo); dib.ponRelleno(ColorFig.rojo); for (int x=0; x<maxX; x++) { for (int y=0; y<maxX; y++) { if (celda[x][y]) { dib.dibujaRectangulo(coordX(x),coordY(y),coordX(x)+paso,coordY(y)+paso); } } } dib.dibujaImagen(coordX(posX)-margen*paso,coordY(posY)-margen*paso,fichIcono[icono]); dib.pinta(); } /** * Cambia la posicion y angulo del robot. * El angulo debe ser multiplo de 90 */ public void cambiaRobot(int posX, int posY, int angulo) { this.posX=posX; this.posY=posY; angulo=angulo%360; icono=angulo/90; } /** * Indica si el robot tiene un obstaculo en la direccion indicada */ public boolean hayObstaculo(int direccion) { switch ((icono+direccion)%4) { case 0: return obstaculo[posX+1][posY]; case 1: return obstaculo[posX][posY-1]; case 2: return obstaculo[posX-1][posY]; case 3: return obstaculo[posX][posY+1]; default: return false; } } /** * Indica si estas coordenadas son validas para poner el robot */ public boolean posicionValida(int x, int y) { return !obstaculo[x][y]; } }
Quiero crear un main para comprobar que mi clase mueverobot funciona correctamente pero no se.