Saltearse al contenido

Bloques y Scripts en Scratch

Los bloques son los elementos fundamentales de la programación en Scratch. Son como piezas de LEGO digitales que se conectan para crear programas. En esta guía aprenderás sobre los diferentes tipos de bloques, cómo funcionan y cómo combinarlos para crear scripts poderosos y efectivos.

Los bloques son instrucciones visuales que le dicen a tu sprite qué hacer. Cada bloque representa una acción específica, como moverse, cambiar de color, reproducir un sonido o tomar una decisión.

🎨 Codificados por Color

Cada categoría tiene un color único que facilita la identificación y organización.

🔗 Conexión Magnética

Los bloques se conectan automáticamente cuando los acercas, como imanes.

📝 Sin Errores de Sintaxis

La conexión visual elimina errores de escritura comunes en programación tradicional.

🔄 Reutilizables

Puedes copiar, duplicar y reutilizar bloques en diferentes partes de tu proyecto.

La forma de cada bloque indica cómo se puede usar y qué tipo de información maneja.

Características:

  • Forma redondeada en la parte superior
  • Siempre van al inicio de un script
  • Definen cuándo se ejecuta el código
  • No se pueden conectar encima de otros bloques

Ejemplos Comunes:

al presionar ⚑
al hacer clic en este objeto
al presionar tecla [espacio]
al recibir [mensaje1]
al empezar como clon

Cuándo Usar:

  • Para iniciar programas
  • Para responder a eventos del usuario
  • Para comunicación entre sprites
  • Para inicializar clones

Características:

  • Forma rectangular con conectores arriba y abajo
  • Ejecutan acciones específicas
  • Se pueden apilar uno encima del otro
  • Forman la “columna vertebral” de tus scripts

Ejemplos por Categoría:

mover (10) pasos
girar ↻ (15) grados
ir a x: (0) y: (0)
apuntar hacia (puntero del ratón)

Uso típico: Controlar posición y orientación de sprites

Características:

  • Forma de “C” que puede contener otros bloques
  • Controlan el flujo del programa
  • Los bloques internos se ejecutan según las reglas del bloque C
  • Fundamentales para lógica y repetición

Tipos Principales:

repetir (10) veces
// bloques internos se ejecutan 10 veces
fin
por siempre
// bloques internos se ejecutan infinitamente
fin
repetir hasta que <condición>
// bloques internos se ejecutan hasta que la condición sea verdadera
fin

Características:

  • Forma ovalada
  • Devuelven valores (números, texto, etc.)
  • Se conectan dentro de otros bloques
  • No se pueden usar solos como comandos

Ejemplos:

(posición x) // devuelve la coordenada X
(número al azar entre (1) y (10)) // devuelve un número aleatorio
(respuesta) // devuelve lo que escribió el usuario
(longitud de [mi lista]) // devuelve cuántos elementos tiene la lista
(temporizador) // devuelve el tiempo transcurrido

Cómo Usar:

// Dentro de otros bloques
ir a x: (posición x del ratón) y: (posición y del ratón)
fijar [puntos] a (número al azar entre (1) y (100))
decir (unir [Tu puntuación es: ] (puntos))

Características:

  • Forma hexagonal (como un diamante)
  • Devuelven verdadero o falso
  • Se usan en condiciones y decisiones
  • Fundamentales para la lógica del programa

Ejemplos:

<tocando [Sprite1]?> // ¿está tocando otro sprite?
<tecla [espacio] presionada?> // ¿se está presionando una tecla?
<(puntos) > (100)> // ¿los puntos son mayores que 100?
<ratón presionado?> // ¿se está haciendo clic?

Uso en Condicionales:

si <tocando [borde]?> entonces
girar ↻ (180) grados
fin
repetir hasta que <(puntos) > (50)>
// seguir jugando hasta conseguir 50 puntos
fin

Propósito: Controlar posición, dirección y movimiento de sprites

Bloques Esenciales:

  • mover (10) pasos - Movimiento básico
  • ir a x: (0) y: (0) - Posicionamiento absoluto
  • apuntar en dirección (90) - Control de orientación
  • rebotar si toca un borde - Comportamiento automático

Ejemplo de Script:

al presionar ⚑
apuntar en dirección (90)
por siempre
mover (5) pasos
rebotar si toca un borde
fin

