Este vídeo es presentado
por Nebula Classes. Hola y bienvenido a un
desafío de codificación muy especial aquí en The Coding Train. Ahora, no estoy seguro de cuándo
estás viendo esto. Si tuviera que adivinar,
probablemente sería dentro de unos 40 años . Voy a intentar
programar mi desafío de codificación más popular en esta computadora Apple II
Plus en Apple Basic. Ahora bien, si nunca antes has programado
en Básico, no te preocupes. Voy a mostrarte todo lo que
necesitas saber, paso a paso, mientras intento hacer este juego. Empecemos. (CANTO) Codificando juntos. Siempre seremos mejores
amigos para siempre. Estaré allí cuando sea. Si te sientes deprimido, lo
haré mejor. Nadie puede medir
el bucle for que tenemos: la alegría, el placer. Así que vámonos a
disfrutar del clima. Estos son los días que
siempre atesoraré. [REPRODUCCIÓN DE MÚSICA] Oh, cariño, estamos codificando juntos. Siempre seremos mejores
amigos para siempre.
Codificando juntos. Codificando juntos. DE ACUERDO. La plantilla ha terminado. Son gafas falsas. No hay
lentes recetados en ellos. No puedo ver nada. Me pondré mis
gafas de verdad, ¿vale? Hoy es… dispara. Este reloj Casio no
me dice la hora ni la fecha correcta. Es agosto de 2022. Aquí estoy. Esta es la
computadora Apple II Plus de mi infancia. Comencemos a
mirar el código básico. Entonces, lo primero que
quiero mostrarles es que justo en
el símbolo del sistema, con ese cursor parpadeante,
puedo escribir código, como Imprimir… [CLICK DEL TECLADO] Oh, escuche ese
hermoso teclado… "¡Hola, mundo!" También puedo poner una línea
de código en un programa escribiendo un número de línea. Así es. De hecho, tengo que especificar
un número de línea, como la línea 10. No hay un editor de texto para mí con
números de línea automatizados y todas esas
cosas sofisticadas que tienes en el futuro. Ahora puedo escribir Lista y puedo
ver el contenido de mi programa. Puedo escribir Ejecutar y
puedo ejecutar el programa.
Imprime ¡Hola mundo! Incluso puedo agregar
otra línea de código, uno de mis comandos favoritos:
GoTo 10. Puedo ponerlo en la línea 20. Escriba Inicio para borrar la pantalla,
Lista, ejecute este programa. Y aquí vamos. Se va a
imprimir ¡Hola mundo! por los siglos de los siglos hasta que
apago la computadora y la vuelvo a encender. [PITIDO] Oh, hermoso pitido. Así que,
por supuesto, Basic es mucho más que eso. Tengo un manual completo aquí. Me encantaría hacer
muchos videos sobre esto.
Entonces, si te gusta este,
déjame saber en los comentarios que te gustaría ver
más videos de Apple II. Pero veamos hasta dónde
puedo llegar mostrándoles todo lo que
hay que saber ( o lo que yo sé)
sobre AppleSoft Basic simplemente creando el juego Snake. Ahora, una de las cosas que
encontraría en este manual es el hecho de que
hay un modo de gráficos. Y creo que si escribo G-R,
entrará en modo de gráficos. Eso fue algo genial. E incluso está
HGR, que entrará en un modo de gráficos de alta resolución.
Quizás eso quede para otro momento. Hoy voy a
intentar crear Snake simplemente imprimiendo personajes
en ubicaciones específicas de la pantalla y
animándolos. Entonces, lo primero que
quiero hacer… tengo que salir
del modo de gráficos. Trama, PDL, texto… ah. Creo que simplemente escribo Texto. Y estoy de vuelta en modo texto. DE ACUERDO. ¡ No necesito Google! Tengo un manual. Tomen eso, futuros programadores. Así que voy a
empezar mi programa en la línea 10 con Inicio. Entonces, cada vez que lo ejecuto,
comenzará limpiando la pantalla. También quiero realizar un seguimiento
de los datos asociados con el programa Snake, el
ancho y alto de mi lienzo, por así decirlo, así
como la posición x e y de la serpiente misma
y el trozo de comida que está tratando de comer. Entonces necesito algunas variables. Esta es
una pantalla de 40 por 24. Y sea W igual a 40, ese soy
yo creando una variable, asignándole el valor de 40. Y de hecho también puedo
decir que H sea igual a 24. Así que puedo poner dos líneas de
código, esencialmente, en una uniéndolas con dos puntos.
Y podemos echar un
vistazo al programa. Y vemos lo que tengo hasta ahora. Ahora, aquí es importante
que deje espacio entre la línea 10
y la línea 20 porque ¿adivinen qué? Si quiero poner una línea
de código entre ellas, no tengo que copiar y pegar. No puedo mover cosas
, ni editar. De hecho, tendría que
escribir una nueva línea de código. Y ahora, sólo puedo poner… 1, 2, 3, 4, 5, 6, 7,
8, 9… líneas de código entre 10 y 20. Hasta ahora, no necesito eso. Comencemos con la
posición x de la serpiente. Así que simplemente diré x… y en el medio
de la pantalla… y. DE ACUERDO. Entonces, ¿cómo coloco un personaje
en una ubicación particular? Podría
buscarlo en el manual. Pero resulta que sé que
los comandos son HTab y VTab para
posición horizontal y vertical. Y luego, puedo decir
Imprimir, y usemos S. Y digamos rápidamente
Ir a 40 en la línea 60, para que el programa siga
ejecutándose, algo así como un bucle de dibujo, por así decirlo. [DING] Y ahí vamos.
Tengo una S justo en el medio de la pantalla.
Y puedo presionar Control-C para
salir del programa en la línea 60. Lo siguiente que me gustaría
hacer es animar S. Entonces, en lugar de simplemente
imprimirlo en una ubicación, quiero incrementar el valor
de x e imprimirlo. de nuevo. Incrementa el valor de
x e imprímelo nuevamente. O en realidad, y o decremento
basado en la interacción del teclado. Ahora me doy cuenta de que solo
tengo flechas izquierda y derecha. No hay flechas hacia arriba y hacia abajo
en este teclado. Entonces usemos W para arriba,
S para abajo, A para izquierda, D para derecha. Necesito manejar la
interacción del teclado. Ah, ja. Me gustaría tener una
función separada que se encargue de leer la
entrada del teclado y luego cambiar los valores de
xey en función de cualquier entrada que reciba del teclado. ¿ Cómo escribo una función? Bueno, otra palabra que
podría usar es subrutina.
Y de hecho, eso es exactamente
lo que voy a hacer. Y si crees que te
gustó el comando Ir a, bueno, tengo noticias para ti. Hay otro comando que
me encanta aún más llamado GoSub o Go Subroutine. Así que en realidad voy
a borrar la línea 60 y decir: vaya a GoSub,
algún número de línea muy, muy lejano que no pueda
estropear con las líneas de código que estoy escribiendo ahora mismo, digamos 1000. Luego, agregaré mi
línea GoTo 40 nuevamente en la línea 70. Ahora, necesito escribir mi
subrutina, mi función, en la línea 1000. ¿ Qué debo hacer? Necesito escribir una línea de
código que me diga qué tecla se presionó por última vez en el teclado. Y esa información
se encuentra en algún lugar de la memoria de la computadora. Y si tan solo pudiera acceder
a la memoria de la computadora.
Sé que está en este manual aquí. Pero también es… ven conmigo. También está aquí
en este cartel: Peeks, Pokes y Pointers. Si quiero leer la
memoria de la computadora directamente, puedo simplemente echar un vistazo a la memoria. Si quiero escribir en
la memoria de la computadora, puedo hurgar en la memoria. Tenemos acceso directo a
la memoria del ordenador. Y en algún lugar de
aquí, me va a decir que para
leer el teclado, necesito mirar la
dirección de memoria 49152. Así que voy a
poner una variable, llamémosla K. Peek… echemos un vistazo a la
dirección de memoria 49152. Luego, sólo para
fines de depuración, imprimamos ese valor. Y luego, cuando la
subrutina haya terminado, debemos regresar al lugar donde
estábamos anteriormente en el código.
Esa es la línea 70. Y la forma en que lo hacemos
es con Return. Echemos un vistazo al
programa completo nuevamente. Y vamos a intentarlo. Entonces, la última tecla presionada fue 13. No estoy seguro de qué presioné
para obtener el valor de 13. Pero veamos qué es W: 215. S es 211. 196 es D. 193 es A. Entonces, en la línea
10, I Voy a preguntar si K es… igual a… y, por cierto,
esta es una declaración if. Así es como se escribe una
declaración if en Apple Basic. Creo que 196 era D? Entonces x es igual a x más 1.
Así que solo verifiquemos
si presionamos hacia la derecha. Así que creo que si presiono D… ahí vamos. ¡ Vaya! DE ACUERDO. Entonces las S llenaron la pantalla. Pero esto es emocionante
porque está funcionando. Y se recuperó un poco
, y luego llegó a una cantidad ilegal. Nos ocuparemos del manejo de algunos errores
en un momento. Empecemos a sumar,
ahora, hacia la izquierda. ¿ Creo que eran 193? 215 había subido, creo. Creo que el 211 estaba caído. Necesito mi devolución. Intentemos intentarlo. Mira este. ¡ Oh! ¡ Vaya! Eso fue divertido. DE ACUERDO. Ahora se está animando un poco
rápido, lo cual está bien. Pero me gustaría poder
frenarlo. Creo que va a ser bastante
difícil para mí jugar este juego si corre tan rápido. Entonces creo que, si la memoria no
me falla, la forma en que esto se
hace normalmente es escribiendo un
bucle for que simplemente cuente un montón de
números antes de poder pasar a la siguiente línea de código.
Y uno pensaría que eso
no causaría mucho retraso. Pero en esta computadora, es
una solución bastante buena para esto. Entonces, en realidad, justo antes de la
línea 70, donde digo Ir a 40, pongamos esto en la línea 65, escribamos un bucle for. ¿ Cómo escribo un bucle for? Digamos que For N es
igual a 1 a 100… intentemos ejecutar
de 1 a 100… Siguiente N. Así que no sucederá nada
en ese bucle for. Sólo voy a ejecutarlo. Y veamos.
Y mira. Ahora va un poco más lento. Y podría sentarme aquí y
dibujar una hermosa espiral. Entonces, ¿qué más necesito? Necesito agregar algo de comida. Y luego necesito que la serpiente
crezca cuando come la comida. Pero ahora mismo, la serpiente está
creciendo porque estoy viendo todas las S. Lo que tengo que hacer es borrar
la S después de imprimirla. Entonces podría agregar,
en la línea 35, Inicio. Y luego, a los 70, podría
decir GoTo 35. Intentemos eso. En realidad funciona bien. Me preocupaba que hubiera
demasiado parpadeo allí. Y eso podría convertirse en un problema
en algún momento, en cuyo caso, lo que realmente
querría hacer es simplemente imprimir un espacio sobre la
antigua ubicación de la S. Pero veamos hasta qué punto
podemos hacerlo funcionar simplemente usando Inicio esencialmente
como un fondo: borrar el fondo. Y luego me doy cuenta… espera. Me estoy poniendo la gorra para pensar… no, espera… mis
gafas para pensar. Ah, ja. Agreguemos una matriz. Entonces, la serpiente, en lugar
de ser una x e y, en realidad debería ser una serie
de x e y, dependiendo de qué tan larga sea la serpiente.
Ahora, no tengo la capacidad
de tener una matriz de tamaño variable. Sólo tengo una matriz fija. Pero si pido, digamos, 100 o
200 o 1000 puntos en la memoria ( no sé cuánto
espacio puedo pedir en realidad), entonces
puedo asumir que la serpiente nunca crecerá
más que una cantidad fija. Entonces, cambiemos la
línea 30 a, en lugar de Let x, digamos Dim x– Dim para Dimensionalidad. ¿ Cuál es la dimensionalidad
de la matriz? Y podrían ser
múltiples dimensiones. Voy a seguir con
una matriz unidimensional. Y vayamos con una
longitud fija de 100 por ahora. Ahora tengo una
matriz con 100 puntos para x y 100 puntos para y. Luego, en línea, me estoy quedando sin
espacio para mis líneas de código. Luego, deje que el primer
elemento de la matriz sea 20. Y el primer elemento
de la matriz y sea 12. Pero en realidad no
quiero usar 1. Lo que quiero usar es ¿
cuál es la longitud actual de la serpiente? Entonces necesito otra
variable, a la que llamaré L. ¿Qué tal si
la llamo L por Longitud? Así que pongámoslo en la línea 15. Sea L igual a 1.
Entonces, lo que quiero
es decir x índice L. Probablemente debería haber
mantenido mis variables x e y y simplemente poner el nuevo
resultado en la matriz porque ahora tengo que
arreglar en todas partes. Pero me siento bien
al hacer eso. Puedo hacerlo. Puedo manejarlo. Es solo escribir. Y de hecho, esta
línea 40 va a cambiar pronto, como verás. Pero consigamos lo que
teníamos antes de trabajar. [REPRODUCIENDO MÚSICA] ¿ Es este el mismo
programa que teníamos antes? Vamos a averiguar. Luciendo bien. Ahora, debemos elegir una
ubicación para la comida que la serpiente intenta
conseguir y luego imprimirla también en la pantalla. Me estoy quedando sin
líneas de código aquí. Entonces, escribamos una
subrutina para inicializar la comida. Voy a poner eso
justo en la línea 17. Voy a decir GoSub 2000. Así que 2000 será mi trabajo
con el tema de la comida. Y de hecho puedo poner
comentarios en mi código con R-E-M, Rem, para comentarios. Luego, elijamos un lugar
para la exposición gastronómica.
Lo llamaré Fx. Y necesito obtener
un valor aleatorio. Así que voy a consultar
mi manual aquí nuevamente. R-N-D para aleatorio se encuentra en la página 102. "Devuelve un número real aleatorio
mayor o igual a 0 y menor que 1". Ah, y se necesita
un argumento, donde si paso un número
mayor que 0, obtengo un nuevo número aleatorio
cada vez que se usa. Este será un
número entre 0 y 1, multiplícalo por el
ancho y conviértelo… oh, no. [RISAS] Este no es un editor de texto. Y luego
conviértalo a un número entero porque la posición de la comida
no puede ser un número decimal. Creo que esto es bueno. Entonces, la posición y
para la comida… OK. Luego, regresa. Entonces, entre las líneas 50
y 60, ahora querría imprimir F para la comida
en la ubicación Fx y Fy. Así que hagámoslo en la línea 55. Oo. Oh chico. Algo loco
está pasando aquí.
¡ Oh, mira eso! HTab Fy… eso es un error. Probablemente lo hayas notado. No hice. VTab. Error de cantidad ilegal en 55. OK. Línea 55. ¿ Acabo de elegir un
valor aleatorio incorrecto? Depuremos esto. [MÚSICA – "OJO DEL TIGRE"] Podemos unir más de
una cosa mientras imprimimos con punto y coma. Entonces imprima Fx, dos puntos,
espacio y luego Fy. ¿ Y por qué esos valores son 0? ¡ Ah! [RISAS] No puedo creer que me haya perdido esto. Bien, mira esto. Línea 17– GoSub 2000. ¿ Qué pasa en el 2000? Establezca Fx e y en función de un
número aleatorio multiplicado por W. ¿ Cuál es el valor de W? Bueno, ¡estoy inicializando
el valor de W en la línea 20! ¡ Eso es después de la línea 17! ¡ Todo este tiempo! DE ACUERDO. Lo tengo ahora. Cambiemos esas
dos líneas. Entonces 17 será: Sea W igual a 40. Sea H igual a 24. La línea 20 será GoSub 2000. Puedo deshacerme de un montón
de otras cosas de depuración que agregué allí. Limpiar la pantalla, Inicio, atrás. Y vámonos. Aquí vamos. Tengo mi comida.
¿ Ver? Está parpadeando. Me está molestando. Me molesta el parpadeo. Voy a
deshacerme de Inicio ( borrar pantalla) en la línea 35,
que si recuerdas, ahora estoy viendo el
rastro completo de la S. Tomemos la línea 40, donde
voy a la x. y posición y e imprima S, y
pongámoslo en su propia subrutina. Porque en última instancia,
ahí es donde tendré que hacer un bucle
para la matriz y todo de todos modos, así que necesito
hacerlo en otro lugar. Línea 3000. Y entonces ya no encabezo la línea 50
. Entonces 3000… lo que
debería hacer es decir… ah. Ah, ja. Espera un segundo. Espera un segundo. Este ir sub 1000,
que mueve la serpiente, también debería ser parte de
lo que estoy a punto de hacer. Así que deshagámonos
también de la línea 60. Si tuviera lo que tenía antes,
diría HTab x índice L, VTab tab y índice
L. Luego, Imprimir… ahora, esto es un
poco loco, pero voy a imprimir el espacio porque
lo que tengo Lo primero que voy a imprimir es borrar la S anterior.
Luego
puedo ir y mover la serpiente según la
interacción del teclado, que es GoSub 1000. Y luego, puedo
actualizar la ubicación. En última instancia, esto será un bucle, que haré a continuación, Imprimir "S". Y 3050 sería Retorno. DE ACUERDO. Entonces la S parpadea. Eso es lo que quiero. Pero fíjate, la F no lo es. Ahora, sólo para que esto
funcione mejor, en lugar de hacer HTab
x(L), VTab y(L), Print "S", debería haber un bucle allí. Tengamos 3025
porque quiero agregar el bucle antes de ese HTab. Para I– usaré Índice, I– es
igual a 1 a L. Entonces, 3030 debe ser HTab
x(I), VTab y(I). Y luego, imprima "S". Y luego, 3050 es Next I.
Y 3060 sería Return. Ahora, eventualmente, la serpiente
tendrá sus posiciones más antiguas en la matriz. Quizás su
posición reciente debería estar siempre al final de la matriz
y su posición más antigua al principio de la matriz. En cuyo caso, la línea 3000
debería ser HTab x(1)– índice 1– porque siempre
quiero borrar solo la posición más antigua de la serpiente.
Ahora, averigüemos si la
serpiente se ha comido la comida. Justo antes de ir y hacer
la entrada del teclado… no, justo después de hacer la
entrada del teclado voy a hacer otra subrutina… 4000. Y luego, quiero decir Si… bueno, en realidad, sólo quiero
Haz esta subrutina si la serpiente ha conseguido la comida. Entonces, en lugar de que If
esté en la subrutina,
digamos en la línea 3022 Si el índice x L, que sería el
punto más reciente de la serpiente, es igual a Fx y el índice y L es
igual a Fy, entonces GoSub 4000.
Y ahora mismo en 4000,
digamos simplemente Imprimir "Yum". A ver si
puedo conseguir esa comida. ¡ Mmm! Bien, eso está funcionando. Pero en lugar de imprimir
yum, ¿qué quiero hacer? Quiero decir que L es igual a L más 1. Entonces, ¿debo decir que la
nueva posición L de la serpiente es igual a la posición más reciente? ¿ L menos 1? Probemos esto ahora. Ups. No, no, corre, ahí. Devolver. Oh sí. DE ACUERDO. Esto es bueno porque
ahora la serpiente está corriendo
con un punto extra y no estoy borrando correctamente. No hay problema. En cada cuadro de animación, necesito
barajar todas las posiciones en la matriz. Muy bien, estoy mirando
mi subrutina 3000. Estoy borrando la mancha más antigua
de la serpiente. Luego, antes de animar
la serpiente según el teclado, deslicemos todo hacia abajo
en la matriz, que será una subrutina en la línea 5000. Refactorizaré esto más adelante.
(CANTANDO)
Refactorizaré esto más tarde. Porque I es igual a 1 a L menos 1. Índice X I– I más 1. Índice Y I es igual
a índice y I más 1. Esto es mezclar todo
en la matriz. Ahora, aquí está la pregunta. Cuando L sea 1,
¿va a hacer esto? No debería. Pero no sé qué
va a hacer este bucle For con For I es igual a 1 a 0. Entonces digamos que solo si L
es mayor que 1, entonces GoSub 5000.
¿ Verdad? No quiero hacer esto si
L es 1 porque no va a funcionar. Esos valores no existen. DE ACUERDO. Eso tiene más sentido. Ahora… oh, Dios mío… ¿ cuál es la probabilidad de que esto funcione? No, baja. DE ACUERDO. ¡ Sí, ahí vamos! Mira, mi serpiente tiene una longitud de 2. Mi serpiente es… guau. En cierto modo funcionó. Esperar. Está bien. Entonces también debería suceder una cosa. Cuando uso GoSub 4000, también
necesito mover la comida. Y creo que eso va a ser…
tal vez esté causando un problema. Entonces
también necesito GoSub 2000 nuevamente. Entonces 4000… antes de saltar
de aquí, 4025, vayamos a GoSub. Estoy bastante
seguro de que fue 2000 el que elige una nueva ubicación para comer. Intentemos esto. Sí. DE ACUERDO. La comida se movió. Saltó después de que me lo comí. Oo, ¿por qué? Funcionó
para los dos primeros. No sé si
este es el problema, pero me estoy dando cuenta
de que el hecho de imprimir F una y
otra vez es innecesario aquí. ¿ Dónde imprimo F? Línea 55. Como ya no voy a limpiar
con casa, solo necesito
imprimir F en el momento en que elijo la ubicación
para la comida aquí mismo, línea 2000 subrutina.
Entonces agreguemos 2025. Y luego, la línea 55 ya
no es necesaria. Así que veamos. Para que la comida esté ahí. Captura la comida. Tengo dos S. ¡ Oh! Espera un segundo. Puedes ver que continúa
borrando lo mismo… ah. De alguna manera, ese primer
punto en la matriz no se mueve con él. ¿ Bien? Porque
ahí sólo parpadea. En realidad, esa es una buena pista. ¡ Oh! (RISAS) Sé
cuál es el problema. ¿ Por qué solo funcionaba cuando
la matriz tenía dos pero no tres? Me falta un
aspecto clave del bucle aquí. Miren este bucle donde
estoy imprimiendo todas las S… Siguiente I. Miren este bucle…
no Siguiente I. Muy bien, amigos. Vale, dos S. Tres S. ¿ Puedo ver una cuatro S? ¿ Cuatro? ¿ Cinco? Creo que tenemos nuestro
juego de serpientes, gente. Esto va
muy, muy lento. Aquí mismo,
dupliquemos la velocidad. Ahora, por supuesto,
no he incorporado nada para probar si estoy golpeando
el borde de la pantalla o si la serpiente se
pasa por encima de sí misma. Pero eso
arruinaría la diversión de poder jugar esto para siempre. Voy a deshacerme
de ese bucle por completo.
En realidad, no voy
a deshacerme de él por completo. Hagamos
un bucle de 1 a 2. Supongo que HTab y VTab
realmente ralentizan las cosas. Creo que es sólo
una computadora vieja. Quiero decir, no quiero
ser malo contigo. Eres mi amigo, Apple II Plus. [PITIDO] Oh. Cantidad ilegal en 2025. Ah. Entonces eligió una ubicación no válida
para la comida, probablemente porque una de
las posiciones que pudo elegir es 0, que no es una
posición válida de columna o fila. Entonces hay más que
necesito hacer aquí, ¿verdad? Necesito verificar algunos
errores para asegurarme de que la comida siempre se elija
entre 1 y 40, y 1 y 24. Necesito asegurarme de que
no se permite que la serpiente se salga del borde (el juego ha terminado) o
corra. en sí mismo: el juego ha terminado. Voy a escribir
ese código básico, reorganizarlo,
limpiar los números de línea, agregar algunos comentarios al código y mostrarles
cómo se ve aquí. También, en caso de que no
tengas tu propio Apple II Plus y
quieras probarlo tú mismo, incluiré enlaces a
un montón de emuladores diferentes que encontré en la web y que puedes usar.
Podría intentar ejecutar este código y modificarlo.
Y realmente espero que hagas
tu propia versión del juego de la serpiente en Básico y
la compartas conmigo en el enlace del
sitio web de Coding Train que te estoy mostrando ahora mismo. Pero si te gusta aprender sobre la
programación AppleSoft Basic en un Apple II Plus,
tal vez tengas un amigo que nunca antes haya codificado
y quiera aprender a codificar desde cero en Basic. ¿ Adivina qué? Acabo de hacer un
curso completo sobre cómo codificar (qué
es código) con Basic, relacionándolo con los
lenguajes de programación modernos tal como están hoy. ¿ Y dónde está esa clase? Lo estoy mirando ahora mismo. Está en la
primera biblioteca curada del mundo de clases prácticas
propiedad de creadores y operadas por ellos. Se lanzan nuevas clases
todo el tiempo. Si estás interesado
en hacer videos, como yo, una de las
clases que estoy viendo estos días
para mejorar mi juego es el
video Rapid Turnaround de Rene Ritchie.
Quiero decir, ciertamente si
estás interesado en Apple, es posible que conozcas el
canal de YouTube de Rene Ritchie. Tiene un curso. El curso que he estado
viendo ahora mismo, ya que hago muchas transmisiones en vivo,
es ser tú mismo frente a la cámara con Luria Petrucci. Está el curso de Philip Damico
sobre animación de siguiente nivel. Hay negocios
101 para creadores. Tantas clases
y charlas sobre nebulosas, que son
conferencias invitadas breves e inspiradoras. Si ya te
suscribes a Nebula, del cual hablé
antes en mi canal, puedes actualizar a Classes
por solo $5 por mes. Si eres nuevo en Nebula y
nunca antes habías oído hablar de él, visita
nebulaclasses.com/CodingTrain. Son 10 dólares al mes o
100 dólares al año. Sin embargo, a través de ese
enlace puedes conseguirlo por 80 dólares durante todo el año. Suscribirte a las
clases de Nebula también te ofrece Nebula. Hay más de 14.000 vídeos
de tus creadores favoritos, así como docenas de contenidos
originales de alta producción que
no puedes encontrar en YouTube. Al registrarte en Nebula
y ver mi clase, Todo sobre Apple
Basic y Qué es el código, estás apoyando a
The Coding Train.
Y creo que también
descubrirás muchos otros contenidos que realmente te encantarán. Espero verte allí. Gracias por ver. Y hasta la próxima. No sé dónde: JavaScript,
procesamiento básico, ¿quién sabe? Dígame usted. Adiós. [TEMA MUSICAL].