Los objetos obstacles mantienen un lista de objetos rectangulo llamados boxes. Cada objeto contiene la coordenada de la esquina de arriba a la izquierda y la longitud de cada lado del cuadrado.
Los metodos publicos en obstaculos estan sincronizados, ya que es posible para el hilo de eventos del juego agregar una caja a la lista y al mismo tiempo examinar o dibujar la lista
Declaramos las variables , el constructor y para agregar usamos la clase add
private static final int BOX_LENGTH = 12; private ArrayList boxes; // arraylist de objetos Rectangles private WormChase wcTop; public Obstacles(WormChase wc) { boxes = new ArrayList(); wcTop = wc; } synchronized public void add(int x, int y) { boxes.add( new Rectangle(x,y, BOX_LENGTH, BOX_LENGTH)); wcTop.setBoxNumber( boxes.size() ); // reporta un nuevo numero de cajas }
La clase Obstacles tiene su propio draw, para le dibujo.
synchronized public void draw(Graphics g) // dibuja una serie de cajas azules { Rectangle box; g.setColor(Color.blue); for(int i=0; i < boxes.size(); i++) { box = (Rectangle) boxes.get(i); g.fillRect( box.x, box.y, box.width, box.height); } } // fin de draw()
Worm se comunica con obstacles para determinar si la nueva cabeza se intersecta con alguna caja.
synchronized public boolean hits(Point p, int size) // p se intersecta con alguno de los objetos { Rectangle r = new Rectangle(p.x, p.y, size, size); Rectangle box; for(int i=0; i < boxes.size(); i++) { box = (Rectangle) boxes.get(i); if (box.intersects(r)) return true; } return false; } // fin de intersects()
El metodo que se utiliza para llenar las cajas de texto en la parte de arriba del juego se llama con la funcion getNumObstacles()
synchronized public int getNumObstacles() { return boxes.size(); }