254 lines
11 KiB
Text
254 lines
11 KiB
Text
= 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[]
|