# Herramientas TIC aplicadas a la educación/Scratch
## Introducción a Scratch

* Scratch es un lenguaje de programación que permite crear juegos, animaciones e historias interactivas. Es utilizado por estudiantes, académicos, profesores y padres. En el ámbito educativo se convierte en una oportunidad para ayudar a los estudiantes en el desarrollo de habilidades mentales mediante el aprendizaje de la programación sin necesidad de saber del programa. Sus características ligadas al pensamiento computacional han hecho que sea muy difundido actualmente en la educación de niños adolescentes y adultos. Un proyecto dentro de Scratch es uno o varios programas que contienen instrucciones y aportan comportamiento a los objetos que queramos tener.
* Interesante vídeo introducción a Scratch. Por Mitchel Resnick, Director del grupo “Lifelong Kindergarten Group” del MIT, equipo que creó el Scratch.
Antecedentes:
La programación como herramienta educativa en la actualidad parte de LOGO, un lenguaje creado en los 60 y 70. LOGO fue la semilla de lo que más tarde, ya en los años 90, germinó en forma de múltiples herramientas destinadas a la educación y formación de la programación de niños y jóvenes, ya sea en forma de lenguajes específicos o de juguetes, como LEGO Mindstorms.
A finales de los 90 comenzaron a desarrollarse una serie de lenguajes de programación basados en bloques, tremendamente intuitivos y fáciles tanto de utilizar como de entender y que por su naturaleza han permitido que cualquier chaval pueda empezar a aprender a programar.
Scratch surge como baluarte de estos lenguajes de programación basados en bloques y en el año 2003 se lanza su primera versión pública. Fue creado por una iniciativa de Mitchel Resnick, director del grupo “Lifelong Kindergarten Group” del MIT.
Beneficios para el desarrollo educativo:
* La programación pasa a ser una herramienta que puede fomentar la creatividad a unos niveles extraordinarios, así como la sociabilidad en las aulas.
* Permite el desarrollo del pensamiento computacional, que facilita el aprendizaje para resolver grandes problemas, dividirlos en partes y afrontarlas por separado para que, en su conjunto, den respuesta al problema inicialmente planteado.
* El entorno Scratch dispone de herramientas, funcionalidades y posibilidades a disposición del usuario:
** La programación como tal: permite la creación de algoritmos para los movimientos de los objetos o de la interacción entre ellos. Permite gestionar conceptos como 'tiempo' en la ejecución de un programa, que posibilitará la secuencia de escenas a través de acciones.
** El apartado creativo: todo es personalizable, desde los objetos o personajes hasta el escenario.
** Parte social: la comunidad online de Scratch dispone de 12 millones de proyectos, y de todos ellos podremos ver su código para aprender y tomar ideas. El concepto de “responsabilidad” se desarrolla con Scratch a la hora de compartir proyectos, dado que el autor es responsable de compartir un programa ético y accesible para todos.
** Permite desarrollar el “pensamiento crítico” ya que se puede ver el conjunto de programas de otros usuarios, analizar su funcionamiento y compartir opiniones o alternativas.
* Su interfaz, basada en bloques y no en texto, ayuda a entender la programación y facilita el proceso de entender cómo funcionan los ordenadores, ese proceso iterativo y secuencial de los algoritmos.
* Lenguaje visual y modular. Se organiza en bloques que realizan diferentes funciones. Al juntar bloques, de forma similar a cómo se encajan piezas de Lego, se crean acciones complejas que dan lugar a los programas.
* En Scratch es ideal plantear un proyecto 'base' sobre el que luego continuar construyendo y avanzando, con fases incrementales que añadan complejidad y nuevas posibilidades.

## Programando con Scratch

