Differences

This shows you the differences between the selected revision and the current
version of the page.


fr:wmebook:ch2 2011/10/17 17:15 fr:wmebook:ch2 2011/10/19 13:12 current
Line 118: Line 118:
-====== 2.1 Les tableaux magiques ======+ 
 +====== 2.1. Les tableaux magiques ======
Avant de commencer à parler de tableaux, je vais vous donner un exemple d'un réel problème dans les jeu. Imaginez que vous ayez une porte protégée par digicode. vous devez tapez les 4 chiffres correctement pour que la porte s'ouvre. Vous avez différentes façons de faire cela. Commençons par la pire: Avant de commencer à parler de tableaux, je vais vous donner un exemple d'un réel problème dans les jeu. Imaginez que vous ayez une porte protégée par digicode. vous devez tapez les 4 chiffres correctement pour que la porte s'ouvre. Vous avez différentes façons de faire cela. Commençons par la pire:
Line 224: Line 225:
-====== 2.2 les Conditions ======+ 
 + 
 +====== 2.2. Les Conditions ======
Habituellement nous savons ou nous allons. Nous avons parlé précédemment de l’exemple d'une porte et d'un bouton, nous avons perler de tester si le bouton etait appuyé. Mais comment faire ce test? Nous avons une commande de condition appelé **if** (si) qui le fait pour nous. Encore une fois commençons par du code: Habituellement nous savons ou nous allons. Nous avons parlé précédemment de l’exemple d'une porte et d'un bouton, nous avons perler de tester si le bouton etait appuyé. Mais comment faire ce test? Nous avons une commande de condition appelé **if** (si) qui le fait pour nous. Encore une fois commençons par du code:
Line 421: Line 424:
ces boucles sont vraiment sympa pour faire quelque chose en processus de fond que vous auriez besoin d’étendre sur l'ensemble du jeu. Par exemple, vous pouvez vérifier si la musique de fond joue et si elle stoppe, vous pouvez jouer une autre chanson de la play-list ou dans le projet de démonstration ce processus gère l'affichage des légendes (score par exemple). ces boucles sont vraiment sympa pour faire quelque chose en processus de fond que vous auriez besoin d’étendre sur l'ensemble du jeu. Par exemple, vous pouvez vérifier si la musique de fond joue et si elle stoppe, vous pouvez jouer une autre chanson de la play-list ou dans le projet de démonstration ce processus gère l'affichage des légendes (score par exemple).
 +
 +
====== 2.4. Les Fonctions ====== ====== 2.4. Les Fonctions ======
-**EN COURS DE TRADUCTION** + 
-As you already saw in the case of Sleep() or Random(), there’s something called a function. Function is a big time saver because it can take care of many lines of code. Imagine this example: you want to print ten times the word hell. But you want to print it in more than one parts of your code. Without function you’d do this:+Comme nous avons pu le voir dans le cas de Sleep() ou Random(), il y a des chose appelés Fonction. Une fonction est un tres gros gain de temps, parce qu'elle prend en charge plusieurs lignes de code. Imaginez cet exemple : Vous voulez afficher dix fois le mot Hell. Mais vous voulez le faire plus d'une fois dans votre code. Sans les fonctions vous devriez faire ca:
<code script> <code script>
for (var a=0; a<10;a=a+1) Game.Msg("Hell"); for (var a=0; a<10;a=a+1) Game.Msg("Hell");
Game.Msg("1"); Game.Msg("1");
-for (a=0; a<10;a=a+1) Game.Msg("Hell"); // note that I had to put the var away as it was already declared before.+for (a=0; a<10;a=a+1) Game.Msg("Hell"); // Notez que j'ai viré le var comme il était déjà déclaré avant.
Game.Msg("2"); Game.Msg("2");
-for (a=0; a<10;a=a+1) Game.Msg("Hell"); // note that I had to put the var away as it was already declared before.+for (a=0; a<10;a=a+1) Game.Msg("Hell");
Game.Msg("3"); Game.Msg("3");
</code> </code>
-Mess, isn’t it? So we’ll simplify our task using a **function**. Function is a piece of reusable code. It is defined by the keyword **function**, name of your preference and parentheses in which you can optionally put some parameters. The exit from the function is defined by a keyword **return;** Note that return forces function to leave immediately so you can use it with some logic code branching. So the basic declaration could look like this:+Fouillis, non? Nous allons nous simplifier la tache en utilisant une **fonction**. Une focntion c'est un morceau de code réutilisable. C'est défini ^par le mot-clé **function**, nommé à votre guise et des parenthèses dans lesquelles vous pouvez éventuellement mettre quelques paramètres. La sortie de la fonction est designé par le mot-clé **return;** Noter que return oblige à quitter immédiatement la fonction, on peut donc l'utiliser avec quelque code de logique à branches. Donc la déclaration de base pourrait être comme ceci :
<code script> <code script>
Line 454: Line 459:
</code> </code>
-See, it’s much more readable. But it’s just a start. Imagine that with each pass you want to write 10 times different word. That’s when the functions really start to kick in. We’ll redefine our function with adding two parameters and rename it to for example writeText. +Vous voyez, c'est beaucoup plus lisible. Mais c'est qu'un début. Imaginez qu'a chaque passage vous deviez écrire 10 fois un mot différent. C'est là que les fonction commence réellement à donner un coup de pied. Nous allons redéfinir notre fonction en ajoutant deux paramètres et la renommer en writeText par exemple
 +
