singe/docs/es/Learn.adoc

246 lines
9.6 KiB
Text

= Aprende a programar con Singe
Scott Duensing <scott@kangaroopunch.com>
:revnumber: 3.00
:revdate: 2026
:doctype: book
:toc: left
:toclevels: 3
:title-logo-image: image:singeLogo.png[Singe, pdfwidth=2.6in, align=center]
:source-highlighter: rouge
:icons: font
:experimental:
:imagesdir: ../images
:lang: es
include::locale.adoc[]
[preface]
[#_before_you_begin]
== Antes de empezar
Este libro te enseña a programar. Da por hecho que nunca has escrito una línea
de código en tu vida, y no da por hecho que quieras ser programador -- solo que
quieres hacer un juego.
Cada lección termina con algo que puedes ejecutar y con lo que puedes jugar. No
se deja nada para luego: no hay capítulos de teoría antes de que aparezca la
primera imagen en pantalla. Escribirás tu primer programa que funciona en unos
diez minutos, y tendrá cinco líneas.
Singe es un motor de juegos. Con él puedes hacer cualquier cosa que puedas hacer
con cualquier otro motor, en dos dimensiones o en tres, y la mayor parte de este
libro trata justo de eso. Lo que lo distingue es que también puede reproducir
vídeo FMV («full motion video») como el mundo en el que ocurre el juego, que es
como funcionaban los juegos de laserdisc de los salones recreativos y que casi
nada más hace bien. Es una posibilidad, no una obligación: un juego solo
reproduce vídeo si lo pide, y nada de lo que escribas en las trece primeras
lecciones se acercará a eso.
El lenguaje es Lua, que Singe usa para todo. A Lua lo eligió gente que tenía que
enseñárselo a artistas y diseñadores, y se nota. No hay puntos y coma que
olvidar, ni tipos que declarar, ni compilador contra el que pelear. Cuando te
equivocas, Singe te dice el archivo, la línea y lo que no ha entendido.
[#_what_you_need]
=== Lo que necesitas
* *Singe.* Un archivo. Ponlo en una carpeta en algún sitio donde puedas volver a
encontrarlo.
* *Un editor de texto.* El Bloc de notas, TextEdit en modo de texto normal,
Notepad++, VS Code o cualquier otro que guarde texto plano. Un procesador de
textos no sirve: guarda un formato que no ves, y Singe no puede leerlo.
* *Nada más.* No necesitas un laserdisc, ni un archivo de vídeo, ni un programa
de dibujo, ni arte de ningún tipo. Toda la primera parte lo dibuja todo por sí
misma, y de la segunda parte en adelante las imágenes, los sonidos, el vídeo y
los modelos que necesitas vienen con el libro o con el motor. Lo que necesitas
aparece más abajo.
[#_how_to_read_this_book]
=== Cómo leer este libro
Escribe el código a mano. No lo copies y pegues. Escribirlo es más lento, y de
eso se trata: cometerás pequeños errores, y arreglarlos es como aprendes a leer
lo que te dice el ordenador. Cada lección tiene una sección *Pruébalo* con
cambios que hacer, y esos cambios importan tanto como la lección.
Si una lección sale mal y no ves por qué, el script terminado de cada lección
está en la carpeta `learn` que viene con este libro, con el nombre de su
lección: `01-hello.singe`, y así sucesivamente. Léelo solo después de haberlo
intentado.
[#_how_your_folders_are_laid_out]
=== Cómo están organizadas tus carpetas
La primera lección lo prepara y todas las siguientes lo dan por hecho, así que
vale la pena verlo una vez ahora.
Tienes una *carpeta de trabajo* con tu copia de Singe dentro. Cada lección crea
una carpeta nueva dentro de ella, con el nombre del script que contiene.
[literal]
----
singe/ <- tu carpeta de trabajo, con Singe dentro
Singe/ <- el motor pone aquí sus propios archivos
data/ <- y todo lo que guardan tus juegos
hello/
hello.singe
rocks/
rocks.singe
art/
----
Una lección se ejecuta desde la carpeta de trabajo nombrando su carpeta, así que
`Singe rocks` ejecuta `rocks/rocks.singe`. Esa forma corta funciona porque la
carpeta y el script tienen el mismo nombre. Es la misma forma que tiene un juego
instalado de verdad, y por eso el libro la usa desde la primera lección en lugar
de poner orden más adelante.
[#_what_comes_with_this_book]
=== Lo que viene con este libro
De la segunda parte en adelante, las lecciones usan imágenes y sonidos. Están en
la carpeta `art` que viene con el libro, y tú copias esa carpeta en la carpeta de
la lección en la que estés trabajando, sin cambiarle el nombre. Hay una nave,
una roca, un disparo, una estrella, cuatro fotogramas de alguien caminando y dos
ruidos. `art/README.txt` los enumera con sus tamaños.
El propio Singe pone el resto. La primera vez que ejecutas algo, el motor extrae
una carpeta llamada `Singe` en tu carpeta de trabajo, y en ella hay un vídeo, una
fuente, dos modelos 3D y un clic. Las lecciones que los necesitan usan los que ya
están en tu disco, así que no hay nada que buscar ni nada que comprar. Nada de
ello es bonito. Todo es real, y cambiarlo por algo mejor suele ser cuestión de
cambiar el nombre de un archivo.
[#_this_is_not_the_forge_book]
=== Este no es el libro de Forge
Forge, una herramienta aparte con un libro propio, crea un juego describiéndolo
en lugar de programándolo. Es otro camino hacia otro sitio, para quien no quiere
escribir código en absoluto. Si has venido a aprender a programar, estás en el
sitio adecuado. No necesitas Forge ni su libro, y este no se apoya en él.
La _Referencia de Singe_ es la referencia: cada función, cada argumento, cada
valor de retorno y el modelo de programación que hay detrás. No es un tutorial
ni intenta serlo. Empezarás a echar mano de ella hacia la lección seis, y al
final de este libro la usarás más que este libro. Viene en la misma descarga que
este.
[#_the_series]
== La serie
Treinta y una lecciones en cuatro partes. Cada una necesita la anterior y nada
más.
*Primera parte: las ideas.* Sin arte, sin vídeo, sin nada que instalar. Dibujas
con las formas y el texto que ya tiene el motor, y aprendes de qué está hecho un
programa.
. *Hola* -- un script, una función, una cadena y algo en pantalla.
. *Números que cambian* -- variables, aritmética y hacer que algo se mueva.
. *Tomar decisiones* -- `if`, comparaciones y leer los controles.
. *Otra vez* -- `for` y `while`, y dibujar cien de algo.
. *Tus propias funciones* -- argumentos, valores de retorno y por qué molestarse.
. *Listas de cosas* -- tablas, `ipairs`, añadir y quitar.
. *Un juego* -- todo lo visto hasta ahora, jugable, en unas ciento veinte líneas.
. *Cuando algo sale mal* -- leer errores, `debugPrint` y recargar con F5.
*Segunda parte: un juego de verdad.* Arte, sonido y la forma que toma un juego
terminado.
[start=9]
. *Imágenes* -- sprites, cargar, dibujar y fotogramas.
. *Sonido* -- efectos, música y cuándo cargar cada cosa.
. *Chocar con cosas* -- colisiones, el kit de juego y las zonas de impacto.
. *Puntuación, vidas y fin de partida* -- estado, guardar y volver a empezar.
. *Una carpeta de juego* -- `games.dat`, arte para el menú y ejecutar desde él.
*Tercera parte: vídeo.* Reproducir imágenes filmadas como el mundo del juego, y
las convenciones de las recreativas que surgieron a su alrededor. Sáltate esta
parte si tu juego no quiere vídeo; nada de lo que viene después depende de ella.
[start=14]
. *Reproducir vídeo* -- el disco, los fotogramas, saltar y esperar.
. *La otra forma de escribirlo* -- el modelo con hilo («threaded»), y por qué le va bien al vídeo.
. *Ramificaciones* -- elecciones, caminos y la forma de un juego de vídeo con ramificaciones.
. *Pistolas de luz* -- apuntar, disparar y la calibración que necesita una recreativa.
. *Quick-time events* -- indicaciones, ventanas de tiempo y puntuar la sincronización del jugador.
*Cuarta parte: todo lo demás.* Cada lección se sostiene sola; hazlas en el orden
que quieras.
[start=19]
. *Texto con buen aspecto* -- fuentes, calidad y medir.
. *Menús y pantallas* -- la GUI, los documentos y el estilo.
. *Subtítulos* -- y por qué son un sistema aparte.
. *Hacia el 3D* -- escenas, cámaras y coordenadas.
. *Modelos y luz* -- glTF, materiales y animación.
. *Física* -- cuerpos, fuerzas, articulaciones y cuándo no usarlos.
. *Partículas* -- emisores, y cómo hacer una explosión.
. *Personajes que se mueven solos* -- navegación y búsqueda de caminos.
. *Música y MIDI* -- pistas, soundfonts e instrumentos.
. *En línea* -- cuentas, tablas de récords y el catálogo.
. *Guardar datos* -- bases de datos, tablas y las preguntas que les haces.
. *Publicarlo* -- empaquetar, parchear, licencias y la publicación.
. *En una recreativa* -- controles, menús de servicio, bezels y las cosas que
solo importan en hardware de verdad.
include::lessons/01-hello.adoc[]
include::lessons/02-numbers.adoc[]
include::lessons/03-decisions.adoc[]
include::lessons/04-repeating.adoc[]
include::lessons/05-functions.adoc[]
include::lessons/06-tables.adoc[]
include::lessons/07-a-game.adoc[]
include::lessons/08-when-it-goes-wrong.adoc[]
include::lessons/09-pictures.adoc[]
include::lessons/10-sound.adoc[]
include::lessons/11-hitting-things.adoc[]
include::lessons/12-score.adoc[]
include::lessons/13-game-folder.adoc[]
include::lessons/14-video.adoc[]
include::lessons/15-threaded.adoc[]
include::lessons/16-branching.adoc[]
include::lessons/17-light-guns.adoc[]
include::lessons/18-qte.adoc[]
include::lessons/19-text.adoc[]
include::lessons/20-gui.adoc[]
include::lessons/21-subtitles.adoc[]
include::lessons/22-3d.adoc[]
include::lessons/23-models.adoc[]
include::lessons/24-physics.adoc[]
include::lessons/25-particles.adoc[]
include::lessons/26-navigation.adoc[]
include::lessons/27-midi.adoc[]
include::lessons/28-online.adoc[]
include::lessons/29-databases.adoc[]
include::lessons/30-shipping.adoc[]
include::lessons/31-cabinet.adoc[]