Propósito: Controlar cómo se ven los sprites y qué dicen

Bloques Esenciales:

  • decir [texto] - Comunicación
  • cambiar a disfraz [nombre] - Cambio de apariencia
  • fijar tamaño a (100) % - Control de escala
  • fijar efecto [color] a (50) - Efectos visuales

Ejemplo de Script:

al hacer clic en este objeto
decir [¡Hola!] por (2) segundos
cambiar a disfraz [feliz]
fijar efecto [brillo] a (25)
esperar (1) segundos
quitar efectos gráficos

Propósito: Reproducir y controlar audio

Bloques Esenciales:

  • tocar sonido [nombre] - Reproducción básica
  • empezar sonido [nombre] - Reproducción sin esperar
  • fijar volumen a (100) % - Control de volumen
  • parar todos los sonidos - Control de audio

Propósito: Detectar y responder a acciones del usuario y del programa

Bloques Esenciales:

  • al presionar ⚑ - Inicio del programa
  • al presionar tecla [espacio] - Respuesta a teclado
  • al hacer clic en este objeto - Interacción con ratón
  • al recibir [mensaje] - Comunicación entre sprites

Propósito: Controlar el flujo y la lógica del programa

Bloques Esenciales:

  • esperar (1) segundos - Pausas temporales
  • repetir (10) veces - Bucles con contador
  • por siempre - Bucles infinitos
  • si <condición> entonces - Decisiones

Propósito: Detectar información del entorno y del usuario

Bloques Esenciales:

  • ¿tocando [objeto]? - Detección de colisiones
  • ¿tecla [espacio] presionada? - Estado del teclado
  • (posición x del ratón) - Posición del cursor
  • (distancia a [objeto]) - Cálculo de distancias

Propósito: Realizar cálculos y operaciones lógicas

Bloques Esenciales:

  • ((4) + (3)) - Operaciones matemáticas
  • (número al azar entre (1) y (10)) - Números aleatorios
  • <(50) > (25)> - Comparaciones
  • (unir [Hola] [Mundo]) - Manipulación de texto

Propósito: Almacenar y manipular datos

Bloques Esenciales:

  • fijar [variable] a (valor) - Asignación
  • cambiar [variable] por (1) - Modificación
  • (variable) - Acceso al valor
  • añadir [elemento] a [lista] - Gestión de listas

Un script es una secuencia de bloques conectados que trabajan juntos para realizar una tarea específica.

Estructura Típica:

// 1. Bloque de sombrero (evento iniciador)
al presionar ⚑
// 2. Inicialización (configuración inicial)
ir a x: (0) y: (0)
fijar [velocidad] a (5)
mostrar
// 3. Bucle principal (comportamiento continuo)
por siempre
// 4. Lógica del programa
si <tecla [flecha derecha] presionada?> entonces
cambiar x por (velocidad)
fin
si <tocando [borde]?> entonces
rebotar si toca un borde
fin
fin

Propósito: Configurar el estado inicial del sprite

al presionar ⚑
ir a x: (0) y: (0)
apuntar en dirección (90)
fijar tamaño a (100) %
mostrar
quitar efectos gráficos
fijar [puntos] a (0)
fijar [vidas] a (3)

Cuándo usar: Al inicio de cada sprite para establecer condiciones conocidas

1. Un Script, Una Responsabilidad

// BUENO: Script dedicado solo al movimiento
al presionar ⚑
por siempre
si <tecla [flecha derecha] presionada?> entonces
cambiar x por (5)
fin
fin
// Script separado para animación
al presionar ⚑
por siempre
si <tecla [flecha derecha] presionada?> entonces
cambiar a disfraz [caminando]
si no
cambiar a disfraz [parado]
fin
fin

2. Inicialización Clara

// Siempre inicializa al principio
al presionar ⚑
// Posición
ir a x: (0) y: (0)
// Apariencia
mostrar
fijar tamaño a (100) %
// Variables
fijar [velocidad] a (5)
fijar [puntos] a (0)

3. Uso de Variables para Flexibilidad

// MALO: Números mágicos
mover (5) pasos
esperar (0.1) segundos
// BUENO: Variables descriptivas
mover (velocidad) pasos
esperar (retraso-animación) segundos

Usando Mensajes:

