Ainda sobre a curva da cobra!

1 resposta
Luiz-SP

São Paulo - SP

Pessoal, como eu já disse antes estou tentando fazer um joguinho tipo snake, pensei numa solução que implementa uma lista encadeada em que cada parte do corpo é um no da lista e vc tem nós que seguem do começo até o fim da lista nudando a direção dos nós fazendo com que a cobra faça curvas, o que vc acham? Tenho duas classes, na verdade minha dúvida é o método getNoFinal, o que vc acham dele?

public class NoFinal {

   NoFinal proximo;
   Object data;
   String direcao;
  
   public NoFinal ( NoFinal proximo, String direcao ){      
      this( proximo, null, direcao );
   } 
   
   public NoFinal (NoFinal proximo, Object data, String direcao){
      this.data = data;
      this.direcao = direcao;
      this.proximo = proximo;
   }
     
   public NoFinal getNoFinal ( NoFinal no) {  //achei isso estranho, mas
      return no;                                         // usei  para
   }                                                        //receber referência no 
   public Object getData(){
      return data;
   }
   
   public void setDirecao( String direcao ){
      this.direcao = direcao;
   }
   
   public String getDirecao( ){
      return direcao;
   }

   public NoFinal getProximo(){
        return proximo;
   }
   
   public void setProximo(NoFinal proximo){
        this.proximo=proximo;
   }

}
import javax.swing.*;

public class CorpoDaCobra {
    
   NoFinal cabeca, corpo, rabo, indicaCabeca;
   ImageIcon imagem = new ImageIcon(getClass().getResource("corpo.gif"));
    
   public CorpoDaCobra ( ){
      rabo = new NoFinal (null, imagem, "prafrente");
      corpo = new NoFinal (rabo, imagem, "prafrente");
      cabeca = new NoFinal (corpo, imagem, "prafrente");    
      indicaCabeca = new NoFinal ( cabeca , "prafrente" );
   } 
   
   public void fazCurva ( NoFinal curva, String direcao, NoFinal parte ){
      parte.setDirecao(direcao);
      curva.setProximo(parte.getProximo());
      parte = parte.getNoFinal(parte.getProximo()); //aqui uso o método
      while ( curva.getProximo() != null ){              // estranho
         this.fazCurva( curva, direcao, parte );
      }        
   }
   
   public void setCurva ( String direcao ){
      NoFinal curva = new NoFinal ( this.cabeca, direcao );
      this.fazCurva( curva, direcao, this.cabeca );
   }
   public static void main ( String [] args ){
      CorpoDaCobra cobra = new CorpoDaCobra( );
      System.out.println(cobra.rabo.getProximo());
      System.out.println(cobra.rabo.getDirecao());
      cobra.setCurva( "prabaixo" );
      System.out.println(cobra.rabo.getDirecao());
   } 
}

Luiz Claudio F. dos Santos

1 Resposta

Paulo_Silveira

use o java.util.LinkedList

mas se voce quer mesmo implementar a lista ligada, crie uma classe Lista que tem um No inicial. cada No tem um No proximo, se o proximo eh null, ele eh final.

algo como:

class Lista {
   private No cabecaDaLista;
}

class No {
  private No proximo;
  private Object dados;

  public isUltimoNo() {
    return this.proximo == null;
  }
}
Criado 30 de julho de 2004
Ultima resposta 31 de jul. de 2004
Respostas 1
Participantes 2