Saltar al contenido principal

2. Treasure Hunt

Ver este tutorial en Google Docs external link

En esta actividad, programaras un juego en el que el jugador usa las teclas de flecha para controlar un personaje, moviéndose y "recolectando" tesoros al chocar con ellos para aumentar la puntuación.

Objetivos de Aprendizaje

  • Crear un juego de búsqueda de tesoros en StarLogo Nova
  • Aprender a iniciar un proyecto desde cero
  • Explorar nuevos comandos sin miedo a romper algo
  • Aprender conceptos esenciales que se aplican a cada juego de StarLogo Nova

Nuevos Términos

BreedsSocketProcedure

Descripción del Modelo

  • Tipos de agentes ("Breeds")
    • Player
    • Treasure
    • Obstacle
  • Comportamientos
    • El teclado controla el movimiento del agente
  • Interacciones
    • Cuando un Player colisiona con un Treasure o un Obstacle, elimina al agente
  • Datos
    • Una caja de datos "lleva la puntuación" -- aumenta cuando se recolecta un tesoro y disminuye cuando se recolecta un obstáculo

Parte 1: Crear y Renombrar Breeds

En esta sección, renombraremos un breed existente y crearemos dos nuevos breeds (treasure y obstacles).

1. Renombrar un Breed Existente

Turtle tab with rename optionRename breed dropdownBreed renamed to Player
  • Haz clic en la pestaña "Turtle" en la parte superior del área de código, y luego haz clic en el triángulo de la izquierda.
  • Haz clic en el botón "Rename breed".
  • Escribe "Player" en el cuadro de texto y luego haz clic fuera para completar el cambio de nombre.

2. Crear un Nuevo Breed

Add Breed buttonAdding Treasure breedAdding Obstacle breed
  • Haz clic en el botón "Add Breed" para agregar un nuevo breed (tipo de agente).
  • Nombra tu nuevo breed "Treasure".
  • Repite este paso para crear un nuevo breed llamado "Obstacle".
info

Un breed es un tipo o categoría de agentes. Todos los agentes de un breed específico comparten los mismos rasgos y siguen las mismas instrucciones.

¡Verifica tu Progreso!

Asegúrate de tener las seis pestañas que se muestran a continuación en tu Workspace:

All six tabs

Parte 2: Setup - Creando el Treasure

En esta sección, crearás Treasure y les darás rasgos iniciales cuando se haga clic en el botón "setup".

1. Responder a los Clics de Botones

When setup pushed block
  • Haz clic en la pestaña "The World" para mostrar la página de "The World".
  • Abre el cajón Interface.
  • Arrastra un bloque "when ___ pushed" desde el cajón a la página.
  • Selecciona "setup" del menú desplegable.
    • La opción "setup" se refiere al botón "setup" que se encuentra en SpaceLand.

2. Crear 25 Agentes Treasure

Create 25 Treasure code
  • Abre el cajón Agents.
  • Para crear 25 agentes Treasure en SpaceLand:
    • Arrastra el bloque "create___each do" debajo del bloque "when [setup] pushed" y conéctalo.
    • Escribe el número "25" en el socket vacío del bloque "create___each do".
    • Selecciona "Treasure" del menú desplegable en el bloque.
info

Cada uno de los agentes recién creados sigue inmediatamente las instrucciones que especifiques en la sección "do" del bloque "create___do".

3. Cambiar los Rasgos del Agente Treasure

Traits drawerSet traits code
  • Abre el cajón Traits.
  • Para establecer el color del tesoro:
    • Arrastra el bloque "set my ___ to ___" y conéctalo dentro del bloque "create___each do"
    • Selecciona "color" del menú desplegable en el bloque.
    • Arrastra el bloque "color:___" y colócalo en el socket vacío del bloque "set my___ to ___".
    • Elige el color "random" del menú desplegable del bloque "color ___".
  • Usa un proceso similar para cambiar la forma del agente. Usa el bloque "built-in shape" para seleccionar una forma para el agente.
info

El bloque "set my ___ to ___" se usa para establecer o cambiar los rasgos de los agentes. El rasgo se elige del menú desplegable e incluye color, forma, tamaño, etc. El bloque "color:___" representa un color específico elegido del menú desplegable. Al especificar colores debes usar uno de los bloques "color". Los agentes pueden no entender palabras escritas como red, purple, yellow, etc.

