sexta-feira, 10 de setembro de 2010

Aventura no Deserto

Essa aplicação foi desenvolvida durante a aula do professor Rafael, de Programação II, no SENAC.

É composta por duas classes, na ordem: Aplicacoes_no_Deserto e Aventura_no_Deserto.
A primeira classe é só um depósito de métodos.
A segunda classe, por sua vez, possui apenas o main, executando o programa.

O objetivo deste programa é gerar um jogo onde o jogador deve atravessar o deserto com o Veículo. São 10 unidades de distância entre o início e o fim da viagem, e o veículo só possui autonomia para 7 unidades.

Para completar o percurso, é necessário que o jogador deposite combustível no percurso, a fim de reabastecer quando necessário.

Primeira classe:
-----------------------------------------------------------------------------------------------

class Aplicacoes_no_Deserto {
    public int var[] = new int[15];
   
    /* Método para zerar o vetor público que guarda
    *  a quantidade de combustível nas posições do deserto
    */
    public void zera(){
        for(int w=15; w==0; w--){
            var[w]=0;
            System.out.println(var[w]);
        }
    }
   
    /* @see      -> Método contrutor do cenário
    *  @param  p -> recebe a posição indicada do veículo
    *  @param  c -> recebe o combustível que há no veículo
    *  @return a -> String com o cenário construído   
    */
    public String cenario(int p, int c){
         
          //String de construção
          String a ="";
         
        switch (p){
            case 0:
            a  = "  "+c+" |\\ \n";
            a += " ---|-| \n";
            a += "  O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";   
            break;
            case 1:
            a  = "         "+c+" |\\ \n";
            a += "        ---|-| \n";
            a += "         O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;
            case 2:
            a  = "                "+c+" |\\ \n";
            a += "               ---|-| \n";
            a += "                O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 3:
            a  = "                       "+c+" |\\ \n";
            a += "                      ---|-| \n";
            a += "                       O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 4:
            a  = "                              "+c+" |\\ \n";
            a += "                             ---|-| \n";
            a += "                              O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 5:
            a  = "                                     "+c+" |\\ \n";
            a += "                                    ---|-| \n";
            a += "                                     O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 6:
            a  = "                                            "+c+" |\\ \n";
            a += "                                           ---|-| \n";
            a += "                                            O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 7:
            a  = "                                                   "+c+" |\\ \n";
            a += "                                                  ---|-| \n";
            a += "                                                   O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 8:
            a  = "                                                          "+c+" |\\ \n";
            a += "                                                         ---|-| \n";
            a += "                                                          O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 9:
            a  = "                                                                 "+c+" |\\ \n";
            a += "                                                                ---|-| \n";
            a += "                                                                 O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 10:
            a  = "                                                                        "+c+" |\\ \n";
            a += "                                                                       ---|-| \n";
            a += "                                                                        O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;               
            case 11:
            a  = "                                                                               "+c+" |\\ \n";
            a += "                                                                              ---|-| \n";
            a += "                                                                               O  O  \n";
            a += "-------------------------------------------------------------------------------------\n";
            a += "|Início|  "+var[1]+"   |  "+var[2]+"   |  "+var[3]+"   |  "+var[4]+"   |  "+var[5]+"   |  "+var[6]+"   |  "+var[7]+"   |  "+var[8]+"   |  "+var[9]+"   |  "+var[10]+"   | FIM  |\n";
            a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
            a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";               
            break;
        }
        return a;       
    }
   
    /* @see      -> Método para carregar cobustível em qualquer lugar no mapa.
    *  @param  p -> recebe a posição indicada do veículo
    *  @param  c -> recebe o combustível que há no veículo
    *  @return c -> int com a nova quantidade de combustível no veículo    
    */
    public int carregar(int p, int c){
        // se a posição não for o Início e estiver sem combustíveis previamente descarregados,
        // informa que não há combustível e retorna a mesma quantidade que existia antes.
        if(p!=0){
            if(var[p]==0){
                System.out.println("Não há combustível nesse ponto do Deserto! \n");
                return c;
            }
            // se a posição do deserto posuir combustível,
            // decrementa o combustível do local, aumenta do veículo
            // e retorna a nva quantidade de combustível.
            else{
                var[p]=var[p]-1;
                c=c+1;
                return c;
            }
        }
        // se for o início, carrega sempre o máximo (7)
        else{
            return 7;
        }
    }
   
    /*  @see      -> Método para descarregar cobustível em qualquer lugar do mapa.
    *   @param  c -> recebe o combustível que há no veículo
    *   @param  p -> recebe a posição indicada do veículo
    **  @return c -> int com a nova quantidade de combustível no veículo   
    */
    public int descarregar(int c, int p){
        // se for o início, não pode descarregar cobustível
        if(p==0){
            System.out.println("Você não pode descarregar combustível na cidade! \n");
            return c;
        }
        // no trajeto, só pode descarregar combustível se tiver algum para descarregar
        else{
            if(c>0){
                var[p]=var[p]+1;
                c=c-1;
                return c;
            }
            // se não tiver combustível para descarregar,
            // o sistema avisa e retorna a mesma quantidade que havia antes.
            else{
                System.out.println("Você não possui combustível para descarregar! \n");
                return c;
            }
        }       
    }