Scratch ofrece dos modos de trabajo con las herramientas de programación:
* Ejecución on-line:
** El usuario accede a la página web Scratch del MIT
** El usuario ha de crearse un usuario para trabajar on-line. Con este usuario se puede participar en la comunidad.
* Ejecución off-line, en tu propio ordenador o tablet
** El usuario puede descargar la versión off-line en https://scratch.mit.edu/download
** Dispones de versiones multiplataforma y están pensadas para ejecutarse en sistemas Windows, Mac OS X y Linux.

## El entorno de desarrollo

Al ejecutar el entorno de Scratch nos aparecen en pantalla distintos elementos:
* Entorno de Desarrollo de ScratchOpciones para gestionar los proyectos (lista de opciones en la barra superior izquierda):
** Permite crear un nuevo proyecto, guardarlo, grabar un vídeo de hasta 60 segundos y compartir el proyecto a la comunidad Scratch (se necesita usuario).
** Ofrece ayudas para aprender o evolucionar en la programación.
* Escenario. Ventana de interacción (entrada/salida)
** Es el elemento que aparece en el cuadrante superior izquierdo.
** Se podría decir que es el “escenario” en el que aparecerán nuestros fondos de escenario, los personajes y se interrelacionarán entre ellos.
** También es el lugar en el que el jugador o usuario del programa podrá interaccionar con los personajes y las escenas que se irán sucediendo en el juego.
** A su vez el escenario se divide en cuatro cuadrantes, representando un plano cortado por un eje de coordenadas. El punto central de las coordenadas está justo en el centro del escenario.
** Asociado a un escenario tenemos los siguientes elementos:
*** Fondos de la escena:
**** Nos permite seleccionar o diseñar imágenes que representarán el fondo del escenario.
**** Podremos elegirlos de la biblioteca de Scratch, o bien dibujarlo con la paleta de pintura, o bien elegir una imagen que tengamos guardada en el ordenador, o finalmente realizar una foto con la cámara del mismo.
*** Sonidos: podemos editar o elegir de la biblioteca, o de nuestro ordenador, un fichero de sonido que podemos asociar al escenario
*** Programas: podemos asociar bloques de programa a nuestro escenario. Permitirá ejecutar acciones asociadas al mismo
* Personajes u “objetos”
** Los personajes u objetos son los elementos “actores” en nuestro videojuego
** Se encuentran debajo del escenario
** Nos contarán cosas a través de sus acciones (programas), con distintos disfraces y distintos sonidos
** Asociado a los personajes podemos:
*** Elegir sus disfraces
**** Nos permite seleccionar o diseñar imágenes que representarán disfraces, movimientos, colores de nuestro personaje
**** Podremos elegirlos de la biblioteca de Scratch, o bien dibujarlo con la paleta de pintura, o bien elegir una imagen que tengamos guardada en el ordenador, o finalmente realizar una foto con la cámara del mismo
*** Elegir sonidos que se reproducirán en el tiempo de su “acción” (ejecución de los programas asociados)
*** Programas: podremos asociar acciones en bloques de programación para ir dando vida y actividad al personaje
* Zona de programación:
** Es la zona de la derecha de pantalla
** Permite crear los programas basados en bloques de programación que presentamos más adelante
** Tendremos programas asociados a nuestros personajes/objetos y también asociados a nuestro escenario

## Elementos de Programación Scratch