4. Dispersar los Agentes

Scatter code
  • Abre el cajón Agents.
  • Para aleatorizar la posición del tesoro en SpaceLand:
    • Arrastra el bloque "scatter" y colócalo debajo de los bloques "set my___ to___", aún dentro del bloque "create___each do".
info

El bloque "Scatter" permite que cada uno de los 25 Treasure establezca su ubicación en una posición aleatoria en SpaceLand.

¡Verifica tu Progreso!

Haz clic en "Run Code", luego cada vez que hagas clic en "setup" deberías ver 25 agentes Treasure más con colores aleatorios y la forma que seleccionaste.

Scattered treasure agents

Parte 3: Setup - Creando los Agentes Obstacle

En esta sección, crearás Obstacles y editarás sus rasgos.

¡Practica lo que Has Aprendido!

Usa las habilidades y conocimientos que aprendiste en la Parte 2 para crear nuevos agentes Obstacle en SpaceLand: En el mismo bloque "When [setup] pushed" donde creaste el Treasure, crea 15 agentes Obstacle cuyo color sea negro y forma sea una pirámide, y dispérsalos.

Mostrar Solución
Full obstacle solution code

¡Verifica tu Progreso!

Haz clic en "Run Code", y luego cada vez que hagas clic en "setup" deberías ver 25 agentes Treasure más y 15 agentes Obstacle más.


Parte 4: Setup - Creando el Agente Player

En esta sección, crearás el Player y editarás sus rasgos.

¡Practica lo que Has Aprendido!

Usa las habilidades y conocimientos que aprendiste en la Parte 2 para crear un nuevo agente Player en SpaceLand: En el mismo bloque "When [setup] pushed" donde creaste el Treasure y los Obstacles, crea 1 agente Player cuyo color sea blanco, forma sea una esfera y tamaño sea 5 (pista: escribe el número de tamaño en el socket vacío del bloque "set my_ to _").

Mostrar Solución
Full player solution code

¡Verifica tu Progreso!

Haz clic en "Run Code", y luego cada vez que hagas clic en "setup" deberías ver 25 agentes Treasure, 15 agentes Obstacle y un Player.

All agents in SpaceLand

Parte 5: Setup - Editando los Widgets de Botones

En esta sección, renombrarás los botones de widget existentes.

1. Renombrar un Widget de Botón

Rename forever widget
  • Haz clic en el botón "Edit Interface" en la barra encima de SpaceLand.
  • Haz clic en el botón "forever" y escribe "play game!" en la casilla etiquetada "Name"
  • Haz clic en la "(X)"

2. Renombrar una Caja de Datos

Rename data boxLock Interface button
  • Asegúrate de que todavía estés en el modo "Edit Interface"
  • Haz clic en la caja de datos "data" y escribe "Score" en la casilla etiquetada "Name"
  • Haz clic en el botón "Lock Interface" para salir del modo "edit interface"

¡Verifica tu Progreso!

Deberías ver tres widgets en SpaceLand -- "setup", "play game!" y "Score"

Three widgets

Parte 6: Setup - Reiniciar el Modelo

Es posible que hayas notado que cada vez que haces clic en "setup", se agregan más y más agentes al juego. En cambio, queremos que el número de agentes comience de nuevo cada vez que hacemos clic en "setup". En esta sección agregarás código para que cada vez que hagas clic en el botón "setup", SpaceLand se reinicie.

1. Eliminar Agentes Antiguos

Delete old agents code
  • Asegúrate de que todavía estés en la pestaña "The World"
  • Abre el cajón Agents
  • Para asegurarte de que todos los agentes antiguos se eliminen cuando se presione "setup":
    • Arrastra el bloque "delete everyone" dentro del bloque "when ___ pushed" pero antes del bloque "create ___ do"

2. Reiniciar la Caja de Datos

Reset data box code
  • Abre el cajón Interface
  • Para que la caja de datos se reinicie a 0 cuando se presione "setup":
    • Arrastra el bloque "set _ data box to _" dentro del bloque "when setup pushed"
    • Selecciona "Score" del menú desplegable
    • Escribe 0 en el socket vacío

¡Verifica tu Progreso!

Haz clic en "Run Code", luego cada vez que hagas clic en "setup" deberías ver solo 25 Treasure, 15 Obstacle y 1 Player, porque los anteriores fueron eliminados antes de agregar los nuevos.

