Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=d1302f99a8de2f1a338bb07bce7921b5Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Débuter en JASS
Aller à la page 1, 2  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 25/08/10 14:57    Sujet du message: Débuter en JASS Citer

Voilà un tutoriel que j'ai écrit pas mal en même temps que j'apprenais le JASS, il y a de cela quelque mois (presque en même temps que j'ai appris le jass..^_^). Bien que je n'en sois pas trop fier et qu'il y ait plusieurs modifications à apporter, j'ai mis plusieurs heures à écrire ce tuto qui résume les plus importantes notions en JASS. Il demande cependant des notions en programmation générale, donc le public-cible du tuto est assez réduit.

Puisque le tuto est assez lourd, je ne vais pas l'uploader ici. Neutral

Il s'agit en fait d'une "compilation" de tutoriels sur le JASS, qui donnent un tutoriel plutôt complet.

Lien
_________________


Dernière édition par Ashlebede le 01/09/10 20:43; édité 1 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 25/08/10 15:55    Sujet du message: Citer

Tien, je l'avais lu l'autre jour ^^.
Merci pour ce bon tuto, et tu devrais plutôt le mettre dans "proposer un tuto".
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 25/08/10 16:01    Sujet du message: Citer

DaKanibal a écrit:
tu devrais plutôt le mettre dans "proposer un tuto".
¸

Quelle différence avec "demander un tuto"? Confused
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 25/08/10 16:05    Sujet du message: Citer

Demander un tuto c'est quand t'as besoin d'un tutoriel ._.
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 25/08/10 16:08    Sujet du message: Citer

Aaah, d'accord... Embarassed

Et où est cette fameuse section ? Bah, de toute façon, je ne peux pas déplacer un topic, seuls les modos peuvent. Wink
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 StormDelay
Floodeur prématuré


Inscrit le: 12 Juin 2010
Messages: 425
Sujets: 7
Spécialité en worldedit: Chercher un projet de map...


MessagePosté le: 25/08/10 16:12    Sujet du message: Citer

Juste en dessous ou au dessus de "demander un tuto" Wink.
_________________
Votre ordinateur n'a pas planté depuis plus de 2 heures. Windows va lancer le programme MS Autocrash pour effectuer un plantage de routine.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 25/08/10 16:14    Sujet du message: Citer

Mais ça dit "En validation", pas "Proposer un tuto" ! Mad
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 StormDelay
Floodeur prématuré


Inscrit le: 12 Juin 2010
Messages: 425
Sujets: 7
Spécialité en worldedit: Chercher un projet de map...


MessagePosté le: 25/08/10 16:30    Sujet du message: Citer

Dès qu'un tuto est créé il est considéré comme en validation il me semble. En tout cas c'est là qu'il faut mettre les nouveaux tutos je pense.
_________________
Votre ordinateur n'a pas planté depuis plus de 2 heures. Windows va lancer le programme MS Autocrash pour effectuer un plantage de routine.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Rommstein60
MODÉRATEUR À LA RETRAITE


Inscrit le: 23 Aoû 2007
Messages: 4766
Sujets: 136
Spécialité en worldedit: Keskesapeutfout'
Médailles: 1 (En savoir plus...)
Rédacteur de tuto #1 (Quantité : 1)

MessagePosté le: 25/08/10 17:31    Sujet du message: Citer

Très beau tutoriel, félicitations à toi. Smile
J'accepte, bien qu'il ne soit pas vraiment "aux normes" du forum. Wink

_________________
Leçon n°1 du WorldEdit : « Le violet > Troll-Brain »
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 26/08/10 09:29    Sujet du message: Citer

Exellent, je me suis mis au jass grace a sa ^^
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 DaKanibal
Membre a fort taux de post


Inscrit le: 12 Sep 2009
Messages: 801
Sujets: 64
Spécialité en worldedit: Ne pas.


MessagePosté le: 26/08/10 13:34    Sujet du message: Citer

J'ai une idée, on pourrait faire un spotlight pour ça et on remet chaque chapitre dans un post ?
_________________
||**||
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 01/09/10 20:42    Sujet du message: Citer

Trop de trouble : les tutoriels sont écrits en zCode. À moins que le forum ne supporte le HTML (on peut convertir zCode-> HTML), ça sera du trouble pour rien. Mad

Partie sur l'amélioration des performances et sur la fonction GetLocalPlayer() en cours de rédaction.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 02/09/10 09:35    Sujet du message: Citer

J'ai lu ton tutoriel même si j'avais rien à y apprendre. Je te fais par de mes remarques :

Les origines du JASS
Le JASS de Warcraft 3 est en fait le JASS2. Le JASS1 étant le langage utilisé pour Starcraft.
Et si je me souviens bien, l'acronyme JASS peut être retrouvé dans des fichiers de Starcraft. Mais je n'en suis pas certain.

Libération de Mémoire
Le pourquoi du comment il faut mettre une variable sur null c'est que le recycleur de pointeur du JASS ne fait pas correctement son travail. Et on est donc obligé de le faire a sa place.
Dans les autres langages, on est pas obligé de faire ça. Et heureusement Very Happy

Variables Globales
Citation:
En JASS, il ne peut y avoir qu'un global block par map ! On ne peut donc pas mettre des blocs de ce type dans ses fonctions de tous les jours !

C'est vrai pour le Jass, mais c'est faux pour le vJass.

if, else, elseif
Beaucoup de langages oblige de mettre les conditions entre parenthèse. C'est une bonne habitude à prendre d'en mettre tout le temps. Ne serait-ce que pour éviter les erreurs stupides dans les autres langage.

loop
Il existe 3 schémas de boucles (et seulement 3, pas la peine d'essayer d'en chercher un autre farfelu). Il serait peut être bien de montrer comment représenter ces 3 schémas de boucles en Jass.
Et surtout préciser que de mettre plusieurs exitwhen dans une boucle est une erreur grave même si Jass ne l'empêche pas.

Opérateurs
Cours de logique booléenne de base :
not (a or b) = (not a) and (not b)
not (a and b) = (not a) or (not a)
Lois de De Morgan.

Les triggers
La programmation événementielle n'a pas été inventé par Blizzard. Tu trouveras pleins d'explications et de documentation dessus sur le Web. Tu peux toujours t'en inspirer ou donner des liens si les lecteurs veulent en apprendre plus.

Laborato - Un Trigger Simple
Wow un peu violent. Tu sors un 'hfoo' sans en avoir parlé avant. ça pique un peu la.

Game Cache
Le return bug ne fonctionne plus non ? Le tuto n'est pas à jour.
Il faudrait remplacer cette partie par les Hashmap.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Ashlebede
Ptit Nouveau


Inscrit le: 23 Aoû 2010
Messages: 16
Sujets: 2



MessagePosté le: 02/09/10 21:39    Sujet du message: Citer

Ma première critique! =D

Je vais enfin pouvoir me défendre. Hihi.

Citation:
Le JASS de Warcraft 3 est en fait le JASS2. Le JASS1 étant le langage utilisé pour Starcraft.
Et si je me souviens bien, l'acronyme JASS peut être retrouvé dans des fichiers de Starcraft. Mais je n'en suis pas certain.


Bon à savoir, je risque d'en parler dans mon prochain update.

Citation:
Le pourquoi du comment il faut mettre une variable sur null c'est que le recycleur de pointeur du JASS ne fait pas correctement son travail. Et on est donc obligé de le faire a sa place.
Dans les autres langages, on est pas obligé de faire ça. Et heureusement


Haha, bon point, là aussi.

Citation:
Citation:
En JASS, il ne peut y avoir qu'un global block par map ! On ne peut donc pas mettre des blocs de ce type dans ses fonctions de tous les jours !


C'est vrai pour le Jass, mais c'est faux pour le vJass.


Il ne s'agit pas d'un tuto sur la vJASS (du moins, pas encore). En fait, j'ai à peine mentionné l'existence de ce langage.

Citation:
Beaucoup de langages oblige de mettre les conditions entre parenthèse. C'est une bonne habitude à prendre d'en mettre tout le temps. Ne serait-ce que pour éviter les erreurs stupides dans les autres langage.


Ma réponse :

Citation:
il est mieux de toujours mettre les conditions entre parenthèses.


Citation:
Il existe 3 schémas de boucles (et seulement 3, pas la peine d'essayer d'en chercher un autre farfelu). Il serait peut être bien de montrer comment représenter ces 3 schémas de boucles en Jass.
Et surtout préciser que de mettre plusieurs exitwhen dans une boucle est une erreur grave même si Jass ne l'empêche pas.


Quels trois schémas? Moi, je ne connais que le schéma loop+exitwhen. D'ailleurs, je n'ai pas inventé d'autres schémas farfelus. u_u

D'ailleurs, un second exitwhen pourrait être utile, dans certains cas rares. J'aime bien faire comme suit :

Jass:

set i = 0
loop
        exitwhen i==512
    if GetUnitTypeId(udg_monArray[i])=='hfoo' then
        call KillUnit(udg_monArray[i])
            exitwhen true
    endif
    set i = i + 1
endloop


Mais bon, ça c'est plutôt mes préférences, car il y aurait autre moyen... mais qu'est-ce qu'il y a de si mal à utiliser un second exitwhen? Surprised

Citation:
Cours de logique booléenne de base :
not (a or b) = (not a) and (not b)
not (a and b) = (not a) or (not a)
Lois de De Morgan.


Ouaip. Mais pourquoi je devrais expliquer ceci, mais pas les triggers? Car, après tout, dans la prochaine citation...

Citation:
La programmation événementielle n'a pas été inventé par Blizzard. Tu trouveras pleins d'explications et de documentation dessus sur le Web. Tu peux toujours t'en inspirer ou donner des liens si les lecteurs veulent en apprendre plus.


Alors je ne devrais pas expliquer ceci, qui n'est propre qu'à quelques langages, alors que je dois mentionner les lois de Morgan, qui s'appliquent à tous les langages et encore plus?

Citation:
Wow un peu violent. Tu sors un 'hfoo' sans en avoir parlé avant. ça pique un peu la.


Voyons voir si je peux retrouver les 3 extraits... peut-être 2...

Citation:
Le type integer peut aussi désigner un type d'unité, de sort, d'item, de buff... dans ces cas-là, ce type sera un code de 4 caractères entre apostrophes ', et non entre guillemets ". Le premier caractère d'un de ces codes indique le type ou la race. Par exemple, les sorts commencent par 'A et les unités de race humaine par 'h. Les trois autres caractères sont spécifiques et uniques au type d'unité, d'item, de sort... par exemple, 'hfoo' est le code de l'unité footman. Les unités, sorts, etc. définis par l'utilisateur ont des numéros à la place des 3 derniers caractères. Par exemple, la première unité de race humaine créée aura pour code 'h000'.

Pour trouver le code d'une unité ou un autre type, on doit aller dans le Object Editor et trouver l'unité en question. On fait ensuite CTRL+D. Dans le menu de gauche, les noms sont alors remplacés par les identifiants des types. On appuie encore une fois sur CTRL+D si on veut retourner en mode normal.

Citation:
Pour trouver le code integer d'une unité, il faut aller dans l'Object Editor et appuyer sur CTRL+D.


Je crois en avoir oublié quelques-uns... en tout cas, je trouvais que, au contraire, je mentionnais trop souvent qu'on peut trouver le code d'une unité avec CTRL+D dans l'Object Editor. J'avais l'impression de prendre le lecteur pour un imbécile, en quelque sorte... comme tu as probablement remarqué les multiples mentions sur le type code. Le footman est d'ailleurs l'unité que j'utilise pour tous mes exemples. u_u

Citation:
Le return bug ne fonctionne plus non ? Le tuto n'est pas à jour.
Il faudrait remplacer cette partie par les Hashmap.


Haha, ouais, c'est un peu mélangeant. Mais j'avais commencé par montrer l'utilisation du G.C. (ne me demande pas pourquoi Laughing)... puisque j'avais fini cette partie-là et que j'avais travaillé beaucoup dessus, j'ai décidé de le garder comme "introduciton" au principe des Hashtables. Note, cependant, que...

Citation:
après la version 1.23b de Warcraft III, le return bug n'existe plus ! Cependant, il existe une fonction, appelée GetHandleId, qui remplace H2I, et qui est incluse dans la map.


Clique ici, par exemple. Tu peux voir que cette partie est assez brève, car le fonctionnement général est expliqué plus haut. Ça m'a permis de ne pas avoir à me re-taper tout le travail.

Mais oui, en effet, j'aurais dû mettre plus d'emphase sur le fait que les Game Caches ne fonctionnent plus pour sauver des Handle. Mad
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Magus
Membre a fort taux de post


Inscrit le: 13 Oct 2007
Messages: 994
Sujets: 25
Spécialité en worldedit: Codeur


MessagePosté le: 03/09/10 09:28    Sujet du message: Citer

Oui pour les lois de De Morgan je me suis un peu mélangé ><

Pour le 'hfoo' j'ai du lire ton tutoriel trop rapidement et je n'avais pas vu ces extraits. Toutes mes excuses.

Pour les schémas de boucles :
Peut être que le tutoriel que tu donnes (la programmation en C) en parle, je ne l'ai pas lu.
En gros, en programmation il existe 3 schémas de boucles à appliquer :

Le for
Code:
for (counter = 0; counter  < max; counter  = counter  + 1) {
    ...
}


Alors suivant les langages bien sur la syntaxe peut changer. On applique ce schéma de boucle quand on sait combien d'élément on doit parcourir et surtout dans quel sens.
Il existe une variante ou le compteur diminue au lieu d'augmenter.
On peut aussi changer la condition si l'on ne désire pas que la boucle aille jusqu'au bout.

Traduction en jass :
Jass:
local integer counter = 0
loop
    exitwhen (counter > max)
    ...
endloop


Le while
Code:

Traitement du premier élément
while (!(condition_de_fin)) {
    ...
    Récupération de l'élément suivant
}


On utilise le while quand :
- On ne sait pas le nombre d'élément qu'on va traiter.
- On ne sait pas s'il y a au moins un élément à traiter
- Le dernier élément à un traitement particulier

Traduction en jass :
Jass:
local xxx element;
element = ...
loop
    exitwhen (condition_de_fin)
    ...
    element = ... // Element suivant
endloop


Le repeat / until
Aussi appelé le do / while dans certains langages :
Code:
do {
    Obtention de l'élément suivant
    ...
} while (!(condition_de_fin));


A utiliser quand :
- On ne sait pas le nombre d'élément qu'on va traiter.
- On sait qu'il y en a au moins un
- Le dernier élément est traité comme les autres

Traduction en jass :
Jass:
local xxx element;
loop
    element = ... // element suivant
    ...
    exitwhen (condition_de_fin)
endloop





Il existe ensuite quelques variantes. Il n'est pas rare d'utiliser un while un peu comme un do / while en faisant comme ça :
Code:
while (!(condition_de_fin)) {
    element = ...; // element suivant;
    ... // traitement de l'élément
}

Mais c'est en fait juste une variante do while lorsqu'on est pas sur d'avoir au moins un élément à traiter.

C'est d'ailleurs équivalent à
Code:
if (!(condition_de_fin)) {
    do {
        element = ...; // element suivant
        ... // traitement de l'élément
    } while (!(condition_de_fin));
}


Mais c'est plus simple de l'écrire directement avec un while, on est d'accord Very Happy




Ces 3 schémas de boucles (le for, le while et le repeat until (ou le do while) sont la bases de toutes les boucles en programmation et n'importe quelle assemblage de boucle peut au final se ré-écrire avec ces 3 schémas.

Mettre plusieurs exitwhen dans un "loop" en Jass, revient à utiliser l'équivalent d'un "break" ou d'un "continue" dans les autres langages. Ce ce qu'on appelle des ruptures de flux.
Les ruptures de flux sont la première cause de bug dans un programme et c'est une horreur à débugguer.
Même si je suis conscient que souvent ils rendent le code plus lisible pour éviter de tomber dans le mode spaghetti. Et surtout ils permettent d'optimiser. Mais leurs rôles doit s'arrêter la: à l'optimisation et à éviter les erreurs. Ils ne doivent en aucun cas être utilisés pour faire fonctionner une boucle.
_________________
- La théorie c'est quand rien ne fonctionne mais tout le monde sait pourquoi.
- La pratique c'est quand tout fonctionne mais personne ne sait pourquoi.
- Chez moi la théorie et la pratique sont réunies, rien ne fonctionne et personne ne sait pourquoi.
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Tutoriels Toutes les heures sont au format GMT + 1 Heure
Aller à la page 1, 2  Suivante
Page 1 sur 2

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com