Problema com OO

3 respostas
C

ola pessoa, estou com um problema que é o seguinte. eu tenho essa classe inimigo e o main certo? no main eu crio um objeto do tipo Inimigo e faço o if, se for portugues eu luto contra portugues, da tudo blz, o problema é que quando o atributo life zera, eu vou tentar lutar contra matematica e ele permanece zerado, uma vez que é o mesmo objeto.
uma forma seria criar varios objetos, 1 para cada materia.
soh que eu pergunto…existe alguma outra maneira que voces podem me ajudar?

aguardo resposta

Classe Inimigo

private int life = 10;
GerenciadorDePerguntas gp = new GerenciadorDePerguntas();
Erro e = new Erro();
ArrayList <Pergunta> listaPerguntas = new ArrayList <Pergunta>();
int opc;
String nome,resposta;
	
	public int getLife(){
		return life;
	}
	
		
	public void diminuirLife(){
			this.life -=1;
	}
		
	public void enfrentarInimigo(String disciplina,  Jogador j){
		if(this.getLife()==0){
			JOptionPane.showMessageDialog(null,"professor derrotado" );
		}
		else{
			JOptionPane.showMessageDialog(null,"Batalha: \n " +j.getNome() + " X Professor de " +disciplina );
			listaPerguntas = gp.lerPerguntas(disciplina);
			do{
				for(Pergunta p: listaPerguntas){
					resposta = JOptionPane.showInputDialog(p.getPergunta());
					if(e.verificaErro(resposta)==true){
						JOptionPane.showMessageDialog(null, "resposta certa");
						j.setPontos(10);
						diminuirLife();
					}
					else{
					JOptionPane.showMessageDialog(null, "resposta errada");
						j.errarReposta();
						if(j.getLife()==0){
							JOptionPane.showMessageDialog(null, "voce perdeu");
							System.exit(1);
						}
					}
				
				}
			}while(getLife()>0);
				JOptionPane.showMessageDialog(null, "voce venceu");
		}

Main

Inimigo i = new Inimigo();
do{
	opc = Integer.parseInt(JOptionPane.showInputDialog("Com quem você quer lutar?\n 1-Professor de Matematica\n 2-Professor de Portugues"));
	if(opc==1){
	      i.enfrentarInimigo( "matematica", j);
	      break;
	}
	if(opc==2){
	      i.enfrentarInimigo("portugues", j);
	      break;
	}
...

3 Respostas

luciano2

No seu lugar eu criaria a logica da aplicação fora da classe inimigo

e no metódo enfrentar inimigo cada vez que eu entra-se reinicializava o valor de inimigo, ou até reinstanciava.

C

poderia explicar melhor?

luciano2

Seu inimigo não seria a propria classe onde a logica está.

No seu lugar eu criava uma classe inimigo com o life e metódos para aumentar ou diminuir life

criava uma classe principal onde eu iria manipular o inimigo

ex:

public class inimigo{
     int life = 10;
     
     ... metódos
}

Na classe que controla a logica eu faria

public void enfrentarInimigo(){
     inimigo = new inimigo();
     //dessa forma o valor do life vai voltar a 10 pq você está instanciando uma novo inmigo
}

da forma que você está fazendo você esta manipulando um valor da propria classe, esse valor após ficar como 0 só volta a ser 10 quando você reiniciar a classe.

Criado 4 de maio de 2010
Ultima resposta 5 de mai. de 2010
Respostas 3
Participantes 2