[Solar-cdeducacion] laberinto en MSWLogo de MEC
Daniel Ajoy
dajoy en openworldlearning.org
Mie Oct 6 01:47:53 CEST 2004
Aquí está el código para el laberinto. Todas las líneas
deben empezar en la columna 2. Si no lo hacen es porque
hubo "wrapping".
:)
Daniel
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 afuera?
dev 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 PRINCIPAL
CREA.LABERINTO
POSICION.INICIAL
MIENTRAS [NO AFUERA?] [
GIRO.DER
MIENTRAS [PARED?] [GIRO.IZQ]
PASO
]
FIN
;=======================
Más información sobre la lista de distribución Solar-cdeducacion