🎨 Codificados por Color
Cada categoría tiene un color único que facilita la identificación y organización.
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:
Ejemplos Comunes:
al presionar ⚑al hacer clic en este objetoal presionar tecla [espacio]al recibir [mensaje1]al empezar como clon
Cuándo Usar:
Características:
Ejemplos por Categoría:
mover (10) pasosgirar ↻ (15) gradosir a x: (0) y: (0)apuntar hacia (puntero del ratón)
Uso típico: Controlar posición y orientación de sprites
decir [¡Hola!] por (2) segundoscambiar a disfraz [disfraz2]fijar tamaño a (150) %mostraresconder
Uso típico: Cambiar cómo se ve y qué dice un sprite
tocar sonido [Miau]empezar sonido [Música]parar todos los sonidosfijar volumen a (50) %
Uso típico: Controlar efectos de sonido y música
fijar [mi variable] a (0)cambiar [mi variable] por (1)añadir [elemento] a [mi lista]
Uso típico: Almacenar y modificar datos
Características:
Tipos Principales:
repetir (10) veces // bloques internos se ejecutan 10 vecesfin
por siempre // bloques internos se ejecutan infinitamentefin
repetir hasta que <condición> // bloques internos se ejecutan hasta que la condición sea verdaderafin
si <condición> entonces // se ejecuta solo si la condición es verdaderafin
si <condición> entonces // se ejecuta si es verdaderasi no // se ejecuta si es falsafin
definir [mi bloque] // código personalizado que puedes reutilizarfin
Características:
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 bloquesir 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:
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) gradosfin
repetir hasta que <(puntos) > (50)> // seguir jugando hasta conseguir 50 puntosfin
Propósito: Controlar posición, dirección y movimiento de sprites
Bloques Esenciales:
mover (10) pasos
- Movimiento básicoir a x: (0) y: (0)
- Posicionamiento absolutoapuntar en dirección (90)
- Control de orientaciónrebotar si toca un borde
- Comportamiento automáticoEjemplo de Script:
al presionar ⚑apuntar en dirección (90)por siempre mover (5) pasos rebotar si toca un bordefin
Propósito: Controlar cómo se ven los sprites y qué dicen
Bloques Esenciales:
decir [texto]
- Comunicacióncambiar a disfraz [nombre]
- Cambio de aparienciafijar tamaño a (100) %
- Control de escalafijar efecto [color] a (50)
- Efectos visualesEjemplo de Script:
al hacer clic en este objetodecir [¡Hola!] por (2) segundoscambiar a disfraz [feliz]fijar efecto [brillo] a (25)esperar (1) segundosquitar efectos gráficos
Propósito: Reproducir y controlar audio
Bloques Esenciales:
tocar sonido [nombre]
- Reproducción básicaempezar sonido [nombre]
- Reproducción sin esperarfijar volumen a (100) %
- Control de volumenparar todos los sonidos
- Control de audioPropósito: Detectar y responder a acciones del usuario y del programa
Bloques Esenciales:
al presionar ⚑
- Inicio del programaal presionar tecla [espacio]
- Respuesta a tecladoal hacer clic en este objeto
- Interacción con ratónal recibir [mensaje]
- Comunicación entre spritesPropósito: Controlar el flujo y la lógica del programa
Bloques Esenciales:
esperar (1) segundos
- Pausas temporalesrepetir (10) veces
- Bucles con contadorpor siempre
- Bucles infinitossi <condición> entonces
- DecisionesPropó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 distanciasPropó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 textoPropósito: Almacenar y manipular datos
Bloques Esenciales:
fijar [variable] a (valor)
- Asignacióncambiar [variable] por (1)
- Modificación(variable)
- Acceso al valorañadir [elemento] a [lista]
- Gestión de listasUn 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 finfin
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) %mostrarquitar efectos gráficosfijar [puntos] a (0)fijar [vidas] a (3)
Cuándo usar: Al inicio de cada sprite para establecer condiciones conocidas
Propósito: Crear movimiento que nunca se detiene
al presionar ⚑por siempre mover (3) pasos rebotar si toca un borde esperar (0.05) segundos // Controla la velocidadfin
Cuándo usar: Para enemigos, proyectiles, o elementos que se mueven constantemente
Propósito: Responder a la entrada del usuario
al presionar ⚑por siempre si <tecla [flecha arriba] presionada?> entonces cambiar y por (5) fin si <tecla [flecha abajo] presionada?> entonces cambiar y por (-5) fin si <tecla [flecha derecha] presionada?> entonces cambiar x por (5) fin si <tecla [flecha izquierda] presionada?> entonces cambiar x por (-5) finfin
Cuándo usar: Para personajes controlados por el jugador
Propósito: Responder a situaciones específicas
al presionar ⚑por siempre si <tocando [Jugador]?> entonces cambiar [puntos] por (10) tocar sonido [ding] esconder esperar (3) segundos ir a x: (número al azar entre (-200) y (200)) y: (número al azar entre (-150) y (150)) mostrar finfin
Cuándo usar: Para objetos coleccionables, power-ups, o elementos interactivos
Propósito: Crear efectos visuales y animaciones
al recibir [explotar]repetir (10) veces cambiar efecto [brillo] por (10) cambiar tamaño por (5) esperar (0.1) segundosfinesconder
Cuándo usar: Para efectos especiales, transiciones, o feedback visual
1. Un Script, Una Responsabilidad
// BUENO: Script dedicado solo al movimientoal presionar ⚑por siempre si <tecla [flecha derecha] presionada?> entonces cambiar x por (5) finfin
// Script separado para animaciónal presionar ⚑por siempre si <tecla [flecha derecha] presionada?> entonces cambiar a disfraz [caminando] si no cambiar a disfraz [parado] finfin
2. Inicialización Clara
// Siempre inicializa al principioal presionar ⚑// Posiciónir a x: (0) y: (0)// Aparienciamostrarfijar tamaño a (100) %// Variablesfijar [velocidad] a (5)fijar [puntos] a (0)
3. Uso de Variables para Flexibilidad
// MALO: Números mágicosmover (5) pasosesperar (0.1) segundos
// BUENO: Variables descriptivasmover (velocidad) pasosesperar (retraso-animación) segundos
Usando Mensajes:
// Script 1: Detecta colisiónsi <tocando [Enemigo]?> entonces enviar [jugador-dañado]fin
// Script 2: Responde al dañoal recibir [jugador-dañado]cambiar [vidas] por (-1)fijar efecto [fantasma] a (50)esperar (1) segundosfijar efecto [fantasma] a (0)
Usando Variables Globales:
// Script 1: Modifica estadosi <tecla [p] presionada?> entonces si <(juego-pausado) = [falso]> entonces fijar [juego-pausado] a [verdadero] si no fijar [juego-pausado] a [falso] finfin
// Script 2: Responde al estadopor siempre si <(juego-pausado) = [falso]> entonces // lógica normal del juego finfin
// 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 finfin
Evitar Bucles Innecesarios:
// MALO: Verifica constantementepor siempre si <tecla [espacio] presionada?> entonces // acción finfin
// BUENO: Usa eventosal presionar tecla [espacio]// acción
Limitar Frecuencia de Verificación:
// Para verificaciones costosaspor siempre // verificación compleja esperar (0.1) segundos // No verificar cada framefin
// Sprite principal: Creador de proyectilesal presionar tecla [espacio]crear clon de [mí mismo]
// Comportamiento del clonal empezar como clonapuntar hacia (puntero del ratón)repetir hasta que <tocando [borde]?> mover (10) pasos si <tocando [Enemigo]?> entonces enviar [enemigo-destruido] borrar este clon finfinborrar este clon
Síntomas:
Causas Comunes:
Soluciones:
// Asegúrate de tener un evento iniciadoral 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 testingsi <verdadero> entonces // Siempre se ejecuta decir [¡Funciona!]fin
Síntomas:
Causas Comunes:
Soluciones:
// MALO: Sin pausapor siempre cambiar [contador] por (1)fin
// BUENO: Con pausapor siempre cambiar [contador] por (1) esperar (0.01) segundos // ← Pausa pequeñafin
// Para bucles "repetir hasta que"repetir hasta que <(contador) > (100)> cambiar [contador] por (1) // ← Asegúrate de que la condición cambiefin
Síntomas:
Causas Comunes:
Soluciones:
// Siempre inicializaal presionar ⚑fijar [puntos] a (0) // ← Estado conocido
// Verifica en qué sprite estás modificando// Las variables "para todos los objetos" se comparten// Las variables "solo para este objeto" son independientes
// Debug: Muestra valoresdecir (unir [Puntos: ] (puntos))
Síntomas:
¿tocando?
no detecta contactoCausas Comunes:
Soluciones:
// Verifica visibilidadmostrar // Asegúrate de que el sprite es visible
// Ajusta tamaño si es necesariofijar tamaño a (100) % // Tamaño razonable
// Reduce velocidad para mejor detecciónmover (2) pasos // En lugar de (10) pasos
// Verifica múltiples condicionessi <<tocando [Jugador]?> y <no <(efecto fantasma) = [100]>>> entonces // Solo si está tocando Y es visiblefin
1. Usar Bloques “Decir” para Debug:
// Mostrar valores de variablesdecir (unir [X: ] (unir (posición x) (unir [ Y: ] (posición y))))
// Confirmar que el código se ejecutadecir [Llegué aquí] por (1) segundos
// Mostrar estado de condicionessi <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 finfin
// Script simplificado para testingal presionar ⚑por siempre si <tecla [flecha derecha] presionada?> entonces decir [Tecla presionada!] finfin
3. Usar Efectos Visuales para Debug:
// Resaltar cuando ocurren eventossi <tocando [Enemigo]?> entonces fijar efecto [brillo] a (100) // Destello visual esperar (0.2) segundos quitar efectos gráficosfin
1. Agrupa Scripts por Función:
2. Usa Nombres Descriptivos:
// Variables descriptivasfijar [velocidad-jugador] a (5)fijar [puntos-totales] a (0)fijar [tiempo-restante] a (60)
// Mensajes descriptivosenviar [jugador-obtuvo-powerup]enviar [nivel-completado]enviar [enemigo-derrotado]
3. Comenta tu Código:
// Usa bloques "decir" como comentarios durante desarrollodecir [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 estoal presionar ⚑// Resetear posiciónir a x: (posición-inicial-x) y: (posición-inicial-y)// Resetear aparienciamostrarfijar tamaño a (100) %quitar efectos gráficos// Resetear variablesfijar [mi-variable] a (valor-inicial)
2. Patrón de Estado:
// Usar variables para controlar comportamientosi <(estado-jugador) = [normal]> entonces // comportamiento normalsi no si <(estado-jugador) = [invencible]> entonces // comportamiento especial finfin
3. Patrón de Temporizador:
// Para eventos que ocurren cada cierto tiemposi <(temporizador) > (ultimo-evento + intervalo)> entonces // ejecutar evento fijar [ultimo-evento] a (temporizador)fin
1. Movimiento Orgánico:
// Movimiento que simula vidapor 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 finfin
2. Efectos de Partículas:
// Crear múltiples clones para efectosrepetir (20) veces crear clon de [mí mismo]fin
// En cada clonal empezar como clonapuntar 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)finborrar este clon
3. Inteligencia Artificial Simple:
// Enemigo que persigue al jugadorsi <(distancia a [Jugador]) < [100]> entonces apuntar hacia [Jugador] mover (3) pasossi 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) pasosfin
1. Interpolación Suave:
// Movimiento suave hacia un objetivofijar [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 saltocambiar [velocidad-y] por (-1) // Gravedadsi <tocando color [#00FF00]?> entonces // Suelo verde fijar [velocidad-y] a (0) si <tecla [espacio] presionada?> entonces fijar [velocidad-y] a (15) // Salto finfincambiar y por (velocidad-y)
3. Sistemas de Partículas:
// Generador de partículaspor siempre esperar (número al azar entre (0.1) y (0.5)) segundos crear clon de [Partícula]fin
// Comportamiento de partículaal empezar como clonir 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)finborrar 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
¿Listo para explorar sprites y disfraces? ¡Tu viaje de programación visual continúa! 🌟