Reset check

Parte 7: Cambiar la Vista de Cámara

En esta sección, cambiarás la vista de cámara para seguir al agente Player.

Hacer que el Agente Tome la Cámara

Take camera code
  • Abre el cajón Agents.
  • Para cambiar la vista de cámara al punto de vista del agente Player:
    • Arrastra el bloque "take camera" dentro del bloque "create___each do" con el agente Player seleccionado.

¡Verifica tu Progreso!

Haz clic en "Run Code" y "setup". La vista de cámara debería ser desde la perspectiva del agente Player.

Camera POV result

Parte 8: Controles de Teclado

Has creado tus agentes, pero tu juego no hace nada... todavía. En esta sección, programarás un procedure que conecte el teclado con el movimiento del agente.

1. Crear un Procedure

Create procedure
  • Navega a la página de Player -- cualquier código aquí solo es seguido por el Player.
  • Abre el cajón Procedures
  • Arrastra el bloque "procedure: _" a la página de Player
  • Renombra el procedure a "Keyboard Controls"
info

Un procedure le dice a un agente cómo hacer algo. Toma un conjunto de código y le da un nombre, lo que hace que tu programa sea más fácil de entender. Los procedures nos permiten "agrupar" nuestro conocimiento al ignorar algunos de los detalles y enfocarnos en las ideas importantes.

2. Programar el Procedure

Program procedure
  • Abre el cajón Logic
  • Arrastra el bloque "if _" y colócalo dentro del bloque "procedure:"
  • Abre el cajón Keyboard
  • Arrastra el bloque "_ key held?" y colócalo en el socket vacío del bloque "if _"
  • Selecciona "up arrow" del menú desplegable
  • Abre el cajón Movement
  • Arrastra el bloque "forward" dentro y conéctalo al bloque "if_"
  • Escribe "1" en el socket vacío -- esto significa que mientras se mantenga presionada la flecha hacia arriba, el agente avanzará 1 paso
info

El "1" le dice al agente Player que dé 1 paso durante cada tick (El reloj de StarLogo Nova marca 5 veces por segundo cuando funciona a velocidad predeterminada). Un número mayor de pasos hará que parezca que el Player se mueve más rápido.

3. ¡Practica lo que Has Aprendido!

Usa las habilidades y conocimientos que aprendiste en el paso 2 para programar el resto de los controles de teclado. Programa que si se mantiene presionada la flecha hacia abajo, el agente se mueva hacia atrás 1 paso (pista: usa el bloque "backwards _"), si se mantiene presionada la flecha izquierda entonces gire a la izquierda 15 grados (pista: usa el bloque "left by _degs"), y si se mantiene presionada la flecha derecha entonces gire a la derecha 15 grados (pista: usa el bloque "right by _degs").

¡Verifica tu Progreso!

Tu código de procedure debería verse como lo que se muestra a continuación. En realidad todavía no hace nada, pero eso viene en el siguiente paso.

Full keyboard controls procedure

Parte 9: Llamar al Procedure

En la sección anterior, programaste el procedure para conectar los movimientos del agente al teclado, pero no hay código para llamar a este procedure. En esta sección, conectarás ese código de procedure a un botón de alternancia.

Llamar al Procedure

Call procedure codeCall procedure drawer
  • Asegúrate de que todavía estés en la pestaña "The Player"
  • Abre el cajón Interface
  • Arrastra el bloque "while _ toggled" a la página de Player
  • Selecciona "play game!" del menú desplegable
  • Para conectar el procedure "Keyboard Controls" al botón "play game!":
    • Abre el cajón Procedures
    • Arrastra el bloque "call _" dentro del bloque "while _ toggled"
    • Selecciona "Keyboard Controls" del menú desplegable
info

El bloque "while___ toggled" le dice al Player qué hacer mientras el botón de alternancia especificado esté activado.

¡Verifica tu Progreso!

Haz clic en "Run Code", "setup" y "play game!". Deberías poder controlar los movimientos del agente Player con tu teclado.

Keyboard controls working

*Si no puedes moverte, intenta hacer clic en SpaceLand y luego repite los pasos anteriores


Parte 10: Recolectar el Treasure

En esta sección escribirás código para que cuando el Player y un Treasure colisionen, el Player "recolecte" el Treasure.