// Script 1: Detecta colisión
si <tocando [Enemigo]?> entonces
enviar [jugador-dañado]
fin
// Script 2: Responde al daño
al recibir [jugador-dañado]
cambiar [vidas] por (-1)
fijar efecto [fantasma] a (50)
esperar (1) segundos
fijar efecto [fantasma] a (0)

Usando Variables Globales:

// Script 1: Modifica estado
si <tecla [p] presionada?> entonces
si <(juego-pausado) = [falso]> entonces
fijar [juego-pausado] a [verdadero]
si no
fijar [juego-pausado] a [falso]
fin
fin
// Script 2: Responde al estado
por siempre
si <(juego-pausado) = [falso]> entonces
// lógica normal del juego
fin
fin
// Variable "estado" puede ser: "menu", "jugando", "pausa", "gameover"
al presionar ⚑
fijar [estado] a [menu]
por siempre
si <(estado) = [menu]> entonces
// mostrar menú, esperar input
si <tecla [espacio] presionada?> entonces
fijar [estado] a [jugando]
fin
fin
si <(estado) = [jugando]> entonces
// lógica principal del juego
si <(vidas) < [1]> entonces
fijar [estado] a [gameover]
fin
fin
si <(estado) = [gameover]> entonces
// mostrar pantalla de game over
fin
fin

Evitar Bucles Innecesarios:

// MALO: Verifica constantemente
por siempre
si <tecla [espacio] presionada?> entonces
// acción
fin
fin
// BUENO: Usa eventos
al presionar tecla [espacio]
// acción

Limitar Frecuencia de Verificación:

// Para verificaciones costosas
por siempre
// verificación compleja
esperar (0.1) segundos // No verificar cada frame
fin
// Sprite principal: Creador de proyectiles
al presionar tecla [espacio]
crear clon de [mí mismo]
// Comportamiento del clon
al empezar como clon
apuntar hacia (puntero del ratón)
repetir hasta que <tocando [borde]?>
mover (10) pasos
si <tocando [Enemigo]?> entonces
enviar [enemigo-destruido]
borrar este clon
fin
fin
borrar este clon

Síntomas:

  • Los bloques no hacen nada
  • El sprite no responde

Causas Comunes:

  • Falta bloque de sombrero
  • Script en sprite incorrecto
  • Condiciones nunca se cumplen

Soluciones:

// Asegúrate de tener un evento iniciador
al presionar ⚑ // ← ¡Necesario!
mover (10) pasos
// Verifica que estás en el sprite correcto
// Mira la lista de sprites y selecciona el correcto
// Simplifica condiciones para testing
si <verdadero> entonces // Siempre se ejecuta
decir [¡Funciona!]
fin

1. Usar Bloques “Decir” para Debug:

// Mostrar valores de variables
decir (unir [X: ] (unir (posición x) (unir [ Y: ] (posición y))))
// Confirmar que el código se ejecuta
decir [Llegué aquí] por (1) segundos
// Mostrar estado de condiciones
si <tocando [borde]?> entonces
decir [Tocando borde!]
si no
decir [No tocando borde]
fin

2. Simplificar para Aislar Problemas:

// En lugar de un script complejo, prueba partes individuales
// Script original (complejo)
al presionar ⚑
por siempre
si <<tecla [flecha derecha] presionada?> y <no <tocando [obstáculo]?>>> entonces
cambiar x por (velocidad)
siguiente disfraz
fin
fin
// Script simplificado para testing
al presionar ⚑
por siempre
si <tecla [flecha derecha] presionada?> entonces
decir [Tecla presionada!]
fin
fin

3. Usar Efectos Visuales para Debug:

// Resaltar cuando ocurren eventos
si <tocando [Enemigo]?> entonces
fijar efecto [brillo] a (100) // Destello visual
esperar (0.2) segundos
quitar efectos gráficos
fin

1. Agrupa Scripts por Función:

  • Inicialización: Un script para configuración inicial
  • Movimiento: Scripts separados para diferentes tipos de movimiento
  • Interacción: Scripts para responder a eventos del usuario
  • Lógica de Juego: Scripts para reglas y mecánicas

2. Usa Nombres Descriptivos:

