The Weekly Tuto #1 | Niveau Débutant -> Introduction à la programmation [Partie 1]

Bonjour bonjour ! Bienvenue dans cette nouvelle série d’articles traitant de programmation !
Passons d’abord par des présentations :

Je suis Chlorodatafile, l’un des programmeurs de la team Antarka, j’espère pouvoir vous apprendre ce que j’ai appris en 7 ans de programmation. Toutes remarques et critiques sont bien évidemment les bienvenues, tant qu’elles sont constructives.

J’ai donc prévu, chaque jeudi, de sortir un tutoriel de programmation en code, avec des aides sur comment composer son algorithme, comment penser sa programmation, pour vous aider à progresser.

Pour vous le dire tout de suite, chacun a en général un domaine de prédilection en programmation, pour ma part, c’est sur la gestion de tableau, ça parait plutôt basique comme ça, mais de cette gestion de tableau en découle par exemple un moteur physique léger et relativement complet.

Passons maintenant à ce tutoriel ! Nous allons donc créer un Pong, mais tout d’abord, pourquoi un Pong ?
-> Tout simplement parce que c’est un jeu relativement basique et simple à programmer et qui prend peu de temps à faire, c’est donc l’idéal pour introduire les bases correctement.

Indication utile : Dans Craftstudio, quand vous faites un modèle, en gardant un scale (l’étirement) de 1 en x, y et z, et de largeur prenons de 16 en x, y et z, sa taille dans la scène sera de 1 unité de scène (vous pouvez vérifier si vous le souhaitez).
Sachez donc que dans mes tutoriels, je me place en général coté nombre de pixel en taille de pixel d’un modèle, que j’adapte ensuite à la taille de pixel d’une scène.

Si vous ne savez pas ce qu’est un pixel, je vous invite à rechercher sur Wikipedia ce que c’est.
Si vous ne savez pas ce qu’est un modèle, une animation, une scène, je vous invite à regarder cette vidéo.

Tout d’abord, avant de se lancer dans un programme, il faut penser à ce qu’on compte faire, généralement par un schéma ou par un texte, voir les deux.
Nous souhaitons donc ici faire un Pong en 2 dimensions, se déroulant dans une arène de 200 pixels de large, et de 100 pixels de haut. Les pads seraient eux à chaque extrémité de l’arène, et feraient chacun 20 pixels de haut pour 4 de large, la balle quand à elle ferait 8 pixels par 8. Nous aurons aussi quatre zones de texte, une sous chaque pad, écrivant « Ping ! » et « Pong ! », une au centre de l’arène affichant le score, et une au dessus, invisible, permettant de dire qui a gagné et qui a perdu.

Voici le schéma synthétisant tout cela :

qu8s

Maintenant, passons à la création des composants ! Voici un package ou vous trouverez les modèles, les animations, et la scène : Télécharger.

Indication utile : J’ai choisi de faire le pad rouge et le pad bleu (le votre et celui du bot) dans un même modèle, et d’animer en 2 frames (images) donnant soit un pad, soit l’autre. Le but étant de n’avoir qu’un model au lieu de deux, et de vous montrer comment utiliser les animations dans Craftstudio.

 Une fois les bases faites, passons à comment le coder !

Si vous avez déjà fait du scripting visuel, vous comprendrez sûrement les choses plus vite, mais je vais expliquer comme si vous ne connaissiez pas le scripting.

Tout d’abord, voici quelques notions à savoir :

En programmation, nous utilisons des variables et des fonctions, un peu comme en mathématique !

Tout d’abord, qu’est-ce qu’une variable ? En math, c’est toutes les valeurs définies comme des variables, en général, x et y sont des variables. Et bien en programmation, une variable peut avoir n’importe quel nom, autant le nom « Pastèque » que le nom « x » ! Pour faire simple une variable permet d’associer une valeur à un nom.

Note : Pour qu’une variable soit valable, son nom doit commencer par une lettre minuscule ou majuscule, ou un underscore _. Les chiffres peuvent être utilisé dans le nom d’une variable, mais le nom d’une variable ne peut pas commencer par un chiffre.

Voici les différents types de variables basiques :

    • Variable numérique : Dans les variables de ce genre, nous pouvons ranger n’importe quelle valeur numérique réelle, ce genre de variable peut être modifiée par les fonctions mathématiques, et par les opérateurs mathématiques basiques : + – * /.
    • Variable texte : Ce genre de variables peut contenir du texte, n’importe quel texte, de la longueur que vous souhaitez. Il y a plusieurs manières d’agir sur un texte mais j’y reviendrais plus tard.
    • Variable booléenne : Ce genre de variable au nom généralement peu connu est cruciale, car c’est l’essence même d’un programme. L’ordinateur complet dans sa finalité ne fonctionne qu’avec des valeur booléenne, égale soit à 0, soit à 1. Généralement dit respectivement false et true,

