Laberinto

De Gleducar, http://www.gleducar.org.ar

Para usar este programa en MSWlogo, solo hay que copiar el siguiente texto y pegarlo en un archivo de texto plano. El nombre sugerido para ese archivo es laberinto.lgo

para crea.laberinto
ocultatortuga 
crea.paredes
subelapiz ponpos [110 90] ponpixel [255 255 255]
derumba.paredes visita.posicion [-110 -90] [-90 -90]
subelapiz ponpos [110 90] ponpixel [255 255 0]
fin

para crea.paredes
borrapantalla
haz "a secuencianumerica -100 100 11
haz "b1 ejecuta [(entremezcla "lista ? [-100 100])] (lista :a)
haz "b2 mezcla [ejecuta [lista ?2 ?1] ?] :b1
haz "c frase :b1 :b2
mientras [no vacio? :c] [
subelapiz ponpos elemento 1 :c
bl ponpos elemento 2 :c
haz "c mp mp :c
]

poncolorrelleno [255 255 0]
subelapiz ponpos [-110 -110] rellena
fin

para derumba.paredes :pos [ :pp mezcla [(mezcla "suma :pos ?)] baraja [[-20 0][0 -20][20 0][0 20]] ]
si vacio? :pp [alto]
si posicion.valida? primero :pp [derumba.paredes visita.posicion :pos primero :pp]
(derumba.paredes :pos mp :pp)
fin

para posicion.valida? :pos
dev y (no posicion.visitada? :pos) (posicion.disponible? :pos)
fin

para posicion.visitada? :pos
subelapiz ponpos :pos
dev [255 0 0] = pixel
fin

para posicion.disponible? :pos
subelapiz ponpos :pos
dev [255 255 255] = pixel
fin

para visita.posicion :pos :np
subelapiz ponpos :np
ponpixel [255 0 0]
sisino (primero :pos) = (primero :np) [
 pony ((ultimo :pos) + ultimo :np) / 2
 ponx (primero :pos) - 10
 inversolapiz ponx (primero :pos) + 10
] [
 ponx ((primero :pos) + primero :np) / 2
 pony (ultimo :pos) - 10
 inversolapiz pony (ultimo :pos) + 10
]
dev :np
fin

para baraja :l
si vacio? :l [dev []]

local "e
haz "e SacaAlAzar :l
dev pp :e baraja quita :e :l
fin

;=======================

para posicion.inicial
subelapiz ponpos [-90 -90]
ponrumbo 0
muestratortuga 
fin

para adentro?
dev no pixel = [255 255 0]
fin

para giro.der
; espera 20
giraderecha 90
fin

haz "REDEFINIDO? "verdadero
borra "paso
haz "REDEFINIDO? "falso

para paso
si no pared? [
 espera 5
 avanza 20
]
fin

para pared?
subelapiz av 10 
haz "x [0 0 0] = pixel 
re 10
dev :x
fin

;=======================

PARA GIRO.IZQ
  GIRO.DER
  GIRO.DER
  GIRO.DER
FIN GIRO.IZQ

PARA TANTEAR
  GIRO.DER
  MIENTRAS [PARED?] [GIRO.IZQ]
FIN

PARA SOLUCION.UNIVERSAL
  CREA.LABERINTO
  POSICION.INICIAL

  MIENTRAS [ADENTRO?] [TANTEAR PASO]
FIN

;=======================
Copyright © 2002-2010 Asociación Civil Gleducar
Todo los contenidos de este sitio se encuentran bajo una licencia libre del tipo Copyleft
Este sitio ha sido desarrollado usando Software Libre y respeta los estándares web.
Además ha sido diseñado para verse correctamente usando cualquier navegador, en cualquier resolución de pantalla.