Nessa segunda parte do tutorial estarei aplicando o que foi visto anteriormente para criar um mapa feito de cubos automaticamente. A ideia é como forma de estudo recriar o simulador de robótica autônoma, utilizando os conceitos aprendidos, o simulador pode ser visto no blog ALGC Pesquisa, sua versão original foi feita no Unity 3D na linguagem C#.
A ideia é básica, utilizando os conceitos e comandos aprendidos na primeira parte, criar um algoritmo que crie automaticamente um mapa feito de cubos, de modo que cada vez que o programa rodar, um mapa diferente será criado.
O mapa possuirá um solo que será da cor vermelha, possuirá paredes da cor preta que circulam o mapa e estão espalhadas pelo mapa, e por fim possuirá pedras cinzas, pedras azuis e espaços vazios.
1. Para isso um algoritmos simples seria:
//variáveis
mapa [20][20] //vetor mapa de tamanho 20 por 20
gerador Random //Random para gerar números automaticamente
repita x 20 vezes
repita z 20 vezes
gerar numero de 0 a 3
se posição x for igual a 0 ou posição z for igual a 0 ou posição x for igual a 19 ou posição z for igual a 19
gerar uma parede na posição x, 1, z
senão, se numero gerado for igual 1
gerar uma parede na posição x, 1, z
senão, se numero gerado for igual 2
gerar uma pedra cinza na posição x, 1, z
senão, se numero gerado for igual 3
gerar uma pedra azul na posição x, 1, z
senão
Não gerar nada
2. O código final foi o seguinte:
package geracaomapa;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.Vector3f;
import com.jme3.renderer.RenderManager;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import java.util.Random;
/**
* Geração automatica de mapas
* @author carolhcs
*/
public class mapa extends SimpleApplication {
public static void main(String[] args) {
mapa app = new mapa();
app.start();
}
@Override
public void simpleInitApp() {
gerarSolo(10,0.5f,10);
int m[][] = new int[20][20];
Random gerador = new Random();
for (int aux = 0; aux < 20; aux++){
for (int auz = 0; auz < 20; auz++){
int gerado = gerador.nextInt(4);
if(aux == 0 || auz == 0 || aux == 19 || auz == 19){
gerarParede(aux, 1, auz);
} else if (gerado == 1){
gerarParede(aux, 1, auz);
} else if (gerado == 2){
gerarPedra01(aux, 1, auz);
} else if (gerado == 3){
gerarPedra02(aux, 1, auz);
} else {
//--- Posição Vazia
}
}
}
}
public void gerarSolo(float x, float y, float z){
Box b = new Box(10, 0.2f, 10);
Geometry geom = new Geometry("Box", b);
geom.setLocalTranslation(new Vector3f(x,y,z));
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
public void gerarParede(int x, int y, int z){
Box b = new Box(0.5f, 0.5f, 0.5f);
Geometry geom = new Geometry("Box", b);
geom.setLocalTranslation(new Vector3f(x,y,z));
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Black);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
public void gerarPedra01(int x, int y, int z){
Box b = new Box(0.2f, 0.5f, 0.2f);
Geometry geom = new Geometry("Box", b);
geom.setLocalTranslation(new Vector3f(x,y,z));
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Gray);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
public void gerarPedra02(int x, int y, int z){
Box b = new Box(0.2f, 0.5f, 0.2f);
Geometry geom = new Geometry("Box", b);
geom.setLocalTranslation(new Vector3f(x,y,z));
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
}
//Matriz inteira de tamanho 20 por 20
int m[][] = new int[20][20];
//Instanciando e utilizando o Random para gerar números aleatórios
Random gerador = new Random();
int gerado = gerador.nextInt(4);
//Estrutura de repetição
for (int aux = 0; aux < 20; aux++){}
//Estrutura condicional
if(aux == 0 || auz == 0 || aux == 19 || auz == 19){
} else if (gerado == 1){
} else {}
//Define a posição X, Y e Z do objeto criado
geom.setLocalTranslation(new Vector3f(x,y,z));
4. Resultado final:
Referencias:
https://algcpesquisa.wordpress.com/2016/05/01/projeto-simulador-de-navegacao-autonoma-com-algoritmos-evolutivos/
https://algcpesquisa.wordpress.com/2016/05/10/um-ambiente-de-simulacao-para-aplicacao-de-algoritmos-evolutivo-em-robos/
https://wiki.jmonkeyengine.org/doku.php/jme3#tutorials_for_beginners
https://wiki.jmonkeyengine.org/doku.php/jme3:beginner:hello_simpleapplication
https://wiki.jmonkeyengine.org/doku.php/jme3:beginner:hello_node
Nenhum comentário:
Postar um comentário