Meta: Este juego de adivinanza mantiene un marcador y da recompensas.
Vocabulario: run, pick, setpos, seth (setheading), clean, setpensize
to startup
set "question "pos [-200 140]
set "announce "pos [-200 140]
setbg 0
clean
t1, setsh "critter
setpos [-234 26]
conversation
end
to conversation
make "mynumber 1 + random 100
make "score 1
question [¡Hola! ¡Juguemos a las adivinanzas! ¿Cómo te llamas?]
if empty? answer [stop]
make "yourname answer
question (se :yourname [, adivina un número entre 1 y 100.] )
guessing-game
end
to guessing-game
if empty? answer [stop]
if answer > :mynumber [question (se answer [es demasiado alto. ¡Prueba otra vez!] ) make "score :score + 1 ]
if answer < :mynumber [question (se answer [es demasiado bajo. ¡Prueba otra vez!] ) make "score :score + 1 ]
if answer = :mynumber [announce (se "¡Bien, :yourname [! ¡] answer [es el número correcto! Te tomó] :score [intentos adivinar el número.] ) reward stop]
guessing-game
end
to reward
if :score > 10 [stop]
announce (se [Ya que adivinaste el número en sólo] :score [intentos, ¡tienes una recompensa! ¡Me convertiré en una criatura rastrera y me moveré por la página!] )
t1, run pick [spidermove butterflymove wormmove inchwormmove caterpillarmove beemove]
end
to spidermove
setbg 35
t1, setsh "spider
repeat 50 [rt random 360
glide random 150 1]
end
to butterflymove
setbg 102
t1, setsh [butterfly1 butterfly2]
repeat 50 [rt random 360
fd random 30
wait 1]
end
to wormmove
setbg 39
t1, seth 90
setsh [worm1 worm2]
repeat 120 [fd 5 wait 1]
end
to inchwormmove
setbg 72
t1, setpos [100 26]
seth 0
setpensize 50
setc 67
pd fd 350 pu
setsh [inchworm1 inchworm2 inchworm3 inchworm4]
repeat 80 [fd 5 wait 2]
end
to caterpillarmove
setbg 56
t1, seth 90
setsh [caterpillar1 caterpillar2]
repeat 120 [fd 5 wait 1]
end
to beemove
setbg 92
seth 0
setpos [0 50]
setsh [bee1 bee2 bee3]
repeat 70 [rt random 80
fd random 60
wait 1]
end
to Let's_play_again!
startup
end
Notas La recompensa al final del juego consiste en cambiar la posición y figura de la criaturita. Así que necesitamos devolverle su figura y posición normal al inicio de cada nuevo juego.
- Setpos [-234 26] le indica a donde ir. Setpos significa "set position" (fija posición).
Setpos [0 0] es el centro de la página. El primer número le indica cuánto, a la izquierda o derecha, moverse. -234 es un número negativo, así que se mueve bastante hacia la izquierda. (Se mueve 234 pixels hacia la izquierda). El segundo número le indica cuánto, a hacia arriba o abajo, moverse. (Se moverá 26 pixels hacia arriba). Por cierto, tú puedes usar números diferentes.
- Una de las recompensas consiste en dibujar una línea en la página, así que necesitamos una manera de borras esta línea cuando iniciamos un nuevo juego. Clean borra la página sin mover las tortugas.
- Podemos mantener el marcador de cuantos intentos necesita el usuario para adivinar un número entre 1 y 100. Luego podremos anunciar cuántos intentos tomó. Podemos dar una recompensa si el usuario puede adivinar el número en 10 intentos o menos.
- Necesitamos una nueva variable, score (puntaje), para estar al tanto del número intentos. Podemos darle un valor inicial de 1.
- Si el intento es demasiado alto o demasiado bajo, el valor de score se incrementará en 1, usando este comando:
make "score :score + 1
:score es el valor actual de score, y estamos haciendo (make "haz") que score se incremente en 1.
- El procedimiento reward chequea el puntaje. Y si es más que 10, para. Si es 10 o menos, escogerá al azar de una palabra una lista. Estas palabras son los nombres de procedimientos.
Pick dice al computador que escoja una de esas palabras.
Run le dice al computador que ejecute el procedimiento que ha sido escogido.
- Cada uno de los procedimientos en la lista anima una criatura rastrera. Algunos de estos procedimientos indican a la criatura que escoja un rumbo al azar a se mueva una distancia al azar. Por ejemplo, rt random 360 significa: "Gira a la derecha cualquier cantidad desde 0 a 359".
- Queremos asegurarnos que el gusano (worm) se mueva hacia la derecha y no hacia arriba. Pero no sabemos que rumbo tenía esta tortuga antes de convertirse en gusano.
Seth 0 significa: "Sin importar cuál haya sido tu rumbo, ahora apunta directo hacia arriba". Seth 90, significa, "Apunta directo hacia la derecha". La tortuga que usa la figura worm puntará en esa dirección.
- Pd dice al gusano verde que ponga su lápiz abajo (pen down), y pu le dice que lo ponga arriba nuevamente. Necesitamos que baje de lápiz para que dibuje un tallo verde en inchwormmove. Esta línea debe ser gruesa, así que hacemos grueso al lápiz con setpensize 100.
- La abeja aparentará moverse en círculos al azar porque el comando rt random 80 significa que se mantendrá moviéndose un poquito hacia la derecha.
¿Qué pasa si?
¿Qué pasa si sumas 2 a :score después de cada intento?
¿Qué pasa si cambias el número 10 por un número mayor en la primera línea del procedimiento reward?
Desafío
Puedes escribir un nuevo procedimiento e incluir su nombre en el procedimiento guessing-game para que la criaturita escoja entre varios comentarios distintos si el número intentado no es el correcto?
|