Buenas, el ejercicio 1 funciona correctamente. Hay una cosa que no me parece demasiado "limpia". Si el usuario acierta el número, para forzar la salida del bucle de solicitud de número escribes i=31; Esto en cierta medida es decir, si el usuario lleva 6 intentos y acierta el número, para salir decimos que el usuario lleva 30 intentos. Esto aunque funcione puede generar problemas de depuración en programas largos. Imagina que en un momento dado se decide mostrar el número de intentos que ha tardado en acertar el número. Ahí podrían venir problemas. Desde mi punto de vista sería más adecuado que en la propia condición del bucle se controlara si lleva menos de 30 y no ha acertado, en lugar de valernos de "un truco".
Otra cosa que no veo correcta del ejercicio 1 es que empiece diciendo "Le quedan 29 intentos" y que termine dicendo "Le quedan 0 intentos". Creo que sería preferible que empezara diciendo que le quedan 30 intentos y que terminara diciendo que le queda 1 intento.
El ejercicio 2 y 3 todo bien. Bueno, a mí me ha mareado un poco que el texto volador vaya cambiando de colores

Salu2