Nous avons aussi des types de variables très particulières, mais très intéressantes à utiliser :

    • Variable tableau : C’est une forme de variable très puissante, sur laquelle je porterais un tuto entier prochainement.
    • Variable nulle : c’est une variable qui ne contient rien, ça parait inutile comme ça mais je vous en expliquerais l’utilité et la force au moment venu.
    • Variable fonction : c’est une variable contenant une chaîne d’exécution de script, elle diffère sur son fonctionnement de toutes les autres mais reste pour autant une variable. Voici plus de détails :

En math vous verrez par exemple la fonction f(x)=2x, f(x) permettant d’interpréter x sous une autre forme.
En programmation, déjà, nous trouvons un vocabulaire particulier, prenons qu’on ait une fonction f(x) qui pour x vous donne 2x, alors on dira ceci :

La fonction f() prend pour argument x et retourne 2x.

Mais, de plus, une fonction n’admet pas nécessairement qu’un seul et unique argument, et ne retourne pas forcement une variable. Vous le verrez dans la partie suivante, quand nous attaquerons la programmation du Pong.

Il reste deux points à éclaircir avant de passer au codage du jeu.

Le premier : La définition des variables.

Une variable doit être défini à l’aide d’un mot clé local ou global, ou par appartenance à une « instance » particulière.
Chacun de ses mots clés permet de donner une portée différente à la variable. La variable globale est accessible par l’intégralité du programme tandis que la variable locale par une partie du programme.

  • local variable -> De cette manière, la variable sera locale, et ne sera accessible qu’à une partie du programme.
    Je reprécise cela un peu après dans l’article.
  • global variable -> De cette manière là, la variable sera globale, et accessible à l’intégralité du programme.
  • self.variable -> Comme cité précédemment, on peut faire appartenir une variable à une instance dite « Game Object ». Nous sommes dans une programmation orienté objet, comme on dit, ça veux dire qu’on gère des instance. Donc, on fait appartenir la variable à l’objet « self », donc, soit-même.

Seulement, comment attribuer les types cités précédemment aux variables ? Voici comment faire :
J’ai pris par défaut une définition de manière locale.

Pour une variable numérique, on va dire que la variable est égale à n’importe quel chiffre (ici 5) :

  • local mavar = 5

Pour une variable texte, on va mettre entre guillemets le texte que l’on souhaite attribuer à cette variable :

  • local mavar = « Mon texte. »

Pour une variable booléenne, on va lui attribuer une valeur booléenne, soit true, soit false :

  • local mavar = true

Pour une variable tableau, on va mettre des crochets, je ferais des explications détaillées plus tard :

  • local mavar = {}

Pour une variable nulle, on va mettre nil, simplement.

  • local mavar = nil

Pour une variable fonction, c’est plus particulier, prenons une fonction mafon avec 3 arguments :

  • function mafon(mavar1,mavar2,mavar3)

              — Contenu de la fonction
             end

Il n’est pas nécessaire de dire si elle est locale, car function définit par défaut de précision la fonction de manière locale. mavar1, 2 et 3 eux sont locaux à la fonction ici, et quand on appelle la fonction peuvent être définis lors de l’appel, ils seront nuls sinon.
A la place de « — Contenu de la fonction », nous mettrons du code, qui s’exécutera à chaque appel de la fonction.
(– permet de définir une ligne de commentaire, et –[[ ]] une zone de commentaire, c’est hors du code et non exécuté.)
end permet de clore la section de code qui sera appelée. Une fois la fonction initiée, il suffira de l’appeler ainsi : mafon(1, »non »,true) pour l’exécuter. (les valeurs sont un exemple)
Pour mieux vous expliquer le concept de lieu de définition, prenons justement le bloc de fonction ci-dessus, commençant par function et finissant par end, et bien c’est un lieu de définition, si je définis une variable locale ici, et que je l’utilise ailleurs que dans ce script, ça ne marchera pas.

La seconde chose : Behavior.

Lorsque vous générez un script textuel en Lua, vous aurez 4 lignes de codes présentes d’offices, elles sont plutôt importantes :

Vous voyez que deux fonctions se définissent, Awake() et Update(), il leur existe une sœur, Start() qui se définie de la même manière.

734j

Se sont trois fonctions particulières qui s’exécutent automatiquement dans le code du jeu, sans que vous ne le décidiez. Elles s’exécutent selon cet ordre :

  • Awake : C’est ce qui se déroule a l’initialisation de l’objet, quand il va se générer.
  • Start : Se déroule entre tout les Awake du jeu, et tout les Update.
    • Les deux fonctions ci-dessus ne exécuterons qu’une seule et unique fois.
  • Update :  C’est l’action régulière qui s’exécutera 60 fois par secondes.

Voilà, maintenant, vous connaissez toutes les bases, si vous avez des questions, je suis sur Twitter, sinon vous pouvez commenter, je répondrais.

La semaine prochaine, je vous ferais la partie 2 de ce tutoriel, qui expliquera comment coder avec Craftstudio en Lua ! Vous saurez créer votre jeu de Pong de vos propre mains après cela, et aurez de bonnes bases pour réaliser un jeu.

________________________________________________

Pour compléter vos connaissances je vous invite également à consulter ce tutoriel de Florent sur les bases du Lua 😉

Répondre