1. Programar la Colisión

Collision with Treasure code
  • Navega a la página de Player.
  • Abre el cajón Detection.
  • Para programar lo que ocurrirá cuando el Player colisione con un Treasure:
    • Arrastra el bloque "on collision with ___" a la página de Player
    • Selecciona "Treasure" del menú desplegable en el bloque "on collision with ___".
  • Saca el bloque "collidee"; lo necesitarás en el siguiente paso.
info

El bloque "on collision with ___" le dice al agente de la página en la que se encuentra qué hacer cuando choca con un agente del breed seleccionado.

2. Programar la "Recolección" del Treasure

Delete collidee code
  • Navega al cajón Agents.
  • Para eliminar el Treasure que colisiona con el Player:
    • Arrastra el bloque "delete agent" dentro del bloque "on collision with ___"
    • Conecta el bloque "collidee" dentro del bloque "delete agent".
info

El bloque "collidee" representa al otro agente en una colisión. Entonces, el código anterior le dice al Player que cada vez que colisione con un Treasure, el Player debe eliminar ese Treasure.

¡Verifica tu Progreso!

Haz clic en "Run Code", "setup" y "play game!", deberías ver el Treasure siendo "recolectado" por el Player al colisionar.


Parte 11: Hacer que el Player sea Bloqueado por Obstacles

En esta sección escribirás código para que cuando el Player y un Obstacle colisionen, el Player sea "bloqueado" por el Obstacle.

1. Programar la Colisión

Collision with Obstacle code
  • Navega a la página de Player.
  • Abre el cajón Detection.
  • Para programar lo que ocurrirá cuando el Player colisione con un Obstacle:
    • Arrastra el bloque "on collision with ___" a la página de Player
    • Selecciona "Obstacle" del menú desplegable en el bloque "on collision with ___".
  • Saca el bloque "collidee"; lo necesitarás en el siguiente paso.

2. Hacer que el Player Rebote

Bounce back code
  • Navega al cajón Movement.
  • Para hacer que el Player sea empujado hacia atrás por el Obstacle:
    • Arrastra el bloque "backwards _" dentro del bloque de colisión
    • Escribe 5 en el socket vacío

¡Verifica tu Progreso!

Haz clic en "Run Code", "setup" y "play game!", deberías ver al jugador ser empujado hacia atrás cuando choca con un Obstacle.


Parte 12: Llevar la Puntuación

En esta sección, programarás la caja de datos para que se actualice cada vez que recolectes un tesoro o un obstáculo.

1. Llevar la Puntuación (Treasure)

Score treasure code
  • Navega a la página de Treasure.
  • Abre el cajón Detection
  • Para que la caja de datos "Score" se actualice cada vez que el jugador recolecte un Treasure:
    • Arrastra el bloque "on collision with _" a la página
    • Selecciona "Player" del menú desplegable
  • Abre el cajón Interface
    • Arrastra el bloque "set _ data box to _" dentro del bloque "on collision with ___"
    • Selecciona "Score" del menú desplegable -- esto se refiere a la caja de datos "Score" en SpaceLand
  • Arrastra el bloque "_ data box" a la página y selecciona "Score"; lo necesitarás en el siguiente paso.
info

La caja de datos es un tipo de widget que se puede usar para mostrar información o recibir entrada del usuario.

2. Sumar a la Puntuación

Score addition code
  • Abre el cajón Math
  • Arrastra el bloque "_ + _" a la página
  • En el socket izquierdo coloca el bloque "_ data box"
  • En el socket derecho escribe "1"
  • Para que la puntuación aumente en uno cada vez que un Treasure colisione con el Player:
    • Arrastra el bloque "_ + _" dentro del socket vacío del bloque "set _ data box to _"

3. Restar de la Puntuación

Score subtraction code
  • Navega a la página de Obstacles
  • Repite los pasos 1 y 2 anteriores (para sumar a la puntuación), excepto que esta vez, usa el bloque "_ - _" (resta) en lugar del bloque de suma.

¡Verifica tu Progreso!

Haz clic en "Run Code", "setup" y "play game!". Cada vez que el Player colisione con un Treasure o un Obstacle, deberías ver la puntuación aumentar o disminuir en uno.


Copyright 2024 MIT Scheller Teacher Education Program. Distribuido bajo licencia Creative Commons CC BY-NC 4.0.