<code script> <code script>
function writeText(what,count) function writeText(what,count)
Line 469: Line 474:
</code> </code>
-In the function the parameter works as a local variable which is valid only in the scope of the function. So our function has two parameters. First defines what to write and the second how many times it should be written. Our program would write 10 times //Hell//, 2 times //on// and 5 times //Earth//. As you can see, this function already simplified our task even more.+Dans la fonction les paramètres fonctionnent comme des variables locales qui ne sont valable qu'a l’intérieur de la fonction. Ainsi notre fonction a deux paramètres. Le premier désigne quoi écrire et le second combien de fois il doit être écrit. Notre programme ecrirai 10 fois //Helle//, 2 fois //on// et 5 fois //Earth//. Comme vous pouvez le voir, cette fonction simplifie encore plus notre tâche.
-So we know how to pass some data to the function but functions can also return data for us. Typical example of such function is Random. As we saw earlier, Random expects 2 parameters and returns a result. We can do the same through the keyword **return**. Let's write a simple function:+Donc nous savons introduire des données dans la fonction, mais les fonctions peuvent aussi nous retourner des donnée. L'exemple type de ce genre de fonction est Random. Comme nous l'avons vu précédemment, Random attend 2 paramètres et retourne un résultat. Nous pouvons faire pareil au moyen du mot-clé **return**. Écrivons une fonction simple:
<code script> <code script>
-function isBigger(number1, number2)+function estPlusGrand(nombre1, nombre2)
{ {
-    if (number1 > number2) return true;+    if (nombre1 > nombre2) return true;
    return false;     return false;
} }
-if (isBigger(1,7)) Game.Msg("Number is higher");+if (estPlusGrand(1,7)) Game.Msg("Le nombre est supérieur");
else else
-  Game.Msg("Number is smaller");+  Game.Msg("Le nombre est inférieur");
</code> </code>
-//**Syntax rule no. 6** +//**Règle de syntaxe no. 6** 
-function name must contain only alphanumeric characters and there shouldn't be any whitespace characters.//+Le nom de la fonction ne doit contenir que des caractères alphanumérique et ne doit pas avoir d'espace.//
-Everything should be very clear at this point. If it’s not, please review the previous chapters before you can understand what’s going on. The only important thing is that we passed to **if** command, instead of our good old direct comparison, a //function//, which returns true or false. **if** command evaluates the function (which in this case returns //false//) and then executes the //else// block. +Tout devrais être plus clair à ce niveau. Si ça ne l'est pas, s'il vous plait revoyez le chapitre précédent avant que vous ne puissiez plus comprendrez ce qui arrive. La seul chose important est que nous sommes passé à la commande **if**, au lieu de notre bonne vieille comparaison directe, une //fonction//,qui retourne true ou false. La commande **if** évalue la fonction (qui dans se cas retourne //false//) et exécute le bloc //else//.
 +====== 2.5. Les Includes ======
 +
 +Comme nous venons de voir les fonctions peuvent etre vraiment utiles mais il y a hic. Il n'y a pas de façon de définir une fonction globale. Il existe bien deux solutions - Grâce aux Includes et aux Objects. Parlons des Includes.
 +
 +Si vous avez regardé un peu dans les projets démo de WME, vous avez vu, que tous les script commence par la ligne
 +
 +<code script>#include "scripts\base.inc"</code>
 +
 +Cette ligne ajoute des le départ le contenu du fichier scripts\base.inc dans ce fichier. A quoi ça sert? Bien, par exemple, si vous ne voulez pas de déclarer vos variables globales à chaque fois que vous en avez besoin dans un nouveau script, il suffit de les mettre dans un fichier .inc et de les inclure. Si vous les mettez dans votre fichier base.inc, vous aurez cette ligne automatiquement incluse à cause du modèle scène. Utile n'est ce pas? Mais c'est pas tout. Vous pouvez aussi mettre vos fonctions couramment utilisées dans certaines fichiers include et les inclurent, si bien que vous n'aurez plus besoin de les copier / coller dans tous les scripts où vous en avez besoin. Notez qu'il n'y a pas de point-virgule à la fin de ligne include!
 +
 +**Important:**
 +Ne jamais initialiser vos variables dans les fichiers include. Elles seraient réinitialisée a chaque inclusion de votre script.
 +
 +
 +
 +
 +
 +
 +====== 2.6. Les Objets ======
 +
 +Le dernier chapitre est dédié à un parie vraiment cool du langage de programmation de WME - Les Objets.
 +
 +Nous allons démarrer doucement avec la réflexion suivante. Imaginez que vous ayez un objet du monde réel. disons une table. Évidemment le terme table est plutôt abstrait - elle peut être faite de plastique, bois, métal ou autre, elle peut avoir plusieurs couleurs, elle peut être chère ou pas. Ça serais pas génial d'avoir toutes les informations sur cette table ensembles?
 +
 +<code script>
 +var table;
 +
 +table.Material = "bois";
 +table.Color = "noire";
 +table.Price = 100;
 +
 +Game.Msg(table.Price);
 +</code>
 +
 +Ce que nous avons fait ici est que nous avons défini une variable, mais au lieu d’accéder directement a cette variable, nous avons défini quelques //Attributs// à cette variable. Nous ne pouvons plus utiliser la variable comme une simple boite. Elle est devenue un objet pour nous.
 +
 +Maintenant vous devez certainement penser "C'est bien beau tout ça, mais comment faire si nous avons 10 tables. Avons-nous besoin de 10 variables et de les déclarer comme ça? Ça sera de nouveau le bazar".
 +
 +Bon, la magie des Objets n'est pas seulement dans les //attributs//, mais aussi dans les **méthodes**. Une méthode c'est une fonction normale, qui appartient à l'objet. Toutes les fois que vous avez utilisé Game.Msg et seulement maintenant vous découvrez, que c'est une méthode de l'objet Game. Le pire est, que presque tout ce dont vous aurez accès du côté de WME est orienté objet et c'est sûr vous allez rencontrer votre dose d'objets.
 +
 +Mais revenons à notre tâche en cours - comment pouvons-nous réellement définir un objet pour être plus souple qui as seulement quelques attributs?
 +
 +Premièrement nous allons créer un fichier de définition d'objet. appelons-le table.script.
 +
 +<code script>
 +#include "scripts\base.inc"
 +
 +method initialize(material, color, price)
 +{
 +  this.Material = material;
 +  this.Color = color;
 +  this.Price = price;
 +}
 +</code>
 +
 +//**Règle de syntaxe no. 5**
 +Si nous voulons accéder à un attribut ou une méthode d'un objet, nous utilisons le point comme vu dans l'exemple précédent.//
 +
 +Comme nous le voyons là, nous sommes à l’intérieur de l'objet donc on ne peut plus utiliser table.Material etc... parce que nous ne savons pas comment la variable englobant notre table sera appelée. C'est pourquoi nous avons un identifiant spécial appelé **this** qui pointe sur l'objet lui-même. De cette façon ça définira toujours l'attribut à la bonne variable.
 +
 +Dans le script nous voulons créer un tel objet, nous devons d’abord le créer:
 +
 +<code script>
 +var table = new Object("table.script");
 +</code>
 +
 +et puis nous pouvons configurer les propriétés de l'objet ainsi
 +
 +<code script>
 +table.initialize("bois","noire",100);
 +</code>
 +
 +Cela paraît déjà beaucoup plus souple, mais nous pouvons aller encore un peu plus loin. Disons que nous allons créer un jeu sur un vendeur de table qui aura 10 tables différentes. Pourquoi ne pas utiliser un tableau pour elles?
 +
 +<code script>
 +for (var a=0;a<10;a=a+1)
 +{
 +  tables[a] = new Object("table.script");
 +}
 +</code>
 +
 +Mais voilà il y a un piège! Vous ne pouvez pas faire quelque chose comme: **tables[a].initialize();** parce WME ne supporte pas la notation de point pour tableaux ou des objets imbriqués. Pas plus que vous ne pouvez pas faire quelque chose comme Game.Scene.SomeAttribute parce WME ne supporte qu'un seul point imbrication. Mais il y a une solution de contournement grâce à la variable temporaire.
 +
 +
 +Le premier cas serait réécrit comme:
 +<code script>
 +var tmp = tables[a];
 +tmp.initialize("bois","noire",100);
 +</code>
 +
 +et l'autre comme:
 +
 +<code script>
 +var tmp = Game.Scene;
 +tmp.SomeAttribute = 1;
 +</code>
 +Je pense que cela devrait être suffisant pour vous permettre de commencer avec les scripts. Le reste est juste une application de ce que vous venez d'apprendre. Je suis sûr que vous n'aurez aucune difficulté à comprendre ce qui se passe maintenant.
 
fr/wmebook/ch2.1318864507.txt.gz · Last modified: 2011/10/17 17:15 by Anto0085
Recent changes RSS feed Creative Commons License Driven by DokuWiki