    /** @see       -> Método para calcular o consumo de combustivel durante o deslocamento.
    *   @param  p  -> recebe a posição indicada do veículo
    *   @param  pa -> recebe a posição anterior do veículo
    *   @param  c  -> recebe o combustível que há no veículo
    *   @return c  -> int com a nova quantidade de combustível no veículo
    **/
    public int deslocamento(int p, int pa, int c){
        int v = Math.abs(pa-p);
        while(Math.abs(v)!=0){
            c=c-1;
            v=v-1;
        }
        return c;
    }
       
    /** @see       -> Método para calcular as regras do jogo.
    *   @param  p  -> recebe a posição indicada do veículo
    *   @param  pa -> recebe a posição anterior do veículo
    *   @param  c  -> recebe o combustível que há no veículo
    *   @return r  -> 0 -> jogo prossegue
    *                 1 -> impede o deslocamento até o ponto inicado, mas o jogo prossegue
    *                 2 -> Veículo sem combustível e sem possibilidade de reabastecer. 
    ***/
     public int regras(int p, int pa, int c){
         
          // Veículo sem combustível durante o trajeto
          if(c==0){
             if(pa!=0){
                 if(var[p]==0){
                     System.out.println("Você ficou sem combustível! \n");
                     return 2;
                 }
             }           
         }
         // Veículo não pode se deslocar até o ponto indicado       
         if(Math.abs(pa-p)>c){
             System.out.println("Você não possui combustível suficiente para cobrir essa distância! \n");
             return 1;
         }
       
        // Se passou por todas as regras, está tudo ok e o jogo prossegue
         return 0;        
     }
}

-----------------------------------------------------------------------------------------------
Segunda classe:

-----------------------------------------------------------------------------------------------
 /**
 * @(#)Aventura_no_Deserto.java
 *
 * Aventura_no_Deserto application
 *
 * @author Arthur Tavares
 * @version 1.00 2010/8/28
 */

import java.util.Scanner;

public class Aventura_no_Deserto{

    // @see      -> Método para buscar as opções dos usuários e chamar os demais métodos do jogo.
    public static void main(String[] args) {
      
        // Instanciando variáveis literais:
        // a   -> variável para recebimento da tela de comando
        // aux -> auxiliar para tratamento de entradas do teclado
        String a="", aux="";
        // Instanciando variáveis inteiras:
        // p   -> variável para guardar a nova posição do veículo
        // pa  -> variável para guardar a antiga posição do veículo  
        // i   -> variável para comandar o laço de repetição básico do jogo
        // c   -> variável para guardar a quantidade de combustível do veículo
        // r   -> variável para guardar a resposta das regras do jogo      
        int p=0, pa=0, i=1, c=7, r=0;
      
        // objeto entra para utilizar os métodos da classe Scanner
        Scanner entra = new Scanner(System.in);
        // objeto AD para utilizar os métodos da classe Aventura_no_Deserto
        Aplicacoes_no_Deserto AD = new Aplicacoes_no_Deserto();  
        // Chama o método que zera as posições do vetor publico que guarda a quantidade de combustível nas posições  
        AD.zera();
      
        // construção da primeira Tela
        a  = "  "+c+" |\\ \n";
        a += " ---|-| \n";
        a += "  O  O  \n";
        a += "-------------------------------------------------------------------------------------\n";
        a += "|Início|  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   |  "+0+"   | FIM  |\n";
        a += "|  0   |  1   |  2   |  3   |  4   |  5   |  6   |  7   |  8   |  9   |  10  |  11  |\n";
        a += "|[D]escarregar combustível  |[C]arregar combustível     |[S]air                     |\n";
          
        System.out.println(a);
      
        // laço básico do jogo, para que este só termine com a opção do usuário ou com o "Game Over"
        while(i!=0){
          
            System.out.println("Digite o número da posição ou a letra da ação desejada: \n");
            aux = entra.next();
          
            //transforma a variável String auxiliar em int, caso seja uma posição, para utilização em métodos.
            //caso não consiga, a posição é mantida como a última posição válida.
            try{
                p = Integer.parseInt(aux);
            }
            catch(Exception e){
                p=pa;
            }
            //valida a opção tomada pelo usuário seguindo as regras do jogo.
            r = AD.regras(p, pa, c);
            //se a resposta das regras do jogo for 2 (veículo sem combustível) sai do laço e o jogo acaba.
            if(r==2){
                i=0;
                break;
            }
            //se a resposta das regras do jogo for 0, a opção do usuário é válida e o jogo prossegue.          
            if(r==0){
                if(aux.equals("0")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if (aux.equals("1")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("2")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("3")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("4")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("5")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("6")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("7")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("8")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("9")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("10")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("11")){
                    c = AD.deslocamento(p, pa, c);
                    pa= p;
                    a = AD.cenario(p, c);          
                    System.out.println(a);
                }
                if(aux.equals("D")){
                    c = AD.descarregar(c, p);
                    a = AD.cenario(p, c);
                    System.out.println(a);
                }
                if(aux.equals("C")){
                    c = AD.carregar(p, c);
                    a = AD.cenario(p, c);
                    System.out.println(a);
                }
                if(aux.equals("S")){
                    i=0;
                }
            }
        }
        System.out.println("Obrigado por testar a Aventura no Deserto!");  
        System.exit(0);
    }
}

Nenhum comentário:

Postar um comentário