Ayane Bot administrateur

Inscrit le: 17 Sep 2007 Messages: 2012 Sujets: 49
Médailles: 2 (En savoir plus...)
|
Posté le: 31/08/07 17:17 Sujet du message: Les principes du JASS |
|
|
I/ Prologue
Qu'est-ce que le GUI?
Le GUI est l'Interface Utilisateur Graphique, dans WarcraftIII on a ainsi nommé un peu à tord les commandes graphiques servant à définir les déclencheurs (événements-conditions-actions). En réalité le GUI est un générateur de code Jass, Blizzard a conçut le GUI afin de simplifier aux débutants la création de déclencheurs.
Qu'est-ce que le Jass?Le Jass est un langage script ( langage textuel permettant de communiquer entre la machine et l'utilisateur, qui contrairement à un langage de programmation n'est pas compilé mais éxécuté par un interpréteur ), il s'agit du Jass2 dans WarcraftIII (Starcraft utilise la version 1). Il sert notamment à définir les déclencheurs ( à la base pour les quêtes ) et à définir divers paramètres ( nom de la carte, nombre de joueurs, ... ). Comme tous les langages textuels il possède une grammaire appelée syntaxe et une orthographe avec le vocabulaire qui va avec ( structures et fonctions ) qu'il faut apprendre et respecter. Une faute provoque une erreur et il faut donc la corriger afin de pouvoir éxécuter le code, c'est à cause de cela que beaucoup voulant s'initer au scripts y renoncent.
Pourquoi alors utiliser le Jass et non le GUI ?
Pour plusieurs raisons:
Le GUI n'exploite pas toutes les possibilités du Jass (notamment les variables locales)
Le GUI ne libère pas la mémoire utilisée pour certaines fonctions, de ce fait si elle est utilisé des milliers de fois dans une boucle cela sature la mémoire et fait donc « ramer » le jeu.
Il est plus facile de modifier du code Jass
Le GUI passe par des sous-fonctions utilisant ainsi plus de temps de calculs ( n'a pas d'influences dans 98% des cas ).
Le GUI a quelques bogues
Pour certains éviter que des « boulets » modifient certains déclencheurs
Quels outils utilisés avec le Jass ?
Comme tous scripts n'importe quel éditeur de texte (ex: bloc-note, ou World Editor en faisant Convertir en texte personnalisé pour le déclencheur), mais mieu vaut un bon IDE tel que Jass Shop Pro qui en plus de la colorisation syntaxique a quelques outils tel que la vérification syntaxique ( permet de trouver les erreurs de syntaxe ). Si vous ne l'utilisez pas vous pouvez utilisé JASS Syntax Checker pour la vérification syntaxique.
La liste des fonctions se trouvent dans les fichiers common.j pour les fonctions natives, blizzard.j pour les sous-fonctions utilisées par le GUI, common.ai pour les fonctions d'intelligence artificielle, ces fichiers se trouvent dans le dossier scripts du MoPaQ de WarcraftIII (de préférence le war3patch.mpq pour ceux de la dernière version) que vous pourrez retrouver avec WinMPQ.
NB: Pour TFT dans les déclencheurs, en cliquant sur la carte vous avez une aire de texte nommé « Script personnalisé » servant à mettre vos foncions Jass.
II/ Introduction
Lorsqu'on débute il faut de la persévérance, en effet vous ferez beaucoup d'erreurs et il ne faut pas que ça vous décourage ( mettez de la musique pendant que vous codez, pas trop prenante non plus il faut rester concentré ), ne vous en prenez pas à votre machine elle ne fait qu'éxécuter ce que vous lui dites de faire.
On va donc ordonner à notre machine d'effectuer des diverses actions par des phrases appelées instructions.
Chaque instruction se tiennent en une ligne.
Le Jass est sensible à la case, c'est à dire qu'il faut faire attention à respecter les majuscules.
III/ Instructions
Légende, j'utiliserais:
- Le bleu pour indiquer qu'il faut remplacer par sa donnée
- Le vert avec des parenthèses pour indiquer que c'est facultatif
- [ donnée1 | donnée2 ] pour indiquer qu'il faut mettre l'un ou l'autre
Définition de variable
Jass: | [local|global] (constant) type nom (= valeur) |
Création d'une variable: Allocation d'un emplacement mémoire qui varie de taille suivant le type de la variable (ex: une entier prend 4 octets en mémoire vive ce qui veut dire qu'il peut avoir les valeurs dans l'intervalle [-2147483648;2147483647]).
global est une variable accessible sur toutes la carte (comme pour celle du GUI), local sont des variables accessibles qu'à partir de la fonction, et détruite à la fin de l'exécution de celle-ci.
Vous pouvez retrouver la liste des types de variables définis au début du fichier common.j
NB: Si vous ne définissez pas une valeur par défaut alors la variable aura une valeur aléatoire (ce qu'il y avait d'écrit à cet emplacement mémoire avant la création de la variable, ça peut être n'importe quoi)
Ecriture d'une valeur à une variable
Bien évidemment il faut que la valeur soit du même type que la variable, Exemple:
Jass: | local integer i
local real r = 10.0
set i = R2I(r) |
r étant un réel il faut le convertir en entier pour pouvoir le mettre dans i. R2I() est la fonction qui convertir un réel en entier.
Une fonction est un ensemble d'instructions, elle peut prendre plusieurs paramètres en entrer puis retourne une valeur.
Elle se définit ainsi
Jass: | function nom takes type nomvar, type nomvar, ... returns type
instructions
(return valeur) // définis la valeur retourné par la fonction et arrête l'éxécution de la fonction
endfunction |
On peut utilise « nothing » pour spécifier qu'on ne prend aucune valeur
Jass: | function DoNothing takes nothing returns nothing
// aucune instruction
endfunction |
Ainsi cette fonction nommé « DoNothing » ne demande aucun paramètres et ne retourne aucune valeur, de plus elle n'exécute aucune instruction.
Le double-slash « // » sert à indiquer que le texte qui va suivre jusqu'à la fin de la ligne est un commentaire et l'interpréteur ne va pas l'exécuter. Il est généralement conseillé de bien commenter le code afin de s'y retrouver plus facilement.
Appel d'une fonction
Jass: | call nom( param1, param2, ... ) |
Exécute la fonction, Exemples
Jass: | call SetMapName("MaCarte") |
NB: On définit une chaîne de caractères entre des doubles-quotes (")
IV/ Structures de contrôle
Elles servent à exécuter des instructions suivant certaines conditions.
Voici un tableau qui devrait vous aider
Code: | if si
then alors
else sinon
loop boucle
exitwhen quitter lorsque |
Code: |
opérateurs numéraires:
< inférieur à
<= inférieur ou égal à
== strictement égal à
>= supérieur ou égale
> supérieur à
!= différend de
opérateurs boolean:
and et
or ou
not n'est pas vrai |
Les opérateurs servent à comparer et renvoient une bouléanne. Ainsi on peut écrire
Code: | local integer toto = 12
local boolean b = ( toto > 10) |
On aura b = true
Teste conditionnel: if / then / elseif / else
Voici un exemple très simple à lire, nous définissons une variable à la valeur 512 puis nous allons tester si celle-ci est comprise entre 0 et 499 puis entre 500 et 999 et enfin supérieure à 999, ce qui nous donne :
Jass: | local integer toto = 512
local string message
if (toto>=0 and toto<500) then
set message = I2S(toto) + " est compris entre 0 et 499"
elseif (toto>=500 and toto<1000) then
set message = I2S(toto) + " est compris entre 500 et 999"
else
set message = I2S(toto) + " est supérieur à 999 (à moins qu'il soit inférieure à 0)"
endif
call DisplayTextToPlayer( Player(0), 0, 0, message ) // on affiche le message pour le joueur 1 |
Ce qui affiche: 512 est compris entre 500 est 999
1er contrôle : Si (512 est plus grand ou égal à 0 et que 512 est plus petit que 500) : on affiche le 1er message
2e contrôle : Si (512 est plus grand ou égal à 500 et que 512 est plus petit que 1000) : on affiche le 2e message
3e contrôle : Dans tous les autres cas : on affiche le 3e message
Un autre exemple pour mieux comprendre
Jass: |
local string message
local string medor = "chien"
if (medor == "girafe") then
set message = "medor est une girafe"
elseif (medor == "elephant") then
set message = "medor est un éléphant"
elseif (medor == "souris") then
set message = "medor est une souris"
elseif (medor == "chien") then
set message = "medor est un chien"
elseif (medor == "chat") then
set message = "medor est un chat"
else
set message = "Peut-être un hippopotame ? Qui sait ..."
endif
call DisplayTextToPlayer( Player(0), 0, 0, message ) // on affiche le message pour le joueur 1 |
Ce qui affiche: Medor est un chien
Boucle: loop / exitwhen / endloop
Cela sert à éxécuter plusieurs fois un lot d'instructions. On va reprendre notre variable toto à laquelle nous allons donner la valeur 6. Puis nous allons nous mettre dans le cas où nous ne connaissons pas la valeur de toto et allons la rechercher.
Jass: |
local integer toto = 6
local integer i = 0
loop
exitwhen i == toto
call DisplayTextToPlayer( Player(0), 0, 0, "Toto est différend de " + I2S(i) )
set i = i + 1
endloop
call DisplayTextToPlayer( Player(0), 0, 0, "Toto est égal à " + I2S(i) )
|
Ce qui affiche:
Toto est different de 0
Toto est different de 1
Toto est different de 2
Toto est different de 3
Toto est different de 4
Toto est different de 5
Toto est égal à 6
1/ i=0, On teste si 0 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
2/ i=1, On teste si 1 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
1/ i=2, On teste si 2 est égale à toto = non, on affiche le message puis on incrémente i de 1, et on retourne à loop
4/ etc ...
5/ i=6, On teste si 6 est égale à toto = oui, on sort de la boucle (après le endloop) puis on poursuit le code. En l'occurence on affiche le message (Toto est égal à 6)
V/ Conclusion
Voila qui conclut ce qu'il faut savoir pour pouvoir utiliser le JASS, il ne vous reste plus qu'à le maîtriser, pour cela le mieux est la pratique, je vous conseil pour commencer de faire des déclencheurs en GUI puis les convertir en Jass, de les comprendre puis de les améliorer en utilisant les fonctions natives (common.j) au lieu de celle pour le GUI (blizzard.j), il vous faut donc ces deux fichiers sous la main (ils y sont dans Jass Shop Pro).
Ainsi il est assez interressant d'utiliser le Jass si vous faîtes beaucoup de GUI car au début vous allez peut-être mettre plus de temps mais après vous vous rendrez compte que vous allez plus vite, que votre code vous est plus compréhensible et qu'il est plus simple à modifier que si vous le faisiez avec du GUI (sur les gros déclencheurs). _________________
Dernière édition par Ayane le 17/02/10 09:38; édité 2 fois |
|