Primeros pasos con Scratch
Scratch™ es un motor de videojuegos creado por investigadores del M.I.T (Instituto de Tecnología de Massachusetts), que más allá de proporcionar una interfaz gráfica para la creación de videojuegos, su objetivo es el desarrollo de habilidades como la lógica o pensamiento lateral, que son cada vez más demandadas por las empresas.
Programar no es sólo escribir código, sino pensar cómo solucionar un problema de la mejor forma posible. Steve Jobs, uno de los creadores de la compañía Apple, dijo una vez que “Todos en el país deberían aprender a programar un ordenador… porque eso te enseña a pensar”. Y éste es el objetivo principal de este curso, aprender a pesar cómo alcanzar tus objetivos con los recursos que tienes a tu alcance.
La ventaja de Scratch es que no es necesario descargar e instalar nada para comenzar, sólo disponer una conexión a internet.
Para ello, nos dirigimos a la dirección: https://scratch.mit.edu/ y pulsamos en el botón “Empezar a crear”, para poder comenzar nuestro proyecto.
Figura 4. Web principal de Scratch.
Una vez accedemos al entorno de desarrollo, veremos algo como lo que aparece en la Figura 5. Puedes cambiar el idioma de trabajo pulsando sobre el icono de la parte superior izquierda de la pantalla.
Figura 5. Interfaz principal de Scratch.
La interfaz se divide en distintas secciones:
-
-
TIPOS DE COMANDO
Scratch proporciona una gran cantidad de funciones de programación, las cuales se presentan con forma de pizas de puzle. Con el fin de facilitar su búsqueda, estas se encuentran organizadas en las siguientes categorías:> Movimiento: Recoge todos los comandos necesarios para el movimiento tanto de nuestro personaje como del resto de elementos que aparecen en pantalla.
> Apariencia: Proporciona ciertas funciones relacionada con la interfaz del juego, como el fondo de pantalla.
> Sonidos: Permite controlar aspectos como la banda sonora y los sonidos de las animaciones y colisiones entre otros.
> Eventos: Son desencadenantes, es decir, son circunstancias que tiene que cumplirse para que se ejecute una cierta acción. Por ejemplo, cuando el usuario pulse la tecla ‘ESPACIO’ del teclado (evento), el personaje saltará (acción).
> Control: Está muy relacionada con la anterior, pero esta categoría se enfoca en los llamados bucles y condicionantes.
Un bucle es un conjunto de acciones que se repiten un cierto número de veces (o de forma indefinida), mientras que un condicionante, es un evento del tipo: “Si la vida del personaje llega a cero, entonces aparece la pantalla de GAME OVER”.
> Sensores: Incluye funciones relacionadas con el ratón, temporizadores y cronómetros.
> Operadores: No son más que operaciones matemáticas y de comparación ya definidas. Sirven para sumar y multiplicar números. Son muy utilizadas junto con los condicionales.
> Variables: Podemos entenderlas como un elemento que almacena un valor que puede ser modificado. Por ejemplo, una variable de nuestro juego puede ser ‘VIDA’, la cual tomará un valor inicial de 100. Cada vez que el personaje sufra daño, el valor contenido en la variable se decrementará una cierta cantidad (en función de cómo de grave sea ese daño), hasta llegar a cero.
> Mis bloques: No sólo podemos utilizar aquellos bloques que ya están creados, sino que podemos crear nuevos según nuestras necesidades. Esto se conoce en programación como “Funciones”, que no son más que un bloque de código que realiza una operación muy concreta. Estas funciones pueden recibir “parámetros”, que son un tipo de variables, pero asociados a funciones. Por ejemplo, si queremos crear una función que calcule el cuadrado de dos números, los parámetros son esos dos números cuyo cuadrado queremos calcular.
Las funciones son una herramienta muy útil en programación que permite luchar con lo que se conoce comúnmente como “código espagueti”, que son aquellas partes de nuestro programa en las que tenemos el mismo código repetido varias veces, en lugar de tener uno único código que llamemos tantas veces como queramos. Un aspecto clave a la hora de programar es el orden, por lo que cuanto más ordenado y limpio sea nuestro programa, más fácil será la identificación y corrección de errores.
-
COMANDOS DISPONIBLES
Recoge las distintas piezas de puzle que componen cada una de las categorías anteriores. -
ÁREA DE TRABAJO
Aquí es donde arrastraremos nuestras piezas de puzle para crear nuestro videojuego. La ventaja que tiene Scratch es que podemos ponerlas en cualquier punto de la pantalla. - GESTIÓN DE ESCENARIOS
Un juego se suelen componer de diferentes escenas o escenarios, que van apareciendo a medida que el jugador avanza. Como la pantalla de desarrollo es limitada, es posible dividir nuestros niveles en secciones más pequeñas que irán apareciendo según sea necesario. - VISUALIZACIÓN DEL JUEGO
En esta ventana podremos ver cómo está quedando nuestro juego a media que lo vayamos creando.
-
Una vez que ya nos hemos familiarizado con la interfaz, el siguiente paso será crearnos una cuenta para poder guardar nuestro proyecto a medida que lo vayamos desarrollando. Para ello, debemos pulsar sobre la opción “Únete a Scratch”, de la parte superior derecha de la pantalla. Tras ello aparecerán diferentes interfaces que nos irán solicitando cierta información (Figura 6) para crear nuestra cuenta.
Figura 6. Crear una cuenta en Scratch
Antes de empezar a crear un juego, es necesario que nos familiaricemos con la interfaz y cómo funciona el sistema de bloques. Para ello, vamos a hacer un pequeño programa que haga que nuestro personaje rote en un sentido y cuando pulsemos la tecla ‘Espacio’, empiece a girar en el otro sentido.
Tal y como se muestra en la Figura 7, lo primero que debemos agregar en todos nuestros juegos es el bloque que se activa cuando pulsamos sobre la bandera verde, que es el icono de inicio del juego, el cual está en la ventana de visualización, junto con el icono de parada.
Figura 7. Envío de ‘Flag’ al iniciar el juego
Cuando iniciamos el juego, ponemos un Flag, que llamaremos “Start” a TRUE para indicar al resto de nuestro programa que el juego ya ha iniciado. Pero ¿Qué es un Flag? Es el nombre que reciben comúnmente las variables que se utilizan para indicar un evento. Son indicadores que sólo pueden tomar dos posibles valores, verdadero o falso (TRUE, FALSE). Podemos visualizarlo como una bombilla que se enciende (TRUE) o se apaga (FALSE) cuando entramos a una habitación. Esta información se puede utilizar para ejecutar otras tareas, como reproducir un sonido, mostrar el menú del juego, o en nuestro caso, hacer que el personaje empiece a rotar.
Ahora que ya sabemos que el juego ha empezado (Start = TRUE), debemos hacer que el personaje rote, y para ello implementaremos los bloques de la Figura 8. Para ello usamos el bloque de giro de 15º en sentido horario, que aparece en la Figura 8, pero como queremos que nunca pare de girar, debemos añadir un “Bucle Infinito”, que ejecutará lo que haya en su interior constantemente.
Figura 8. Rotación perpetua del personaje
¿Y si cambiamos el ángulo de giro? Al estar dentro de un bucle infinito, variar el ángulo de rotación, afecta a cómo de rápido va a rotar el personaje. Si ponemos un valor de 1, veremos que el personaje rota mucho más lento.
Ya sabemos cómo hacer girar a nuestro personaje en una dirección, ahora tenemos que hacer que se invierta el sentido de giro cada vez que pulsemos la tecla ‘ESPACIO’. Hay muchas formas de hacer esto, pero si tenemos en cuenta que el signo del número de grados de rotación del bloque de la Figura 8 determina el sentido de giro (Si es positivo, gira en sentido horario, y si es negativo, en sentido antihorario), lo más sencillo es cambiar el signo cada vez que pulsemos la tecla ‘ESPACIO’.
Para ello debemos crear una variable que llamaremos ‘Rotación’, la cual contendrá los grados a rotar (dejaremos 15 por defecto) y el sentido de giro. Para crearla, debemos pulsar sobre la opción ‘Crear una variable’ de la sección Variables. Tal y como se muestra en la Figura 9, se abrirá una ventana donde se puede dar nombre a la variable, que en nuestro caso es Rotación.
Figura 9. Creación de una variable en Scratch
Toda variable, debe ser inicializada, es decir, debe de tener un valor inicial o por defecto. Para ello, Scratch incorpora una serie de bloques específicos. En la Figura 10, se muestran las distintas opciones disponibles.
Figura 10. Opciones sobre variables
En nuestro caso, vamos a definir una variable llamada Rotación que tendrá un valor inicial de +15, justo antes de enviar el evento de inicio ‘START’. El orden en el que se colocan los bloques es importante. Al inicializar la variable antes de iniciar el bucle principal, se garantiza que el sentido no se va a alterar instantes después de que el giro se inicie.
Figura 11. Inicialización de la variable Rotación
Ahora debemos hacer que el ángulo de rotación que hemos definido en la Figura 8 sea el que se encuentra en la variable Rotación; para ello, debemos reemplazar el valor por la variable Rotación que hemos definido.
Figura 12. Asociación de la variable Rotación como ángulo de giro
El siguiente y último paso es hacer que el valor de la variable Rotación cambie cada vez que pulsemos la tecla ‘ESPACIO’. Para ello, agregamos el bloque de la Figura 13. Como lo único que queremos es cambiar el signo, multiplicamos el valor que ya tenemos almacenado en la variable Rotación por -1; así, si el valor almacenado era 15, al pulsar la tecla, hará -1*15 = -15, y si pulsamos nuevamente, -1*-15 = +15.
Figura 13. Rotación e inversión del personaje al pulsar la tecla ‘ESPACIO’.
Ahora, si pulsamos sobre el icono de la bandera verde, podemos iniciar nuestro programa y ver el resultado.
Figura 14. Resultado final de la lección Nº1
Con esta lección hemos vistos cómo operar con el entorno de desarrollo y el sistema de bloques de Scratch desde una perspectiva muy básica.