Mapa aleatorio

Consulte acerca de programas, técnicas, algoritmos etc.

Mapa aleatorio

Notapor Manoloide » Sab Oct 15, 2011 6:02 am

Hola me presento, mi nombre es manoloide y empece hace tres días con python y pygame... pero estoy queriendo armar un generador de mapas aleatorios, la verdad hice una brusqueda media pobre por internet, pero tal vez alguno me tire alguna idea, o tal vez a alguien le sirve lo que hice hasta ahora. aunque no este contento con el resultado creo que voy encaminado. saludos y gracias

hay una parte comentada, que es con la que había empezado.

import pygame
import random

pygame.init()
pantalla = pygame.display.set_mode([400,400])
pygame.display.set_caption("Ok :)")
reloj1=pygame.time.Clock()


nada=pygame.image.load('img/nada.png').convert_alpha()
piedra=pygame.image.load('img/piedra.png').convert_alpha()
piedrao=pygame.image.load('img/piedrao.png').convert_alpha()
suelo=pygame.image.load("img/suelo.png").convert_alpha()

imagenes=[suelo,piedra,piedrao,nada]
mapa= [ [ 0 for i in range(40) ] for j in range(40) ]

#mapa totalmente aleatorio
for d1 in range(40):
for d2 in range(40):
mapa[d1][d2]= random.randrange(0,4)
#se fija cual es el que mas lo rodea y lo convierte
for d1 in range(40):
for d2 in range(40):
contador=[0]*4
for i in range(-1,2):
for j in range(-1,2):
if (-1<(d1+i)<40)and(-1<(d2+j)<40):
pito = mapa[d1+i][d2+j]
contador[pito]+=1
max = -1
for x in range(4):
if (contador[x]>max):
max = contador[x]
num = x
mapa[d1][d2]=num


'''
for d1 in range(40):
for d2 in range(40):
mapa[d1][d2]= 2
for x in range(200):
mapa[random.randrange(0,40)][random.randrange(0,40)]= 1
'''

#se fija si dos casilleros mas asi la dreche y izquierda son piedra y sin son convierte al sieguien
'''for d1 in range(40):
for d2 in range(40):
if mapa[d1][d2]==1:
if (d1 <38)and(mapa[d1+2][d2]==1):
mapa[d1+1][d2]==1
if (d2 <38)and(mapa[d1][d2+2]==1):
mapa[d1][d2+1]==1'''


def dibujar(sup,mapa,img):
for i in range(40):
for j in range(40):
sup.blit(img[mapa[i][j]],(i*10,j*10))

def main():
salir=False

while salir!=True:#loop principal
for event in pygame.event.get():
if event.type == pygame.QUIT:
salir=True
reloj1.tick(20)

dibujar(pantalla,mapa,imagenes)
pygame.display.update()

pygame.quit()


main()
Manoloide
 
Mensajes: 1
Registrado: Sab Oct 15, 2011 2:53 am

Re: Mapa aleatorio

Notapor Mightygaver » Sab Oct 15, 2011 10:24 am

No tengo muy claro el propósito de tu generador de mapas aleatorios, pero supondré que la idea es general mapas al estilo del generador del legendario Age of Empires, es decir, generar mapas medianamente realistas donde, por ejemplo, los árboles llenan áreas parecidas a un bosque, hay montones de piedra unidos, cambios en el suelo uniformes, etc etc.

Una idea que yo creo que puede funcionar (con un resultado seguro que peor que el del ejemplo) es tomar una celda de tu mapa aleatoria. De ella, eliges uno de tus terrenos de manera aleatoria. A partir de ahí te expandes, también de manera aleatoria, en las dimensiones x e y. Hay muchos algoritmos que utilizan técnicas parecidas a esta y se aplican a todo tipo de ámbitos, por lo que supongo que el resultado puede que sea bueno.

    Para ser un poco más concreto, trataré de explicarlo con pseudocódigo:

    Tomar una celda aleatoria del mapa.

    Tomar un valor aleatorio de amplitud en la dimensión x (anchura) y otro para la y (altitud).

    Para cada una de las filas, se toman valores aleatorios de variación, oscilando entre 2 y -2 u otros valores umbral alterando la altitud, o incluso
    la anchura, para que no quede todo con cuadrados poco realistas.


En su día yo intenté también implementar un generador de mapas aleatorios, pero la verdad que no tuve mucha suerte XD.

Bueno, un saludo y suerte, espero que la idea te ayude aunque no sea tan concreta como un trozo de código.
Mightygaver
 
Mensajes: 69
Registrado: Vie Ago 27, 2010 5:46 pm
Ubicación: Vila-real, España


Volver a General

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 1 invitado

cron