Comentários
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.
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.)
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;
}
}
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.