1.
a)
public void tecla(String tecla) { estados[estadoAtual].tecla(tecla); } public tique(Set<String> teclas, double dt) { estados[estadoAtual].tique(teclas, dt); } public void desenhar(Tela tela) { estados[estadoAtual].desenhar(tela); }
b)
public void mudaEstado(int estado) { estadoAtual = estado; }
c)
Em MeuJogo:
MeuJogo
public List<ObjetoJogo> getObjetos() { return objetos; }
Classe GameOver:
GameOver
public class GameOver implements Jogo { private MeuJogo jogo; public GameOver(MeuJogo jogo) { this.jogo = jogo; } public void tecla(String tecla) { } public tique(Set<String> teclas, double dt) { } public void desenhar(Tela tela) { for(ObjetoJogo o : jogo.getObjetos()) { o.desenhar(tela); } // posição, tamanho e cor são livres! tela.texto("GAME OVER", 400, 300, 30, new Cor("branco")); } }
2.
public class ObservaImprimeN implements Observador { private Sujeito s; private int c; public ObservaImprimeN(Sujeito s, int c) { this.c = c; this.s = s; this.s.observar(this); } public void evento(Sujeito fonte) { System.out.println("EVENTO RECEBIDO"); c = c - 1; if(c == 0) s.esquecer(this); } }
Declaração:
public class MeuJogo implements Jogo, Sujeito { private HashSet<Observador> observadores = new HashSet<Observador>();
Métodos de Sujeito:
Sujeito
public void observar(Observador o) { observadores.add(o); } public void esquecer(Observador o) { observadores.remove(o); } public void notificar() { for(Observador o: observadores) { o.evento(this); } } public void mudaEstado(int estado) { estadoAtual = estado; notificar(); }