[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