<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Desarrollo on Christian Martínez De La Rosa</title><link>https://christt105.github.io/es/tags/desarrollo/</link><description>Recent content in Desarrollo on Christian Martínez De La Rosa</description><generator>Hugo -- gohugo.io</generator><language>es</language><lastBuildDate>Sat, 11 Jul 2026 00:00:00 +0200</lastBuildDate><atom:link href="https://christt105.github.io/es/tags/desarrollo/index.xml" rel="self" type="application/rss+xml"/><item><title>Impartiendo un Taller de Creación de Videojuegos con Unity y Godot</title><link>https://christt105.github.io/es/blog/citm-game-workshop/</link><pubDate>Sat, 11 Jul 2026 00:00:00 +0200</pubDate><guid>https://christt105.github.io/es/blog/citm-game-workshop/</guid><enclosure url="https://christt105.github.io/blog/citm-game-workshop/cover.png" length="1160150" type="image/png"/><description>&lt;p&gt;¡Hola de nuevo!&lt;/p&gt;
&lt;p&gt;Esta semana he estado bastante liado impartiendo un taller a adolescentes sobre desarrollo de videojuegos. Ya es el segundo año que me meto en este lío y, por suerte, ha salido bastante mejor que el anterior.&lt;/p&gt;
&lt;p&gt;La verdad es que enseñar siempre me ha gustado. No soy el mejor profesor del mundo, pero intento que los conceptos queden claros. Disfruto mucho preparando los materiales, explicándolos y, sobre todo, viendo cómo ellos también me enseñan cosas a mí.&lt;/p&gt;
&lt;p&gt;La oportunidad surgió en la universidad donde estudié, en colaboración con el ayuntamiento, como parte de un programa para fomentar la universidad entre los jóvenes.&lt;/p&gt;
&lt;h2 id="el-año-pasado-mi-primera-experiencia"&gt;El año pasado: Mi primera experiencia
&lt;/h2&gt;&lt;p&gt;El año pasado tuve estudiantes desde primero hasta cuarto de la ESO, y la verdad es que me pasé bastante con el material. En mi defensa diré que era mi primera experiencia y que me habían dicho que los alumnos serían mayores. El formato era de 4 días, a tres horas por día.&lt;/p&gt;
&lt;p&gt;Para añadir algo de contexto, a principios de ese mismo año había hecho un taller de solo dos horas con alumnos de cuarto de la ESO y Bachillerato. Al tener tan poco tiempo, me decanté por hacer un clon de Flappy Bird en Unity. La idea era darles un proyecto vacío con los sprites y programarlo entre todos. Con llegar a que el pájaro saltara y las tuberías aparecieran, ya era suficiente para una primera toma de contacto.&lt;/p&gt;
&lt;p&gt;Por si a alguien le sirve, el material de ese taller lo tenéis aquí:&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/christt105/FlappyBirdUnityWorkshop" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/36189169?v=4" alt="christt105 avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 christt105/FlappyBirdUnityWorkshop&lt;/h3&gt;
 &lt;p&gt;A beginner-friendly Unity project for teens to learn 2D game development&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 1&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2025-03-17&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;&lt;img alt="Flappy Bird Clone hecho en Unity" class="gallery-image" data-flex-basis="136px" data-flex-grow="56" height="868" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/flappy_bird.png" width="492"&gt;&lt;/p&gt;