La zona de recursos de programación está situada en la parte central del entorno, entre la ventana de interacción y la de edición de programas. En ella se encuentran los elementos de programación que se usarán para construir el código que irá asociado tanto a los escenarios como a los personajes. Hay tres solapas en esta zona que son relativamente diferentes dependiendo de si se ha seleccionado un Escenario o un Personaje:
* Escenario: Programas, Fondos y Sonidos
* Personaje: Programas, Disfraces y Sonidos
Incluso dentro de la solapa de “Programas”, las opciones de programación pueden ser diferentes entre un Escenario y un Personaje. Los diferentes grupos de instrucciones para programación son las siguientes:
* Apariencia: Ofrece operaciones para gestionar el aspecto visual del escenario y los personajes
** Mostrar y esconder un personaje, así como emitir mensajes escritos por un personaje a modo de “bocadillo” como en un comic.
** Gestionar los disfraces de los personajes (cambiar su disfraz) y las imágenes de fondo de un escenario (cambiar el fondo).
** Cambiar el tamaño de los personajes y enviarlos al fondo o al frente respecto a otros personajes.
* Control: Contiene las estructuras de control propias de un lenguaje de programación:
** Bucles (infinito, iterativo, condicionado, …)
** Sentencias condicionales (“si…entonces…si no….”)
** Detener la ejecución de los personajes, fondos y ejecución del programa.
** Gestión de clones que permiten crear/eliminar clones de un personaje o escenario.
* Eventos: Permiten detectar ciertas situaciones que se producen en el sistema relacionadas con el teclado, ratón, volumen, así como mensajes entre los diferentes personajes y/o escenarios.
** Presión de la bandera de inicio de ejecución de programa
** Presión de teclas concretas en el teclado
** Envío y recepción de mensajes entre los personajes y escenarios.
* Movimiento: Ofrece la posibilidad de realizar cambios de posición y orientación de los personajes en la pantalla, permitiendo de este modo
** Mostrarle
** Posicionarle en un lugar concreto de la pantalla
** Girar y/o mover el personaje por la pantalla o bien rebotar caundo toque un borde del escenario.
** Apuntar el personaje hacia una dirección concreta.
* Operadores: Permiten gestionar operaciones lógicas, matemáticas y de caracteres. Muchas veces los operadores forman parte de las condiciones que se incluyen en las estructuras de control. Incluso hay posibilidad de generación de números al azar entre un rango de numeración concreto.
* Sensores: Permite detectar situaciones que se producen en el escenario tales como
** Localizar las coordenadas (x, y) del ratón y saber si se ha pulsado.
** Saber cuándo un personaje se choca con otros, cuando está tocando un color concreto, cuando está tocando un borde del escenario.
** Identificar cuando se presiona una tecla concreta.
** Vídeo, sonido y cronómetro
* Sonido: Ofrece la posibilidad de gestionar instrumentos, emitir sonidos (predefinidos o bien grabados), notas musicales, establecer el tempo musical y el volumen.
** Lápiz: Permite pintar con los personajes cuando se mueven por el escenario como si llevasen un lápiz en su mano. Para ello se dispone de funciones para
** Bajar y subir el lápiz y establecer su color.
** Fijar el tamaño y la intensidad del trazo.
* Datos: Permite crear y gestionar variables propias de un objeto o bien compartidas por todos, cambiar el valor de dichas variables y mostrarlas o esconderlas en la parte de la ventana de visualización.
* Bloques: Mediante los bloques se pueden definir secuencias de instrucciones que podrían ser invocadas desde cualquier personaje o escenario. Son muy útiles para agrupar código que puede ser reutilizado por diferentes personajes y escenarios.

## Reto de la dinámica
### Objetivo de la dinámica de la clase

Se trata de realizar un video juego incrementalmente haciendo uso de la forma de trabajo con Scratch. Para conseguir el objetivo hay que trabajar paso a paso de forma iterativa afianzando pasos anteriores. Para ello se ha escogido el desarrollo de un video juego expuesto en Progamo Ergo Sum y se ha estructurado y reorientado para alcanzar el objetivo. En la descripción de los pasos, se hará referencia a los proyectos Scratch incrementales (uno por paso) que hemos preparado para este propósito y se pueden encontrar en el area virtual de la UCM en esta asignatura, los proyectos se nombran de la forma [Pajaros - Paso X.sb2] donde "X" indica el número de paso.

### Descripción del video juego

