Comentários

0%

FOCO NO MERCADO DE TRABALHO

ARRAYS E STRINGS EM JAVA

Jesimar da Silva Arantes

Criação de arrays

Criação de arrays unidimensional e multidimensional para colocação de caixas, e restrição da região de navegação do robô.

Fonte: Shutterstock.

Deseja ouvir este material?

Áudio disponível no material digital.

Sem medo de errar

A startup em que você trabalha lhe passou algumas tarefas:

Após revisar as sugestões de seu gestor, você, então, partindo do Código 3.29 que havia desenvolvido, decidiu, em primeiro lugar, alterar a classe AppGUI. 

O Código 4.6 destaca as principais alterações feitas. Nessa classe, você criou dois vetores que armazenarão as imagens das caixas de livros e impressoras (linhas 3 e 4), uma matriz bidimensional que armazenará as imagens das caixas de HDs (linha 5) e, de forma semelhante, os objetos que conterão os dados das caixas, sendo dois vetores e uma matriz (linhas 6 a 8). Nas linhas 12 a 39, temos a instanciação de cada uma das caixas e de cada uma das imagens com suas respectivas localizações; por fim, nas linhas 56 a 62, temos a chamada para o método que avalia a posição do robô, permitindo que ele só se mova para regiões livres de obstáculos.

Após esses passos, o seu programa ficou pronto, com todas as alterações requisitadas pelo seu chefe, semelhante ao Código 4.6. (Repare que diversas partes foram omitidas; o código completo pode ser acessado no GitHub do autor.)

Código 4.6 | Novas modificações na modelagem das classes AppGUI e Robo
public class AppGUI extends Application {
    //código omitido
    private final ImageView viewBoxLvr[] = new ImageView[3];
    private final ImageView viewBoxPrt[] = new ImageView[3]; 
    private final ImageView viewBoxHd[][] = new ImageView[2][3];
    private final Caixa caixaLvr[] = new Caixa[3];
    private final Caixa caixaPrt[] = new Caixa[3]; 
    private final Caixa caixaHd[][] = new Caixa[2][3];
    @Override
    public void start(Stage janela) {
        //código omitido
        for (int i = 0; i < caixaLvr.length; i++) {
            caixaLvr[i] = new Caixa("Caixa de Livros", 15, 
                    25, 50 + i * 50, 30, 0.40f, 0.40f, 0.30f);
            viewBoxLvr[i] = new ImageView(imgBoxLvr);
            viewBoxLvr[i].setTranslateX(caixaLvr[i].getPosX());
            viewBoxLvr[i].setTranslateY(caixaLvr[i].getPosY());
        }
        for (int i = 0; i < caixaPrt.length; i++) {
            caixaPrt[i] = new Caixa("Caixa de Impressoras", 8, 
                    525, 50 + i * 50, 40, 0.60f, 0.60f, 0.40f);
            viewBoxPrt[i] = new ImageView(imgBoxPrt);
            viewBoxPrt[i].setTranslateX(caixaPrt[i].getPosX());
            viewBoxPrt[i].setTranslateY(caixaPrt[i].getPosY());
        }
        for (int i = 0; i < caixaHd.length; i++) {
           for (int j = 0; j < caixaHd[i].length; j++) {
              if (i == 0) {
                  caixaHd[i][j] = new Caixa("Caixa de HDs", 20, 
                     230 + j * 50, 50, 40, 0.50f, 0.50f, 0.30f);
              } else {
                  caixaHd[i][j] = new Caixa("Caixa de HDs", 20,
                     230 + j * 50, 160, 40, 0.50f, 0.50f, 0.30f);
              }
              viewBoxHd[i][j] = new ImageView(imgBoxHd);
              viewBoxHd[i][j].setTranslateX(caixaHd[i][j].getPosX());
              viewBoxHd[i][j].setTranslateY(caixaHd[i][j].getPosY());
           }
        }
        Group grupo = new Group();
        for (int i = 0; i < viewBoxLvr.length; i++) {
            grupo.getChildren().add(viewBoxLvr[i]);
        }
        for (int i = 0; i < viewBoxPrt.length; i++) {
            grupo.getChildren().add(viewBoxPrt[i]);
        }
        for (int i = 0; i < viewBoxHd.length; i++) {
            for (int j = 0; j < viewBoxHd[i].length; j++) {
                grupo.getChildren().add(viewBoxHd[i][j]);
            }
        }
        //código omitido
        cena.setOnKeyPressed((evt) -> {
            if (evt.getCode() == KeyCode.UP) {
                viewRobo.setImage(imgRoboCostas);
                if (robo.avaliaPos(robo.getPosicaoX(),
                        robo.getPosicaoY() - (int)robo.getVel())) {
                    robo.setPosicaoY(
                        robo.getPosicaoY() - (int)robo.getVel());
                    viewRobo.setTranslateX(robo.getPosicaoX());
                    viewRobo.setTranslateY(robo.getPosicaoY());
                }
            }
            //código omitido
        });
    }
}
public class Robo extends RoboIdeia {
    //código omitido
    public boolean avaliaPos(int posX, int posY){
        posX = posX + largura/2;
        posY = posY + altura/2;
        if (posX<40 || posX>560 || posY<30 || posY>360) {
            return false; //delimitação da fronteira da sala
        }
        if ((posX>=170 && posX<=430) && (posY>=240 && posY<=400)){
            return false; //delimitação região operação máquinas
        }
        if ((posX>=0 && posX<=100) && (posY>=0 && posY<=200)) {
            return false; //delimitaçao regiao caixas livros 
        }
        if ((posX>=500 && posX<=600) && (posY>=0 && posY<=200)) {
            return false; //delimitação região caixas impressoras
        }
        if ((posX>=170 && posX<=430) && (posY>=0 && posY<=90)) {
            return false; //delimitação região caixas com HDs
        }
        if ((posX>=170 && posX<=430) && (posY>=120 && posY<=200)){
            return false; //delimitação região caixas com HDs
        }
        return true;
    }
}
Fonte: elaborado pelo autor.

Ao executar o Código 4.6, uma tela semelhante à Figura 4.6 deverá ser mostrada. Repare que conseguimos reproduzir um simulador bem parecido com o construído utilizando a ferramenta Greenfoot mostrada na seção 3 da unidade 1.

Figura 4.6 | Interface gráfica do simulador de robótica
A figura ilustra uma interface que simula um robô. Na imagem da janela há os botões fechar, minimizar, maximizar e o título da janela: Simulador de Robótica. Dentro da janela há um espaço na lateral superior esquerda com as figuras de três caixas abertas, e os textos explicativos: vetor de caixas[ 3] e Regiões Restritas a Navegação do Robô. Na parte superior central há um espaço com três posições com os textos explicativos: Matriz de Caixas [2][3] e Regiões Restritas a Navegação do robô. No centro também há um espaço com três posições com os textos explicativos: Matriz de Caixas [2][3] e Regiões Restritas a Navegação do robô. Na lateral superior direita há um espaço com três caixas fechadas, com os textos explicativos: vetor de caixas[ 3] e Regiões Restritas a Navegação do Robô. Na parte inferior esquerda há um espaço com o texto R-ATM. Na parte inferior central há um espaço vazio com o contorno pontilhado com o texto explicativo Regiões restritas a navegação do robô. Na parte inferior direita há um espaço com o texto Depósito. Há também um robô no lado direito, virado para o lado direito, posicionado entre espaço da parte superior central e o espaço ao centro.
Fonte: elaborada pelo autor.
Bons estudos!

AVALIE ESTE MATERIAL

OBRIGADO PELO SEU FEEDBACK!