&lt;p&gt;Como el taller de verano eran cuatro días seguidos, pensé ingenuamente que daría tiempo a acabar el Flappy Bird y que necesitaría más juegos para rellenar. Decidí hacer un juego por día para que, si alguien faltaba, al día siguiente pudiera empezar de cero con el resto. Preparé un Pong (Unity), el Flappy Bird (Unity), un Asteroids (Godot) y un plataformas 3D (Godot).&lt;/p&gt;
&lt;p&gt;Hacer el Flappy Bird fue medio obligación, ya que habían publicitado el taller usando el logo de Unity. Yo insistí bastante en que Godot era mucho mejor para adolescentes. Pesa apenas 100MB, es descargar y abrir. Nada de los 15GB de Unity ni la tortura de obligar a los chavales a crearse cuentas. Además, los tiempos de compilación en Unity en ordenadores poco potentes son un horror, y GDScript es mucho más limpio para ellos. Fui bastante pesado para colar Godot en el temario, y la verdad que salió bien. Otra cosa no, pero convenciendo sobre productos por los que no me paga nadie, soy un genio.&lt;/p&gt;
&lt;p&gt;Al final, la cosa fue algo peor de lo que esperaba. Aunque se lo pasaron muy bien, no dio tiempo a acabar casi ningún juego. A los más pequeños les costaba la vida seguir el ritmo, y tenía que ir uno por uno arreglando lo que tocaban, lo que dejaba a los mayores esperando aburridos.&lt;/p&gt;
&lt;p&gt;El mejor día fue, sin duda, el último, con el plataformas 3D. Preparé una versión modificada del excelentísimo &lt;em&gt;Starter-Kit&lt;/em&gt; de Kenney. Borré un par de líneas para que el personaje no se moviera de inicio, las programamos juntos rápido y, a partir de ahí, les dejé crear sus propios niveles arrastrando plataformas y monedas. Se lo pasaron muy bien. Algunos hasta sacaron papel y boli para diseñar los niveles antes de montarlos.&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/KenneyNL/Starter-Kit-3D-Platformer" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/6953026?v=4" alt="KenneyNL avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 KenneyNL/Starter-Kit-3D-Platformer&lt;/h3&gt;
 &lt;p&gt;Godot&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 1181&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 173&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2026-07-22&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;&lt;img alt="Juego de Plataformas 3D en Godot" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="719" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/platformer3D.png" srcset="https://christt105.github.io/blog/citm-game-workshop/platformer3D_hu_ff141ec196888488.png 800w, https://christt105.github.io/blog/citm-game-workshop/platformer3D.png 1279w" width="1279"&gt;&lt;/p&gt;
&lt;h2 id="este-año-mejorando-la-fórmula"&gt;Este año: Mejorando la fórmula
&lt;/h2&gt;&lt;p&gt;Para este año quería mejorar la experiencia. Como no me dieron mucha más información, asumí que tendría el mismo rango de edades. Usé el mismo repositorio que el año pasado:&lt;/p&gt;
&lt;a class="github-repo-card" href="https://github.com/christt105/CITMGameWorkshop" target="_blank" rel="noopener"&gt;
 &lt;img src="https://avatars.githubusercontent.com/u/36189169?v=4" alt="christt105 avatar" class="repo-avatar"&gt;
 &lt;h3&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-brand-github" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;
 &lt;path d="M9 19c-4.3 1.4 -4.3 -2.5 -6 -3m12 5v-3.5c0 -1 .1 -1.4 -.5 -2c2.8 -.3 5.5 -1.4 5.5 -6a4.6 4.6 0 0 0 -1.3 -3.2a4.2 4.2 0 0 0 -.1 -3.2s-1.1 -.3 -3.5 1.3a12.3 12.3 0 0 0 -6.2 0c-2.4 -1.6 -3.5 -1.3 -3.5 -1.3a4.2 4.2 0 0 0 -.1 3.2a4.6 4.6 0 0 0 -1.3 3.2c0 4.6 2.7 5.7 5.5 6c-.6 .6 -.6 1.2 -.5 2v3.5" /&gt;
