 En el siguiente programa, también enlazado desde la documentación de bloque, hacemos uso de un par de instrucciones que nos sirven para enviar y recibir mensajes. En particular, la instrucción en la solapa de eventos. Enviar nos sirve para enviar un mensaje. Un mensaje es una forma de comunicarnos con el resto de objetos y los fondos que haya nuestro proyecto. Un objeto o el escenario pueden enviar un mensaje. El mensaje que se puede enviar es algunos de los que están definidos o bien un nuevo mensaje que nos podemos inventar. El texto del mensaje es más como una etiqueta y es importante o conveniente que sea algo significativo, dependiendo del tema de nuestro proyecto. Puede ser en realidad cualquier texto. El objeto que recibe el mensaje etiquetado, entonces, puede utilizar esta instrucción con sombrero, la del cabecero anaranjado, para recibir y comenzar a ejecutar un bloque de instrucciones. Recordamos que las instrucciones de tipo sombrero, como la de al presionar la bandera verde o al recibir un mensaje, sirven para que, solamente cuando se produzca la acción que viene ahí descrita, se ejecute las instrucciones que haya continuación. Empezamos a estudiar el código de Avi. Vemos que Avi tiene tres scripts o tres bloques de instrucciones. El primero de ellos es el que se ejecuta al presionar la bandera verde y simplemente pone el primer disfraz, que es lo que hacía en el programa anterior. Posteriormente, Avi ya no ejecuta nada. Sí que tiene otro bloque de instrucciones aquí, que se ejecutará cuando reciba este mensaje etiquetado o la chico, y este otro bloque de instrucciones que se ejecutará cuando reciba el mensaje etiquetado vacaciones chico. Esto quiere decir que al pulsar la bandera verde, el programa del objeto Avi simplemente cambiará un disfraz y no hará nada más hasta recibir estos mensajes etiquetados. Vamos a ver el código de Devin. Devin tiene estos tres scripts o estos tres bloques de instrucciones y vemos que también tienen la misma estructura. Tienen un programa que empieza con al presionar la bandera verde en el que cambiará el disfraz, dirá hola durante dos segundos y cuando termine enviará un mensaje etiquetado o la chico. El envío de un mensaje etiquetado es enviado a todos los objetos y al escenario, de forma que Avi, en particular, que es el otro objeto que en su código tiene la instrucción de recibir el mensaje etiquetado o la chico, va a ser el objeto que lo reciba. Por lo tanto, la ejecución de su segundo bloque de instrucciones comienza. Es importante no liarnos con la anotación. Cuando el chico dice hola, a esto no le vamos a llamar mensaje etiquetado, sino diálogo, para no confundirnos con el envío de mensajes etiquetados, los diálogos que con la instrucción decir, emiten un bocadillo con el texto hola durante dos segundos y después el chico va a enviar el mensaje etiquetado o la chico, que no se proyecta como un bocadillo con texto en la imagen. Este envío no provoca ningún cambio. Lo único que provoca es que se ejecute la instrucción de recepción en el código de Avi al recibir o la chico. Vamos a verlo. En Avi, al recibir el mensaje etiquetado o la chico, este es el código que se va a ejecutar. Luego, Devin no hace nada más hasta que no recibe uno de los dos mensajes etiquetados desde el otro objeto. Avi, que al tener este sombrero aquí y recibir el mensaje etiquetado o la chico, se pondrá a decir hola durante dos segundos y después enviará el mensaje etiquetado o la chica. ¿Tenemos algún objeto que tenga una instrucción al recibir o la chica? Sí, si nos vamos a Devin, vemos que tiene este programa que comienza con el sombrero al recibir o la chica. Y entonces al recibir el mensaje de Avi, dirá esto durante dos segundos y finalmente enviará el mensaje etiquetado vacaciones chico. ¿Hay algún programa en nuestro proyecto que tenga un sombrero al recibir vacaciones chico? Nos vamos a Avi y vemos que sí. Este último programa del objeto Avi, tras recibir el mensaje vacaciones chico, también cambia el disfraz, dice el último texto durante dos segundos, vuelve a cambiar el disfraz y para terminar envía el mensaje vacaciones chica. En Devin tenemos este último sombrero que comienza al recibir vacaciones chica. Esto activa el bloque de instrucciones iniciando el cambio de disfraz y por último dice genial y así concluye. Vemos que la ejecución de este programa produce los mismos efectos que la ejecución del programa anterior, pero en este caso la sincronización de las acciones entre los diferentes programas de los objetos Avi y Devin se produce mediante el envío y la recepción de mensajes. Ahora vemos que si Avi, como decíamos antes, cambia su programa y tarda más segundos, pongamos algo exagerado, cuatro segundos en decir este mensaje, todo sigue funcionando perfectamente porque Devin no se va a adelantar hasta que haya recibido el mensaje para decir su texto y esto no va a ocurrir hasta que terminen los cuatro segundos en mostrarse el diálogo Hola en pantalla. Vamos a ejecutarlo. Vamos a ver cómo definimos un nuevo mensaje. Vamos a hacer que Devin, tras decir el último diálogo, genial, envíe un nuevo mensaje etiquetado a Avi para que sea ésta la que tenga la última palabra. Para ello hacemos un nuevo mensaje. Lo definimos Habla tú finalmente. Ahora Devin va a enviar el mensaje Habla tú finalmente, pero en Avi todavía no hay un receptor de este mensaje. Si nos vamos al código de Avi, podemos crear un nuevo sombrero de recepción de mensajes. Vemos que ya está aquí el que acabamos de definir. Habla tú finalmente. En este caso, vamos a hacer que Avi diga un último diálogo. Queremos que digan, pues gracias, este es el final. Así vemos cómo hemos definido un nuevo mensaje etiquetado en Devin al introducir una nueva instrucción en enviar mensaje. Hemos escrito la etiqueta de texto del mensaje. Aquí en la chica hemos puesto el sombrero al recibir Habla tú finalmente para que ella sea la que tenga la última palabra. Ejecutamos el código y vemos que efectivamente tras realizar el diálogo de siempre, al acabar, es Devin el que manda el último mensaje etiquetado a Avi. Habla tú finalmente. Y Avi dice la última palabra. Por último, respecto al envío de recepción de mensajes, hay que comentar que esta otra instrucción que tenemos aquí nos permite enviar un mensaje y esperar hasta que todos los receptores de este mensaje lo hayan recibido. Hemos dicho antes que cuando enviamos un mensaje, el mensaje se envía a todos los que puedan estar interesados en recibirlo de forma que múltiples objetos pueden tener sombreros del tipo al recibir cierto mensaje.