En el escenario del video juego aparecen de izquierda a derecha bandadas de pájaros en posiciones verticales aleatorias. Hay dos tipos de pájaros, unos blancos buenos y otros rojos malos. Además se dispone de un cazador que vendrá representado por una mira de escopeta. La mira se puede mover por todo el scenario y el objetivo es matar pájaros rojos sin límite, pero no a los pájaros blancos. Cuando la mira toca un pájaro este muere y desaparece emitiendo un sonido diferente según el pájaro sea rojo o blanco. El juego finalizará cuando hayamos matado tres pájaros blancos por error. Habrá dos escenarios, uno de comienzo de juego que se mantendrá hasta que hayamos matado por error tres pájaros blancos y otro de finalización de juego (“Game Over”).

### Pasos incrementales para alcanzar el reto

* Creación del fondo de inicio del video juego y un personaje [Proyecto aula virtual "Pajaros - Paso 0.sb2"]
** Crear un fondo de video juego con dos imágenes diferentes: Una imagen a para el comienzo de juego y otra para el fin del mismo. La imagen de “Game Over” ya está creada previamente en el proyecto Scratch [Pajaros - Paso 0.sb2] para agilizar la clase.
** Crear los disfraces del pájaro blanco malo: Asociar al personaje del pájaro blanco dos imágenes, una con las alas extendidas hacia arriba y otra con las alas extendidas hacia abajo para que al alternarlas generen la sensación de movimiento.
* Definir las acciones necesarias en el escenario para el inicio y fin de la ejecución del programa [Proyecto aula virtual "Pajaros - Paso 1.sb2"]
** Iniciar el juego: Al presionar la bandera de inicio de programa (“eventos.al presionar”) cambiar fondo a “cielo” (“apariencia.cambiar fondo a [cielo]”) y enviar el mensaje de “comienza juego” a los personajes (“eventos.enviar [comienza juego]”).
** Finalizar el juego: Al recibir el mensaje “game over” (“eventos.al recibir [game over]”) cambiar el fondo a “cielo final” (“apariencia.cambiar fondo a [cielo fina]”) y a continuación detener todos los personajes y ejecución del programa (“control.detener [todos]”).
* Mostrar el pájaro malo aleteando cuando comienza el juego [Proyecto aula virtual "Pajaros - Paso 2.sb
** Capturar el mensaje de "comienza juego" y hacer que aletee el pájaro: Al recibir el mensaje “comienza juego” (“eventos.al recibir [comienza juego]”) mostrar un pájaro (“apariencia.mostrar”), posicionándolo en las coordenadas (X: -220, Y: 100) y (“movimiento.ir a [X: -220, Y: 100]”) enviarle el mensaje “apariencia.aletea” para que cambie el disfraz de abrir/cerrar las alas cada 0.1 seg.
* Desplazar el pájaro malo en la línea horizontal y ocultarlo al llegar al borde derecho [Proyecto aula virtual "Pajaros - Paso 3.sb2
** Avance y ocultación al detectar borde: Avanzar el pájaro de 10 en 10 pasos desde la posición X: -220, Y aleatorio entre: [-180, 150] (“movimiento.ir a [X: -220, Y: operadores.número al azar entre [X: 180, Y: 150]”). Cuando el pájaro toque el borde derecho “eventos.tocando [borde]” le hacemos desaparecer “apariencia.esconder”.
* Crear réplicas de los pájaros malos a cazar [Proyecto aula virtual "Pajaros - Paso 4.sb2"]
** Crear réplicas de los pájaros malos a cazar: Replicar los pájaros creando clones “control.crear clone de [mi mismo]” teniendo en cuenta que cuando lleguen al borde derecho debemos de borrar el clon (“control.borrar este clon”) pues el Scratch tiene un límite máximo de clones.
* Crear la escopeta (mira) para matar los pájaros [Proyecto aula virtual "Pajaros - Paso 5.sb2"]
** Recibir el mensaje de comienzo de juego y perseguir al cursor: En el personaje de la escopeta (“mira”) que ya está creado, cuando reciba el mensaje de “eventos.comienza juego” hacer que se muestre (“apariencia.mostrar”) y entre en un bucle (“control.por siempre”) para que se pinte en la posición donde esté el puntero del ratón (“movimiento.ir a [sensores.posicion x del ratón, sensores.posicion y del ratón]”).
* Si el pájaro malo es tocado por la escopeta (“mira”) eliminarle [Proyecto aula virtual "Pajaros - Paso 6.sb2"]
** Detectar cuando la mira toca un pájaro malo y eliminarlo: En el pájaro malo, añadir la condición “control.si … entonces” para que cuando la “mira” toque al pájaro este emita un sonido de gorgo (“sonido.tocar sonido [gorgo]”), luego se despinte (“apariencia.esconder”) y a continuación se borre el clon (“control.borrar este clon”).
* Detectar cuando el pájaro bueno le toca “mira” mostrar un mensaje y destruirle [Proyecto aula virtual "Pajaros - Paso 7.sb2"]
** Detectar cuando la mira toca al pájaro bueno, que gorgotee y destruirlo: Hacer una copia del código del pájaro “malo” a otro “bueno” (blanco) y modificar su programa para que cuando le toque la mira escriba en pantalla el mensaje “Que malo eres torpón!” (“apariencia.decir [“Que malo eres Torpón!”] por [0.5 segundos]”) durante 0.5 seg. Luego se esconderá (“apariencia.esconder”) y se destruirá el clon (“control.borrar clon”) el clon.
* Incorporar el límite de 3 vidas al video juego [Proyecto aula virtual "Pajaros - Paso 8.sb2"]
** Añadir variable: En el pájaro bueno añadir una variable compartida para todos los objetos “vidas” (“datos.Crear una variable”) e inicializarla a 3 al recibir el mensaje “comienza juego”.
** Decrementar la variable: Esta variable de debe decrementar en 1 cada vez que se mata a un pájaro blanco bueno (“datos.cambiar vidas por -1”).
** Detectar que no hay vidas y terminar el juego: Cuando se llegue a 0 la variable “vidas” se ha de terminar el juego enviando un mensaje “control.si [vidas = 0] entonces control.enviar [game over]”.

## Scratch para Arduino

"Scratch for Arduino" (S4A) es una modificación de Scratch que permite programar la plataforma de hardware libre Arduino de una forma sencilla. Proporciona bloques nuevos para tratar con sensores y actuadores conectados a una placa Arduino.
La finalidad principal del proyecto es atraer a gente al mundo de la programación. Otro de sus objetivos es proporcionar una interfaz de alto nivel para programadores de Arduino con funcionalidades tales como la interacción con un conjunto de placas mediante eventos de usuario.
* Video presentación para usar Scratch para programar en Arduino: https://www.youtube.com/watch?v=QEsBVhx1SXU&index=43&list=PL5tA44GpyFntFHtHd6Zxb2xQZpxwOfeu3
* URL para descargar los Drivers/SW necesarios para programar elementos Arduino desde Scratch, oroporciona bloques nuevos para este uso específico: http://s4a.cat/index_es.html

## Recursos para el lector

* FAQs: https://scratch.mit.edu/info/faq/
* Videotutoriales, preguntas frecuentes y recursos para aprender el lenguaje:
** Para educadores: https://scratch.mit.edu/educators/
** Recursos Scratch en Español: http://scratched.gse.harvard.edu/resources/search/results/taxonomy%3A1134
** Iniciación a Scratch: https://scratch.mit.edu/starter_projects/
** Guía muy completa: http://scratched.gse.harvard.edu/guide/files/CreativeComputing20141015.pdf
** Vídeos prácticos de construcción de programas Scratch: de "Programo Ergo Sum" https://www.programoergosum.com/cursos-online/scratch/26-curso-de-programacion-de-juegos-con-scratch/introduccion