&lt;/svg&gt;


 christt105/CITMGameWorkshop&lt;/h3&gt;
 &lt;p&gt;&lt;/p&gt;
 &lt;div class="repo-stats"&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" class="icon icon-tabler icons-tabler-filled icon-tabler-star"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M8.243 7.34l-6.38 .925l-.113 .023a1 1 0 0 0 -.44 1.684l4.622 4.499l-1.09 6.355l-.013 .11a1 1 0 0 0 1.464 .944l5.706 -3l5.693 3l.1 .046a1 1 0 0 0 1.352 -1.1l-1.091 -6.355l4.624 -4.5l.078 -.085a1 1 0 0 0 -.633 -1.62l-6.38 -.926l-2.852 -5.78a1 1 0 0 0 -1.794 0l-2.853 5.78z" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-git-fork"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M10 18a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M5 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M15 6a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" /&gt;&lt;path d="M7 8v2a2 2 0 0 0 2 2h6a2 2 0 0 0 2 -2v-2" /&gt;&lt;path d="M12 12l0 4" /&gt;&lt;/svg&gt; 0&lt;/span&gt;
 &lt;span&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-tabler icons-tabler-outline icon-tabler-calendar-event"&gt;&lt;path stroke="none" d="M0 0h24v24H0z" fill="none"/&gt;&lt;path d="M4 7a2 2 0 0 1 2 -2h12a2 2 0 0 1 2 2v12a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2l0 -12" /&gt;&lt;path d="M16 3l0 4" /&gt;&lt;path d="M8 3l0 4" /&gt;&lt;path d="M4 11l16 0" /&gt;&lt;path d="M8 15h2v2h-2l0 -2" /&gt;&lt;/svg&gt; 2026-07-09&lt;/span&gt;
 &lt;/div&gt;
 &lt;/a&gt;
