singe/docs/fr/Learn.adoc

254 lines
11 KiB
Text
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= Apprendre à programmer avec 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: fr
include::locale.adoc[]
[preface]
[#_before_you_begin]
== Avant de commencer
Ce livre vous apprend à programmer. Il part du principe que vous n'avez jamais
écrit une ligne de code de votre vie, et il ne suppose pas que vous voulez
devenir programmeur -- seulement que vous voulez faire un jeu.
Chaque leçon se termine par quelque chose que vous pouvez lancer et avec quoi
vous pouvez jouer. Rien n'est gardé pour plus tard : il n'y a pas de chapitres
de théorie avant que la première image apparaisse à l'écran. Vous écrirez votre
premier programme qui marche en une dizaine de minutes, et il fera cinq lignes.
Singe est un moteur de jeu. Vous pouvez faire avec lui tout ce que vous pouvez
faire avec n'importe quel autre moteur, en deux dimensions ou en trois, et
l'essentiel de ce livre consiste à faire exactement cela. Ce qui le distingue,
c'est qu'il sait aussi lire de la vidéo FMV (« full motion video ») comme monde
dans lequel se déroule le jeu ; c'est ainsi que fonctionnaient les jeux
laserdisc des salles d'arcade, et presque rien d'autre ne le fait bien. C'est
une possibilité, pas une obligation : un jeu ne lit de la vidéo que s'il le
demande, et rien de ce que vous écrirez pendant les treize premières leçons ne
s'en approchera.
Le langage est Lua, que Singe utilise pour tout. Lua a été choisi par des gens
qui devaient l'enseigner à des artistes et à des designers, et ça se voit. Il
n'y a pas de points-virgules à oublier, pas de types à déclarer, et pas de
compilateur contre lequel se battre. Quand vous faites une erreur, Singe vous
dit le fichier, la ligne, et ce qu'il n'a pas compris.
[#_what_you_need]
=== Ce qu'il vous faut
* *Singe.* Un seul fichier. Mettez-le dans un dossier, quelque part où vous
saurez le retrouver.
* *Un éditeur de texte.* Bloc-notes, TextEdit en mode texte brut, Notepad++,
VS Code, ou n'importe quoi d'autre qui enregistre du texte brut. Un traitement
de texte ne fera pas l'affaire : il enregistre une mise en forme que vous ne
voyez pas, et Singe ne sait pas la lire.
* *Rien d'autre.* Vous n'avez besoin ni d'un laserdisc, ni d'un fichier vidéo,
ni d'un logiciel de dessin, ni d'aucune illustration. Toute la première partie
dessine tout elle-même, et à partir de la deuxième partie, les images, les
sons, la vidéo et les modèles dont vous avez besoin sont tous fournis avec le
livre ou avec le moteur. Ce dont vous avez besoin est listé plus bas.
[#_how_to_read_this_book]
=== Comment lire ce livre
Tapez le code. Ne le copiez-collez pas. Le taper est plus lent, et c'est tout
l'intérêt : vous ferez de petites erreurs, et c'est en les corrigeant que vous
apprendrez à lire ce que l'ordinateur vous dit. Chaque leçon a une section
*Essayez* avec des modifications à faire, et elles comptent autant que la
leçon.
Si une leçon tourne mal et que vous ne voyez pas pourquoi, le script terminé de
chaque leçon se trouve dans le dossier `learn` fourni avec ce livre, nommé
d'après sa leçon : `01-hello.singe`, et ainsi de suite. Ne le lisez qu'après
avoir essayé.
[#_how_your_folders_are_laid_out]
=== Comment vos dossiers sont organisés
La leçon un met cela en place et toutes les leçons suivantes le supposent ; cela
vaut donc la peine de le voir une fois dès maintenant.
Vous gardez un *dossier de travail*, avec votre copie de Singe dedans. Chaque
leçon crée un nouveau dossier à l'intérieur, nommé d'après le script qu'il
contient.
[literal]
----
singe/ <- votre dossier de travail, avec Singe dedans
Singe/ <- le moteur y met ses propres fichiers
data/ <- et tout ce que vos jeux enregistrent
hello/
hello.singe
rocks/
rocks.singe
art/
----
Vous lancez une leçon depuis le dossier de travail en nommant son dossier :
`Singe rocks` lance donc `rocks/rocks.singe`. Cette forme courte marche parce
que le dossier et le script portent le même nom. C'est la même forme qu'a un
vrai jeu installé, et c'est pourquoi le livre l'utilise dès la première leçon au
lieu de faire le ménage plus tard.
[#_what_comes_with_this_book]
=== Ce qui est fourni avec ce livre
À partir de la deuxième partie, les leçons utilisent des images et des sons. Ils
se trouvent dans le dossier `art` fourni avec le livre, et vous copiez ce
dossier dans le dossier de la leçon sur laquelle vous travaillez, en gardant son
nom. Il y a un vaisseau, un rocher, un tir, une étoile, quatre images de
quelqu'un qui marche, et deux bruits. `art/README.txt` les liste avec leurs
tailles.
Singe lui-même fournit le reste. La première fois que vous lancez quoi que ce
soit, le moteur déballe un dossier appelé `Singe` dans votre dossier de travail,
et on y trouve une vidéo, une police, deux modèles 3D et un clic. Les leçons qui
en ont besoin utilisent ceux qui sont déjà sur votre disque ; il n'y a donc rien
à chercher et rien à acheter. Rien de tout cela n'est joli. Tout est réel, et
pour mettre quelque chose de mieux à la place, il suffit en général de changer
un nom de fichier.
[#_this_is_not_the_forge_book]
=== Ce n'est pas le livre de Forge
Forge, un outil séparé qui a son propre livre, fait un jeu à partir d'une
description au lieu de le programmer. C'est une autre route qui mène ailleurs,
pour quelqu'un qui ne veut pas du tout écrire de code. Si vous êtes venu ici
pour apprendre à programmer, vous êtes au bon endroit. Vous n'avez besoin ni de
Forge ni de son livre, et celui-ci ne s'appuie pas dessus.
La _Référence de Singe_ est la référence : chaque fonction, chaque argument,
chaque valeur de retour, et le modèle de programmation qui est derrière. Ce
n'est pas un tutoriel et elle n'essaie pas d'en être un. Vous commencerez à
vous y reporter vers la leçon six, et à la fin de ce livre vous vous en servirez
plus que de ce livre-ci. Elle vient dans le même téléchargement que celui-ci.
[#_the_series]
== La série
Trente et une leçons en quatre parties. Chacune a besoin de la précédente, et de
rien d'autre.
*Première partie : les idées.* Pas d'illustrations, pas de vidéo, rien à
installer. Vous dessinez avec les formes et le texte que le moteur a déjà, et
vous apprenez de quoi est fait un programme.
. *Bonjour* -- un script, une fonction, une chaîne, et quelque chose à l'écran.
. *Des nombres qui changent* -- les variables, l'arithmétique, et faire bouger les choses.
. *Prendre des décisions* -- `if`, les comparaisons, et lire les commandes.
. *Recommencer* -- `for` et `while`, et dessiner cent fois la même chose.
. *Vos propres fonctions* -- les arguments, les valeurs de retour, et pourquoi s'en donner la peine.
. *Des listes de choses* -- les tables, `ipairs`, ajouter et retirer.
. *Un jeu* -- tout ce qui précède, jouable, en cent vingt lignes environ.
. *Quand ça tourne mal* -- lire les erreurs, `debugPrint`, et recharger avec F5.
*Deuxième partie : un vrai jeu.* Des illustrations, du son, et la forme que prend
un jeu terminé.
[start=9]
. *Des images* -- les sprites, le chargement, le dessin et les images d'animation.
. *Le son* -- les effets, la musique, et quand charger quoi.
. *Toucher des choses* -- les collisions, le kit de jeu, et les boîtes de collision.
. *Score, vies et fin de partie* -- l'état, la sauvegarde, et recommencer.
. *Un dossier de jeu* -- `games.dat`, des illustrations pour le menu, et lancer le jeu depuis celui-ci.
*Troisième partie : la vidéo.* Lire du film comme monde du jeu, et les
conventions d'arcade qui ont grandi autour. Sautez cette partie si votre jeu n'a
pas besoin de vidéo ; rien de ce qui suit ne dépend d'elle.
[start=14]
. *Lire de la vidéo* -- le disque, les images, les sauts, et l'attente.
. *L'autre façon de l'écrire* -- le modèle à fil d'exécution (« threaded »), et pourquoi il convient à la vidéo.
. *Les embranchements* -- les choix, les chemins, et la forme d'un jeu vidéo à embranchements.
. *Les pistolets optiques* -- viser, tirer, et le calibrage dont une borne a besoin.
. *Les quick-time events* -- les invites, les fenêtres de temps, et noter la synchronisation du joueur.
*Quatrième partie : tout le reste.* Chaque leçon tient debout seule ; prenez-les
dans l'ordre que vous voulez.
[start=19]
. *Du texte qui a de l'allure* -- les polices, la qualité, et les mesures.
. *Menus et écrans* -- la GUI, les documents, et la mise en forme.
. *Les sous-titres* -- et pourquoi ils ont leur propre système.
. *Passer à la 3D* -- les scènes, les caméras, et les coordonnées.
. *Modèles et lumière* -- glTF, les matériaux, et l'animation.
. *La physique* -- les corps, les forces, les articulations, et quand ne pas s'en servir.
. *Les particules* -- les émetteurs, et faire une explosion.
. *Des personnages qui se déplacent seuls* -- la navigation et la recherche de chemin.
. *Musique et MIDI* -- les pistes, les SoundFonts, et les instruments.
. *En ligne* -- les comptes, les tableaux des meilleurs scores, et le catalogue.
. *Garder des données* -- les bases de données, les tables, et les questions que vous leur posez.
. *Le publier* -- l'empaquetage, les correctifs, les licences, et la sortie.
. *Dans une borne* -- les commandes, les menus de service, les bezels, et les choses qui ne
comptent que sur du vrai matériel.
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[]