// Variables descriptivas
fijar [velocidad-jugador] a (5)
fijar [puntos-totales] a (0)
fijar [tiempo-restante] a (60)
// Mensajes descriptivos
enviar [jugador-obtuvo-powerup]
enviar [nivel-completado]
enviar [enemigo-derrotado]

3. Comenta tu Código:

// Usa bloques "decir" como comentarios durante desarrollo
decir [Inicializando jugador...] por (0.1) segundos
// O crea un sprite "Comentarios" solo para documentación

1. Patrón de Inicialización:

// Cada sprite debería tener esto
al presionar ⚑
// Resetear posición
ir a x: (posición-inicial-x) y: (posición-inicial-y)
// Resetear apariencia
mostrar
fijar tamaño a (100) %
quitar efectos gráficos
// Resetear variables
fijar [mi-variable] a (valor-inicial)

2. Patrón de Estado:

// Usar variables para controlar comportamiento
si <(estado-jugador) = [normal]> entonces
// comportamiento normal
si no
si <(estado-jugador) = [invencible]> entonces
// comportamiento especial
fin
fin

3. Patrón de Temporizador:

// Para eventos que ocurren cada cierto tiempo
si <(temporizador) > (ultimo-evento + intervalo)> entonces
// ejecutar evento
fijar [ultimo-evento] a (temporizador)
fin

1. Movimiento Orgánico:

// Movimiento que simula vida
por siempre
girar ↻ (número al azar entre (-5) y (5)) grados
mover (número al azar entre (1) y (3)) pasos
si <tocando [borde]?> entonces
girar ↻ (número al azar entre (90) y (270)) grados
fin
fin

2. Efectos de Partículas:

// Crear múltiples clones para efectos
repetir (20) veces
crear clon de [mí mismo]
fin
// En cada clon
al empezar como clon
apuntar en dirección (número al azar entre (1) y (360))
repetir (50) veces
mover (número al azar entre (1) y (5)) pasos
cambiar efecto [fantasma] por (2)
fin
borrar este clon

3. Inteligencia Artificial Simple:

// Enemigo que persigue al jugador
si <(distancia a [Jugador]) < [100]> entonces
apuntar hacia [Jugador]
mover (3) pasos
si no
// patrullar aleatoriamente
si <(número al azar entre (1) y (50)) = [1]> entonces
girar ↻ (número al azar entre (-45) y (45)) grados
fin
mover (1) pasos
fin

1. Interpolación Suave:

// Movimiento suave hacia un objetivo
fijar [objetivo-x] a (posición x del ratón)
fijar [diferencia] a ((objetivo-x) - (posición x))
cambiar x por ((diferencia) / (10)) // Ajusta velocidad

2. Física Simple:

// Gravedad y salto
cambiar [velocidad-y] por (-1) // Gravedad
si <tocando color [#00FF00]?> entonces // Suelo verde
fijar [velocidad-y] a (0)
si <tecla [espacio] presionada?> entonces
fijar [velocidad-y] a (15) // Salto
fin
fin
cambiar y por (velocidad-y)

3. Sistemas de Partículas:

// Generador de partículas
por siempre
esperar (número al azar entre (0.1) y (0.5)) segundos
crear clon de [Partícula]
fin
// Comportamiento de partícula
al empezar como clon
ir a x: (número al azar entre (-240) y (240)) y: (180)
fijar [velocidad] a (número al azar entre (2) y (8))
repetir hasta que <(posición y) < [-180]>
cambiar y por (0 - (velocidad))
cambiar efecto [fantasma] por (1)
fin
borrar este clon

¡Felicitaciones! Ahora tienes un conocimiento sólido sobre bloques y scripts en Scratch. Has aprendido:

Los diferentes tipos de bloques y cómo usarlos
Cómo construir scripts efectivos con patrones probados
Técnicas avanzadas para crear programas más sofisticados
Cómo debuggear y resolver problemas comunes
Mejores prácticas para organizar tu código
Combinaciones creativas para efectos únicos

  1. Practica creando scripts simples con diferentes tipos de bloques
  2. Experimenta con las combinaciones creativas mostradas
  3. Crea un proyecto pequeño aplicando los patrones aprendidos
  4. Explora proyectos de otros usuarios para ver técnicas nuevas
  5. Comparte tus creaciones y aprende de la comunidad

¿Listo para explorar sprites y disfraces? ¡Tu viaje de programación visual continúa! 🌟