Execício do teste de 2012/11/19.
Implemente, em Java, as classes Tabuleiro e Peça. A classe Tabuleiro guarda um número variável de peças e tem o método desenhaPeças() que é responsável por desenhar todas as peças guardadas. A classe Peça tem dois atributos inteiros que representam as suas coordenadas no tabuleiro, um atributo que representa a côr da peça (cadeia de caracteres) e dois métodos: o método move() e o método devolveCor(). Existem dois tipos de peças: Cabo e Sargento. Cada tipo de peça move-se de forma distinta: as peças do tipo Cabo avançam uma unidade em cada uma das coordenadas enquanto que as peças do tipo Sargento avançam 3 unidades em cada uma das coordenadas. Para simplificar o seu trabalho considere que o tabuleiro não tem limites.
Se necessário pode implementar outras classes e/ou métodos.
A solução contém cinco classes (4 são as descritas no enunciado e a 5ª é a que contém o método main, App). Os métodos descritos no enunciado estão assinalados como "required method" e os atributos com "required attributes". Note-se que a solução é mínima e que algumas opções não são ideais em casos gerais (o uso de ArrayList na classe Tabuleiro, por exemplo).
O diagrama de classes é o seguinte:
Ficheiro Tabuleiro.java |
---|
import java.util.List;
import java.util.ArrayList;
public class Tabuleiro {
// could be more sophisticated
private List<Peça> _board = new ArrayList<Peça>();
public void add(Peça piece) {
_board.add(piece);
}
/**
* Note: required method
*/
public void desenhaPeças() {
for (Peça p: _board)
System.out.println(p);
}
/**
* Moves all pieces.
*/
public void shake() {
for (Peça p: _board)
p.move();
}
}
|
Ficheiro Peça.java |
---|
public abstract class Peça {
private int _x; // Note: required attribute
private int _y; // Note: required attribute
private String _color; // Note: required attribute
private int _xstep;
private int _ystep;
public Peça(int x, int y, String color, int xstep, int ystep) {
_x = x;
_y = y;
_color = color;
_xstep = xstep;
_ystep = ystep;
}
public Peça(int x, int y, String color, int xystep) {
this(x, y, color, xystep, xystep);
}
public Peça(int x, int y, String color) {
this(x, y, color, 1);
}
public String toString() {
return "Peça at (" + _x + ", " + _y + ") is " + _color + " (" + getClass().getName() + ")";
}
/**
* Note: required method
* @return color
*/
public String devolveCor() { return _color; }
/**
* Note: required method
*/
public void move() {
_x += _xstep;
_y += _ystep;
}
}
|
Ficheiro Cabo.java |
---|
public class Cabo extends Peça {
public Cabo(int x, int y, String color) {
super(x, y, color);
}
}
|
Ficheiro Sargento.java |
---|
public class Sargento extends Peça {
public Sargento(int x, int y, String color) {
super(x, y, color, 3);
}
}
|
Ficheiro App.java |
---|
public class App {
public static void main(String[] args) {
Tabuleiro t = new Tabuleiro();
t.add(new Cabo(1, 1, "azul"));
t.add(new Cabo(2, 5, "azul"));
t.add(new Sargento(4, 1, "amarelo"));
System.out.println("Initial:");
t.desenhaPeças();
t.shake();
System.out.println("After shaking:");
t.desenhaPeças();
}
}
|