Inicio     |     Sobre     |     GitHub     |     Games     |     Contato                        

sábado, 14 de maio de 2016

[Guia] jMonkey Básico 02: Criação automática de mapas com cubos


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);
    }
}

3. Os comandos extras não usados anteriormente foram:

//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