Entrar
Últimos assuntos
» player não consegue andarpor lovn7 Qui 21 Nov 2024, 13:33
» É possível fazer istó no game maker
por William Lima Qui 21 Nov 2024, 10:56
» Rio Rise - novo launcher do Gta San Andreas SAMP Brasil
por Lua Sáb 16 Nov 2024, 20:22
» (Resolvido) Cenario longo x Texture Pages
por josuedemoraes Sáb 16 Nov 2024, 15:31
» Kids' band
por Adilson Lucindo Santos Sex 15 Nov 2024, 12:23
» (RESOLVIDO) Engasgos-Troca de Sprites/animações
por josuedemoraes Ter 12 Nov 2024, 01:49
» Block Room - DEMO
por Joton Qua 06 Nov 2024, 22:58
» Game Infinito vertical (subindo)
por macmilam Sáb 26 Out 2024, 12:36
» Retorno da GMBR!!!
por Dancity Ter 22 Out 2024, 16:36
» Máquina de estados
por aminaro Qui 10 Out 2024, 13:33
» como faço pra um objeto colidir com o outro e diminuir a vida do player ?
por josuedemoraes Qui 03 Out 2024, 16:51
» RESOLVIDO: Colisão com objetos moveis
por josuedemoraes Qua 02 Out 2024, 20:28
» Crypt of the Blood Moon
por divin sphere Qua 11 Set 2024, 18:18
» como fazer um objeto seguir?
por divin sphere Dom 18 Ago 2024, 18:08
» Procuro de alguém para Modelar/Texturizar/Animar objetos 3D
por un00brn Dom 11 Ago 2024, 11:10
» Destruição de cenário (estilo DD Tank)
por CoronelZeg Sex 09 Ago 2024, 17:16
» RESOLVIDO-Como destruir uma instancia especifica de um objeto
por josuedemoraes Ter 23 Jul 2024, 00:40
» Automatizar a coleta de id
por GabrielXavier Seg 22 Jul 2024, 18:01
» Preciso de ajuda para concluir um pequeno projeto
por lmoura Qui 27 Jun 2024, 15:45
» ANGULO ACOMPANHAR O OBJETO
por Klinton Rodrigues Qui 27 Jun 2024, 08:34
» Musica reinicia quando sala reinicia
por GabrielXavier Ter 18 Jun 2024, 07:28
» como fazer uma copia de gd
por generico_cube Sex 14 Jun 2024, 15:48
» Square Adventure
por guilherme551 Ter 11 Jun 2024, 09:54
» como posso definir limite de uma variavel
por GabrielXavier Sex 07 Jun 2024, 14:14
» [Resolvido] Dúvida, colisão única de objeto
por vdm842 Sex 24 maio 2024, 09:50
Criação de caminho em sala isoladas
3 participantes
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
Criação de caminho em sala isoladas
Olá pessoal, estou precisando de ajuda para melhorar um código que fiz recentemente através de um site de um gringo(link do post: https://refreshertowel.games/2021/01/19/procedural-generation-in-gms-3-cellular-automata/). Ele ensina a fazer um mapa procedural, mas eu gostaria de melhorar ele, vou colocar uma imagem para melhor explicação:
como podem ver, esse mapa foi criado e existem algumas salas isoladas que não cotem saídas, e minha ideia era conectar essas salas com pequenos caminhos e corredores mas eu não sei como posso fazer isso ou por onde começar e por isso vim aqui pedir ajuda a como posso fazer isso, quero deixa claro que estou usando um sistema de matriz para posicionar os blocos no mapa
fico grato a qualquer ajuda ou ideia
como podem ver, esse mapa foi criado e existem algumas salas isoladas que não cotem saídas, e minha ideia era conectar essas salas com pequenos caminhos e corredores mas eu não sei como posso fazer isso ou por onde começar e por isso vim aqui pedir ajuda a como posso fazer isso, quero deixa claro que estou usando um sistema de matriz para posicionar os blocos no mapa
fico grato a qualquer ajuda ou ideia
PaladinoMaluko- Data de inscrição : 08/01/2021
Reputação : 0
Número de Mensagens : 15
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: Criação de caminho em sala isoladas
Opa, sobre geração procedural, tem um link bem útil que o @RodrigoSantiago um dia me passou:
https://medium.com/@Scriptie/3d-maze-generation-in-unity-ec36415b659a
E nesse tópico, eu achei referencia pra esse muito bacana que é cheio de algoritmos para labirinto:
https://www.jamisbuck.org/mazes/
https://medium.com/@Scriptie/3d-maze-generation-in-unity-ec36415b659a
E nesse tópico, eu achei referencia pra esse muito bacana que é cheio de algoritmos para labirinto:
https://www.jamisbuck.org/mazes/
Use geração semi-procedural
Cara, eu criei um sistema de geração semi-procedural de código super simples, no qual vc só precisa de uma ou duas variáveis randômicas para sortear as peças e alguns objetos e sprites, com alguns frames dentro.
Comecei os testes em 2009, no flash, e aperfeiçoei no GM, em 2016.
Eis um video demonstrativo da bagaça em ação, no flash:
Aqui eis como está hoje o método, no GM:
Explicando detalhes
https://gamejolt.com/games/navinha-little-ship/192960
Em miúdos, funciona assim:
No evento CREATE, vc seta uma variável que verificará a fase do game, aqui chamada de "x"; Crie também uma variável que definirá o tipo de mapa, aqui chamada de "e"; Uma terceira variável sorteará um frame específico dentro de um sprite específico, a ser exibido na tela. Essas três variávies serão responsáveis por sortear as imagens que formarão o mapa.
No evento STEP, o algoritmo fica então assim:
if(stage is number(x)){
environment_group=(e)
if(environment==(e)){
piece_of_map=(random(40);
}
}
Onde:
x = o número de fases, entre 1 a 40 (ou o número de estágios secretos) no caso esse aqui tem 40 fases, use o número de fases do seu projeto;
e = o número do grupo de ambiente. Organizei em alguns grupos, como segue:
1 = oceano com ilhas
2 = oceano sem ilhas
3 = oceano gelado com ilhas cobertas de neve
4 = Antártida
5 = deserto com dunas
6 = deserto com montanhas rochosas
7 = pântano
8 = lava
9 = selva
10 = lua/espaço
Cada grupo de ambiente é um sprite composto por 40 frames, daí a numeração de 40 no algoritmo (mas vc pode usar o nº que quiser, ok?).
No início do jogo, a variável (e) é pré-definida pelo autor, pois o estágio mostra suas propriedades ao jogador, quando o estágio é selecionado.
Se o mapa mostra a África e o jogador o seleciona, o programa atribui a (e) o valor 5, 6 ou 9, dependendo da região do mapa. No entanto, a variável para pedaço do mapa é escolhida aleatoriamente pela CPU e seu valor é obrigatório entre 1 e 40.
Se você tentar usar este sistema, você pode alterar o valor das peças, não é obrigatório você usar 40. Eu uso esse número porque é o suficiente para mim, 40 peças diferentes multiplicadas por 10 cenários diferentes multiplicados por 6 sprites no jogo geram também muitos cenários dinâmicos, é muito massa vê-lo funcionando!
Deixei o game rodando por duas horas, e não repetiu NENHUM cenário exatamente como mostrado da primeira vez. O programa combina as partes já motandas aleatoriamente em outras novas, também aleatórias. Confiram:
Comecei os testes em 2009, no flash, e aperfeiçoei no GM, em 2016.
Eis um video demonstrativo da bagaça em ação, no flash:
Aqui eis como está hoje o método, no GM:
Explicando detalhes
https://gamejolt.com/games/navinha-little-ship/192960
Em miúdos, funciona assim:
No evento CREATE, vc seta uma variável que verificará a fase do game, aqui chamada de "x"; Crie também uma variável que definirá o tipo de mapa, aqui chamada de "e"; Uma terceira variável sorteará um frame específico dentro de um sprite específico, a ser exibido na tela. Essas três variávies serão responsáveis por sortear as imagens que formarão o mapa.
No evento STEP, o algoritmo fica então assim:
if(stage is number(x)){
environment_group=(e)
if(environment==(e)){
piece_of_map=(random(40);
}
}
Onde:
x = o número de fases, entre 1 a 40 (ou o número de estágios secretos) no caso esse aqui tem 40 fases, use o número de fases do seu projeto;
e = o número do grupo de ambiente. Organizei em alguns grupos, como segue:
1 = oceano com ilhas
2 = oceano sem ilhas
3 = oceano gelado com ilhas cobertas de neve
4 = Antártida
5 = deserto com dunas
6 = deserto com montanhas rochosas
7 = pântano
8 = lava
9 = selva
10 = lua/espaço
Cada grupo de ambiente é um sprite composto por 40 frames, daí a numeração de 40 no algoritmo (mas vc pode usar o nº que quiser, ok?).
No início do jogo, a variável (e) é pré-definida pelo autor, pois o estágio mostra suas propriedades ao jogador, quando o estágio é selecionado.
Se o mapa mostra a África e o jogador o seleciona, o programa atribui a (e) o valor 5, 6 ou 9, dependendo da região do mapa. No entanto, a variável para pedaço do mapa é escolhida aleatoriamente pela CPU e seu valor é obrigatório entre 1 e 40.
Se você tentar usar este sistema, você pode alterar o valor das peças, não é obrigatório você usar 40. Eu uso esse número porque é o suficiente para mim, 40 peças diferentes multiplicadas por 10 cenários diferentes multiplicados por 6 sprites no jogo geram também muitos cenários dinâmicos, é muito massa vê-lo funcionando!
Deixei o game rodando por duas horas, e não repetiu NENHUM cenário exatamente como mostrado da primeira vez. O programa combina as partes já motandas aleatoriamente em outras novas, também aleatórias. Confiram:
tiaoferreira- Data de inscrição : 09/11/2013
Reputação : 0
Número de Mensagens : 3
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Use geração semi-procedural (parte 2)
Esse exemplo aí eu usei num jogo de nave com scroll vertical. Para fazer jogos de tela fixa é ainda melhor, é só eliminar as linhas do scroll e setar a "aleatoriedade" de montagem do mapa nos eixos X e Y (no exemplo atual muda só o X).
Resumindo:
Quando o jogo começa, o código sorteia o número de um frame, dentro de um sprite; Feito isso, sorteia a posição no eixo X em que esse sprite deverá aparecer. s sprites vão descendo a tela e quando chegam ao limite, são eliminados e ressurgem na linha de origem, sorteando-se então um novo sprite. No caso do exemplo em tela, que é de scroll vertical, todos os sprites que compõem o mapa surgem na mesma linha, fora da tela e vão descendo. para sua sala fixa, elimine o scroll e sorteie aleatoriamente os eixos X e Y.
O código é super simples, acho que não dá dez linhas, tanto no GM, quanto no flash, e os resultados são incríveis. Estou tentando adaptar pro Mega Drive e pro MSX.
Resumindo:
Quando o jogo começa, o código sorteia o número de um frame, dentro de um sprite; Feito isso, sorteia a posição no eixo X em que esse sprite deverá aparecer. s sprites vão descendo a tela e quando chegam ao limite, são eliminados e ressurgem na linha de origem, sorteando-se então um novo sprite. No caso do exemplo em tela, que é de scroll vertical, todos os sprites que compõem o mapa surgem na mesma linha, fora da tela e vão descendo. para sua sala fixa, elimine o scroll e sorteie aleatoriamente os eixos X e Y.
O código é super simples, acho que não dá dez linhas, tanto no GM, quanto no flash, e os resultados são incríveis. Estou tentando adaptar pro Mega Drive e pro MSX.
tiaoferreira- Data de inscrição : 09/11/2013
Reputação : 0
Número de Mensagens : 3
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Tópicos semelhantes
» ParamnésiA "A sala" [terror]
» objeto andar por um caminho
» botão de restart level n pega
» Naruto 'o caminho de um ninja'
» Aumentado o tamanho da sala no 3D
» objeto andar por um caminho
» botão de restart level n pega
» Naruto 'o caminho de um ninja'
» Aumentado o tamanho da sala no 3D
GMBR :: Ensine & Aprenda :: Perguntas e Respostas :: Game Maker :: GMS:Windows
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos