> LeekScript
Le LeekScript Next est une future version du langage LeekScript basée sur un nouveau compilateur plus rapide utilisant LLVM. Cette version est pour l'instant en pause pour se concentrer sur l'ajout de fonctionnalités dans le LeekScript actuel (version 2, 3 etc.)
Dépôt git du projet : https://github.com/leek-wars/leekscript-v2 Sujet forum : https://leekwars.com/forum/category-6/topic-7833
Ceci est une ébauche basée sur le tutoriel du LSv1, n'hésitez pas à participer !
Voici un pastebin répertoriant l'ensemble des fonctions sous leur module.
Les littérales sont les représentations en dur de valeurs dans le code. Leekscript permet d'écrire directement les valeurs de types suivant:
Les collections acceptent comme valeurs tous les types de littérales (y compris des collections). Pour rappel :
Une expression est composée de littérales et d'application d'opérateurs ou de fonctions. Sa forme la plus simple est une simple littérale: 0. Une autre forme plus familière pourrait être la composition d'opérateur mathématique et de nombres: -1, 1 + 1, 0 * 3, etc. Enfin, la forme la plus avancée utilise des applications de fonctions: max(1, 2), rand(), etc.
En LeekScript, il est possible d'évaluer plusieurs expressions à la suite, en ignorant les résultat, ou en les conservant dans des variables.
1 + 1 2 * 2 Number.cos(π * 2)
Le code ci-dessus évaluera à la valeur 1.
Une variable associe un nom à une valeur. Elle peut contenir n'importe quel objet, en assignant un littéral où le résultat d'une expression.
let me = Fight.getEntity() var y = 1 + 1 const RAD = 180.0 / π global DEBUG = false
Parmi ces quatre déclarations, deux d'entre elles permettent à la variable déclaré d'être modifiée, et deux d'entre elles sont accessibles à partir de n'importe quel endroit du code. Il est conseillé de les utiliser dans l'ordre suivant de priorité:
Les mots clés const et global ne sont actuellement pas implémentés dans le langage. Il est possible d'obtenir le même comportement avec let et var en déclarant toutes vos fonctions avec la syntaxe anonyme, utilisant ainsi les propriétés de portée des variables.
Pour plus de détails, la page sur Les Variables est disponible. Bien que pour l'instant prévu pour l'ancienne version du leekscript, le fonctionnement reste le même, les nouveaux mot-clés offrant uniquement les nouvelles fonctionnalités mentionnées ci-dessus. Une ébauche de la version prévue pour LS 2 est disponible sur Les_Variables V2.
Nous avons vu qu'il était possible d'évaluer plusieurs expressions à la suite, permettant des programmes un peu plus complexe. C'est ce que fais l'intelligence artificielle de base, lorsque vous créez un nouveau fichier. Cependant, c'est assez loin d'être le plus utiles, c'est pour cela que nous avons à disposition des outils qui nous permettent de modifier l'ordre dans lesquels les expressions sont évaluées.
Nous pouvons évaluer certaines expressions plutôt que d'autres en fonction du résultat d'une certaine expression, par exemple, en regardant quel arme est actuellement équipée, afin d'équiper une arme différente ou d'éviter d'équiper à nouveau la même arme.
C'est faisable avec la structure de contrôle if. if attends une expression qui évalue vers un booléen, une série d'expression à évaluer dans le cas où le résultat est vrai, et une série d'expressions à évaluer dans le cas où le résultat est faux. La deuxième série d'expressions peut éventuellement être omise.
if me.getWeapon() == null me.setWeapon(Weapon.PISTOL)
if weapon != Weapon.PISTOL { me.setWeapon(Weapon.PISTOL) weapon = Weapon.PISTOL } else { me.say("I'm ready for the duel.") }
if !me.setWeapon(Weapon.PISTOL) then me.say("Where is my pistol ?") end
let fruit = if me.getWeapon() == Weapon.AXE then "apple" else "banana" end
Pour plus d'informations sur if, vous pouvez visiter la page prévu pour la version actuelle du LeekScript, tout ce qui y est expliqué reste valable en LeekScript 2 (hormis la différence entre == et ===): Les Conditions
Il est possible de faire la même chose avec la structure de contrôle match. Voir même des choses un peu plus avancée. Cette fois ci, n'importe quel expression peut être évalué, et une liste de résultats avec leurs expressions à évaluer est attendu. On peut ainsi aisément reproduire le comportement du if, certain langages le traite même comme un simple raccourci de code qui est remplacé par un match.
Pour plus d'informations sur les embranchements, vous pouvez visiter la page Les Embranchements.
Une fonction est un bloc de code qui permet d'associer des paramètres à une expression, ou bien à une séquence d'instruction. Sa forme la plus simple est anonyme. Ainsi, une fonction qui ne modifie pas son paramètre peut s'écrire de manières suivantes:
x -> x (x) -> x x -> { x } (x) => { x } function(x) { x }
Dans le cas des fonctions flèche, les parenthèses sont optionnels, ainsi que les accolades si le corps n'est constitué que d'une expression/instruction. Le résultat de la dernière expression est retourné par défaut. Il est possible d'utiliser le mot clé return.
Il est aussi possible de nommer nos fonctions. Soit en les assignant à des variables, soit en utilisant la syntaxe spécifique:
let id = x -> x function id(x) { x }
On peut ainsi les réutiliser plus facilement dans nos expressions: max(id(1), 0).
Il est possible de répéter une série d'instructions avec les structures de contrôles appelé boucles.
La forme de boucle la plus simple se contente de répéter indéfiniment son bloc de code tant que la condition en tête du bloc est validée:
Cette boucle utilise la syntaxe suivante: while condition { instructions }. Il est possible d'omettre les accolades dans la cas où une seul instruction soit dans le bloc de code, bien que cela reste déconseillé.
Un peu plus complexe, cette boucle est formé d'une initialisation, d'une condition, et d'un pas:
Cette boucle utilise la syntaxe suivante: for initialisation; condition; pas { instructions }. Même commentaire concernant les accolades. Il est aussi possible d'omettre tout ou partie des étapes en tête du bloc de code. Ainsi, for ; condition ; { instructions } est équivalent à while. Évitez cependant d'utiliser une boucle for si une boucle while fait exactement le même travail.
Cette boucle permet d'itérer sur les élément d'une structure de données, tel qu'un tableau, une map, un objet anonyme, etc...
Cette boucle utilise la syntaxe suivante: for elem in struct { instructions }. struct peut bien entendu venir d'ailleurs que directement dans l'instruction comme sur l'exemple ci dessus. elem est un motif dépendant de la structure de donnée et de ce que vous souhaitez utiliser. Dans le cas des maps, une syntaxe similaire au tableaux associatif en ls 1 est possible (for k : v in map), mais la syntaxe plus généralement utilisé est: for k, v in map. Il est bien entendu possible d’omettre la clé, et de n'itérer que sur les élements: for v in map. Ces informations s'applique à toutes les structures itérables. [A vérifier]
Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.