Jump to content

gerador de terreno(de mundo)2d


Recommended Posts

Este é meu 1º topico aqui nesta parte...

queria que voces me dessem algumas sugestoes e raciocinio de um gerador de terrenos 2d de um jogo que vou fazer.

Chamasse Earth Dragon e preciso de que o jogo crie zonas de montanhas(relevo), arvores, oceanos, rios, grutas...

se conhecem este jogo, minecraft, é um gerador destes que preciso mas 2d...

só ainda fiz o menu: http://www.youtube.c...so&feature=plcp

e conto com voces para a colaborão do projeto.

Link to comment
Share on other sites

queres automaticamente ou queres ser tu a criar?

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

automaticamente!

tens varias maneiras, crias uma matriz e vais gerando numeros, consoante o numero que gerou escolhes se e' terreno, agua, relva,etc

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Link to comment
Share on other sites

Se quiseres criar um jogo como o terraria é impossível guardares a matriz toda em memória ao mesmo tempo, e se for gerada aleatoriamente, o mapa será um pouco impossível de jogar. Terraria utiliza um algoritmo procedural (http://en.wikipedia.org/wiki/Procedural_generation) para gerar os terrenos. Nao sei exatamente como funciona o do terraria, mas o seguinte pseudolgoritmo devera funcionar para o que tu queres.

Algoritmo A

1 - Geras uma seed aleatória que ajudara na tomada de decisões na geração do mapa.

2 - A coluna (0,Y) será sempre igual, consoante a que deres ao jogo.

3 - Todas as colunas (a, Y) sao geradas consoante as seguintes variáveis:

I) a coluna (a-1, Y) ou consoante a coluna (a+1, Y);

II) a seed;

III) a posição da coluna atual

IV) os blocos que se encontram a coluna atual.

4 - a forma degredar consoante a coluna anterior devera ser feita consoante as alturas a que queres que haja ar, terra, diamantes, etc... E devera ser possível de a partir da coluna(a, Y) gerar (a-1, Y) e vice-versa.

Assim, basicamente usas o algoritmo A para gerares o terreno original, sem nunca ter sido alterado pelo jogador. Depois disso, sempre que o jogador fizer uma alteração no mapa (destruir ou puser um bloco), guardas as alterações num ficheiro que diz basicamente:

(x,y,iddobloco), representando que o bloco(x,y) foi alterado e que agora se encontra um bloco do id descrito na sua posição.

Quando começares a abrir áreas que já foram editadas pelo jogador no jogo, terás de fazer o seguinte:

I)Geras com o algoritmo A a coluna inicial e de seguida fazes as substituições necessárias.

II) tens de manter em memória a coluna inicial para que possa ser gerada a coluna seguinte.

Após conseguires ter o gerador de mapas a fazer o que foi descrito a cima, terás de optimizá-lo para evitar lag. Pelo que me apercebi ao abrir a pasta do minecraft, este faz-lo de duas maneiras: (adaptado para duas dimensões):

1 - Cada alteração das colunas é organizada em ficheiros diferentes para minimizar a pesquisa por edições na coluna atual. Assim, por exemplo, todos as alterações entre as colunas de abcissa 0 e 999 ficariam no ficheiro 0.map, todas as alterações entre as colunas 1000 e 1999 no 1.map, entre -1 e -999 no -0.map, etc.

2 - Os ficheiro encontrasse comprimidos para poupar espaço no disco e sao depois carregados pelo jogo consoante necessário.

3- Quando carregados, sao organizados por ordem de ordenada, seguida de ordem de abcissa, de modo a diminuir a complexidade das pesquisas.

Sei que esta poderá não ser a melhor explicação, mas ao menos orienta-te mais ou menos para a direcção certa.

<Signature goes here>

Link to comment
Share on other sites

Essa matriz de 100x1000 é impossivel de renderizar toda de uma vez ao mesmo tempo, sem utilizares optimizações. Sao 100.000 rectângulos.

Uma forma de a utilizares, seria renderizares apenas os blocos que o jogador pode ver a cada passo do jogo.

Se o mapa todo for apenas essa matriz (que fica bastante pequeno se os quadrados forem do tamanho dos do terraria), então podes gerar apenas o terreno consoante o método que o pmg deu, e depois guardares todos num ficheiro, que fica com um tamanho de poucos mb (menos de 1mb).

Se quiseres um mapa maior, então nao podes guardares o mapa todo num ficheiro, e tens de arranjar um metodo como o que eu tentei descrever, ou utilizares o modo de gerar mapas do pmg, em combinação com seeds que vais guardando em ficheiros.

<Signature goes here>

Link to comment
Share on other sites

Depende o mapa total e de 100x1000 ou nao? Se for então quando o jogo inicia geras o mapa/carregas de um ficheiro e manténs o mapa em memória. Depois, gravas de volta para o ficheiro sempre que o jogador puser em pausa ou jogo, ou sempre que o jogador sair do jogo.

<Signature goes here>

Link to comment
Share on other sites

Podes gerar o terreno e a(s) caverna(s) em duas fases distintas.

Por exemplo metes o terreno com altitudes entre -100 e 8000 e a(s) caverna(s) em altitudes entre -200 e -1000.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Se te chega um "buraco" (ou mais) para a caverna, podes fazer como o mapa do Paul Martz, mas em vez de cada valor calculado representar uma altura, representa buraco ou rocha consoante esteja acima ou abaizo dum valor. Ao variares este valor varias o tamanho do buraco (e a quantidade de buracos).

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.