&lt;p&gt;La decisión más importante fue recortar contenido. Cuatro juegos eran demasiados, así que me quedé con los dos más visuales: Flappy Bird y el plataformas 3D. Así teníamos dos días de Unity y dos de Godot. Quizá usar dos motores les podía confundir un poco, pero me interesaba que vieran que hay varias herramientas con sus pros y contras (y porque la organización quería Unity y yo Godot, para qué mentir).&lt;/p&gt;
&lt;p&gt;El primer día lo planteé igual: proyecto vacío y hacer el Flappy Bird entre todos. El segundo día les pasé el proyecto ya avanzado, borré algunas partes para rellenarlas juntos y les dejé tiempo libre para añadir mecánicas y cambiar los sprites.&lt;/p&gt;
&lt;p&gt;El tercer día lo dedicamos a rellenar código para crear las mecánicas base del plataformas, y el último día fue enteramente para que crearan su propio nivel mientras yo les ayudaba a programar cualquier cosa que se les ocurriera.&lt;/p&gt;
&lt;h2 id="usando-ia-para-mejorar-el-material"&gt;Usando IA para mejorar el material
&lt;/h2&gt;&lt;p&gt;Cuando estaba preparando todo esto para este año, aún tenía la suscripción a Claude, así que decidí aprovecharla para hacer cosas que por tiempo (o pereza) no habría hecho.&lt;/p&gt;
&lt;p&gt;El año pasado noté que los más autónomos se aburrían si yo estaba ayudando a los más pequeños. Así que le pedí a Claude que me generara unas guías paso a paso para que los que iban perdidos pudieran repasar, y los avanzados pudieran añadir mecánicas extra por su cuenta.&lt;/p&gt;
&lt;p&gt;Las guías estaban genial, pero en formato archivo iban a ser un poco complejo de consultar para ellos. Como GitHub Pages es súper fácil de usar, le pedí a la IA que montara una web sencilla con las guías. Quedó exactamente como quería: accesible y muy visual. También integré las presentaciones usando un formato de diapositivas en Markdown (Marp) que me enseñó Claude. Todo quedó en un único punto de consulta con enlaces de descarga. La web es esta: &lt;a class="link" href="https://christt105.github.io/CITMGameWorkshop/" target="_blank" rel="noopener"
 &gt;CITMGameWorkshop&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Página Web del Taller" class="gallery-image" data-flex-basis="162px" data-flex-grow="67" height="1892" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://christt105.github.io/blog/citm-game-workshop/web_screenshot.png" srcset="https://christt105.github.io/blog/citm-game-workshop/web_screenshot_hu_efb84d1ed027f92f.png 800w, https://christt105.github.io/blog/citm-game-workshop/web_screenshot.png 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;Por último, el tema de tener una rama con la solución y otra con la plantilla era un caos de mantener. La IA me dio la idea de usar comentarios específicos en el código completo. Monté un CI en GitHub Actions que, al hacer push, busca esos comentarios, elimina los trozos de código correspondientes y actualiza la &lt;em&gt;release&lt;/em&gt; con la plantilla lista para los alumnos. Una maravilla que, sin IA, se salía totalmente de mi scope para el tiempo que tenía. No concibo usar regex sin IA.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Script que uso en el CI para generar la plantilla vacía&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;glob&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;glob&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;FlappyBirdWorkshop/Assets/Scripts/**/*.cs&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;recursive&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# Elimina todo el código de solución entre los marcadores&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;([ \t]*)// &amp;lt;SOL&amp;gt;.*?[ \t]*// &amp;lt;/SOL&amp;gt;\n?&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;\1\n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DOTALL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Por ejemplo, para el plataformas 3D en Godot, el código se ve así en el repositorio principal, y el CI se encarga de eliminar las líneas rojas dejándolo listo para los alumnos:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-diff" data-lang="diff"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; func _physics_process(delta):
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # TODO: Aplica la gravedad al personaje
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- # &amp;lt;SOL&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- velocity.y -= gravity * delta
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gd"&gt;- # &amp;lt;/SOL&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="el-desarrollo-del-taller"&gt;El desarrollo del taller
&lt;/h2&gt;&lt;p&gt;El taller de este año ha ido fenomenal. Para mi sorpresa, todos los alumnos eran de tercero y cuarto de la ESO, así que el nivel estaba mucho más unificado. Estuvieron súper concentrados, sin necesidad de ir detrás de ellos, y no pararon de hacer preguntas y tener ideas.&lt;/p&gt;
&lt;p&gt;Mi objetivo principal era despertar su creatividad, y el último día fue un éxito total. Un chaval descubrió que si emparentaba objetos, se movían juntos. Así que hizo una plataforma que se caía al pisarla y le colgó un montón de pinchos mortales. Básicamente, si pisabas, te caía una lluvia de pinchos que tenías que esquivar. Otro alumno se montó un sistema de &amp;ldquo;diálogos&amp;rdquo; muy guay usando áreas y triggers que habíamos visto por encima. Todos terminaron su nivel y acabaron jugando a los de los demás.&lt;/p&gt;
&lt;p&gt;Al final les pregunté qué motor les había gustado más, y la mayoría dijo Godot. Para un taller es imbatible: en 10 minutos ya lo tenían todos descargado, abierto y listo. Con Unity siempre se pierde mucho más tiempo, y como a alguno le falle el login de la cuenta, ya vas con retraso.&lt;/p&gt;
&lt;h2 id="conclusiones"&gt;Conclusiones
&lt;/h2&gt;&lt;p&gt;Aunque este año ha ido genial, creo que va a ser la última vez que haga el taller, mi Last Dance. He cambiado de trabajo, el horario es más estricto y esta vez he tenido que gastar más días de vacaciones para poder darlo. Me gusta mucho hacerlo, pero no sé si me compensa perder esos días.&lt;/p&gt;
&lt;p&gt;Si tuviera que repetirlo, tengo claras un par de cosas: lo haría 100% en Godot. Haría el Flappy Bird en Godot para que el editor les suene desde el primer día. Y el día del plataformas 3D les daría un proyecto con muchas mecánicas ya hechas para que no se agobien programando y se centren en diseñar niveles y arrastrar objetos desde el minuto uno.&lt;/p&gt;
&lt;p&gt;Me lo he pasado muy bien estos cuatro días. La organización también se quedó muy contenta viendo lo que los chavales habían logrado el último día. Parece que ya los he convencido que se podría hacer todo con Godot. Yo me llevo un buen aprendizaje sobre cómo tratar y enseñar a adolescentes. Al final, lo más importante en estas edades es fomentarles el esfuerzo, la creatividad y que vean que son capaces de crear cosas de las que sentirse orgullosos.&lt;/p&gt;
&lt;p&gt;Os dejo, que el post me ha quedado algo extenso. ¡Nos vemos en el próximo post!&lt;/p&gt;</description></item></channel></rss>