Fonctionnement général

Le fichier program.script, dans le répertoire /res/scr/ de chaque projet Script, est nécessaire au fonctionnement du projet.
Lorsque Script est ouvert, ce fichier est executé 60 fois par seconde (vitesse modifiable).
Il peut à son tour donner la parole à d'autres fichiers .script, mais c'est principalement lui qui cadence le programme.
L'exécution de ce fichier peut être ralenti si le code est lourd à exécuter pour l'ordinateur. Dans ce cas, on dit que le programme rame.

Tout le contenu du program.script est exécuté constamment. Certaines tâches nécessitent d'être exécutées une seule fois, ou à certains moments précis.
Pour cela, les fonctions event_start et event_end permettent respectivement d'exécuter des tâches uniquement au démarrage du programme, et uniquement à l'arrêt du programme.

Exemple:
Un exemple fréquent est l'importation d'une image qui doit s'effectuer une seule fois, et au démarrage du programme.

if event_start()

{

 sprite = import_sprite("image.png");

}


draw_sprite(sprite, -1, 50, 120);

En revanche, l'affichage d'une image doit se faire continuellement. Sinon celle-ci ne reste pas affichée à l'écran. Cette dernière sera donc placée en dehors de l'event_start.

Variables

Une variable permet de stocker de l'information dans le but de la retrouver plus tard.
Les variables peuvent contenir des informations de type numérique ou textuelle.
Il est possible de créer des variables à tout moment, elles seront toutes supprimées automatiquement à l'arrêt du programme.
Les variables sont caractérisées par deux éléments:

  • Un nom
  • Une valeur

Exemples:

Prenom = "Jack";

age = 42;

Points_De_Vie = 3;

TAILLE = 1.73;

passions = "Créer des logiciels et des jeux vidéo";

L'action d'affecter une valeur à une variable s'appelle "initialiser une variable".
Une variable ne peut être utilisée tant qu'elle ne contient pas de valeur.

Les noms de variable doivent respecter une syntaxe précise pour fonctionner:

  • Un nom de variable ne peut contenir que des caractères alphanumérique (A-Z, a-z, 0-9) et le caractère underscore "_" (tiret du bas, ou tiret de la touche 8 du clavier);
  • Un nom de variable ne peut pas commencer par un caractère numérique.

Il existe 2 types de variable sur Script: Les nombres (real) et les textes (string).
Le type d'une variable est la nature de son contenu. Il est défini automatiquement en fonction de ce qu'on stocke dans la variable.

Il est possible de changer la valeur et le type d'une variable, pour cela il suffit d'écraser la précédente valeur en réenregistrant par dessus une nouvelle valeur.


Variables temporaires


Les variables temporaires sont des variables qui se suppriment automatiquement à la fin de l'exécution d'un bloc.

Le mot clef var permet de rendre une variable locale à un fichier Script ou à un bloc d'accolades.

Exemples:

// La variable exemple n'existe pas

{

var exemple;

// La variable exemple n'existe pas

exemple = "test";

// La variable exemple vaut "test"

}

// La variable exemple n'existe pas

// La variable exemple n'existe pas

exemple = 10;

// La variable exemple vaut 10

{

var exemple;

// La variable exemple n'existe pas

exemple = "test";

// La variable exemple vaut "test"

}

// La variable exemple vaut 10


Variables internes


Les variables internes sont des variables initialisées automatiquement par Script pour apporter des informations modifiables et exploitables facilement.

room_speed : Vitesse désirée de lecture du code (images par seconde).
program_name : Nom de la fenêtre.
display_width : Largeur de la fenêtre en pixels.
display_height : Hauteur de la fenêtre en pixels.
background_color : Couleur du fond de la fenêtre.
time : Facteur de vitesse d'exécution.
lag : différence entre la vitesse désirée et la vitesse réelle de lecture du code (images par seconde)


Constantes


Une Constante est une variable déjà initialisée, dont il est impossible de modifier manuellement sa valeur.
mouse_x : La coordonnée x du curseur de la souris.
mouse_y : La coordonnée y du curseur de la souris.
fps : Vitesse réelle de lecture du code (images par seconde).
current_time : Nombre de millisecondes écoulées depuis le démarrage du système.
current_year : L'année en cours.
current_month : Le mois en cours.
current_day : Le jour actuel.
current_weekday : L'actuel jour de la semaine (1=dimanche, ..., 7=samedi).
current_hour : L'heure courante.
current_minute : la minute courante.
current_second : La seconde courante.
pi : Valeur 3.141592...
true : Valeur 1.
false : Valeur 0.

Opérateurs classiques

Les opérateurs permettent de faire des calculs mathématiques entre des nombres, ou de faire des opérations de concaténation entre des chaînes de caractères.

Une opération ne peut fonctionner que si tout les termes de la formule sont de même type.
Les opérateurs sont les suivants:

  • L'addition: +
  • La soustraction: -
  • La multiplication: *
  • La division: /
  • La division entière: div
  • Le modulo: mod

variable = 5 + 10;

variable = 5 - variable1;

variable = variable1 * 3.14;

variable = variable1 / variable2;

variable = 42 div 10;

variable = 42 mod 10;

Il existe une syntaxe particulière pour écrire plus rapidement certaines opérations.
Les deux exemples suivants sont équivalents.

variable = 10;

variable = variable + 50;

variable = variable - 10;

variable = variable * 2;

variable = variable / 10;

variable = 10;

variable += 50;

variable -= 10;

variable *= 2;

variable /= 10;

Dans tout calcul comportant plusieurs opérations, il peut être judicieux d'utiliser des parenthèses pour gérer les priorités de calcul.

variable = 2 * (7 + 14);

Certains opérateurs fonctionnent aussi avec des chaînes de caractères.

variable1 = "Je m'appelle" + "Marvin";

variable1 += " et j'ai 42 ans.";

variable1 = 'Voici 3 lettres "A": ';

variable1 = 3 * "A";

Opérateurs booléens

Les opérateurs booléens, comme leur nom l'indique, retournent un résultat booléen (0 = faux, 1 = vrai) Vous verrez dans la partie suivante qu'ils sont principalement utilisés pour effectuer des conditions. Les opérateurs booléens sont les suivants:

  • L'égalité: == ou =
  • La différence (non-égalité): !=
  • Le supérieur à: >
  • L'inférieur à: <
  • Le supérieur ou égal à: >=
  • L'inférieur ou égal à: <=
  • La porte logique AND: && ou and
  • La porte logique OR: || ou or
  • La porte logique XOR: ^^ ou xor

La porte logique AND (et) retourne le résultat 1 si les deux termes de l'opération sont différents (!=) de zéro. Dans le cas contraire, elle retourne 0.

La porte logique OR (ou) retourne le résultat 1 si au moins l'un des deux termes de l'opération est différent (!=) de zéro. Dans le cas contraire, elle retourne 0.

La porte logique XOR (ou exclusif) retourne le résultat 1 si un et seulement un des deux termes de l'opération est différent (!=) de zéro. Dans le cas contraire, elle retourne 0.

variable1 = 5 < 10;

variable2 = 0 and 7;

variable3 = 0 xor 1;

Dans cet exemple, variable1 vaudra 1, variable2 vaudra 0 et variable3 vaudra 1.

Un opérateur booléen particulier s'ajoute à ceux qu'on vient de voir: L'opérateur "!".
Cet opérateur a l'effet d'une porte logique NOT. Il inverse une valeur booléenne (0 devient 1, 1 devient 0).
Sa particularité est qu'il s'applique sur un seul nombre, contrairement aux opérateurs précédents.

variable1 = 0;

variable2 = !variable1;

variable2 vaudra 1.

Opérateurs binaires

Il existe aussi des opérateurs binaires, bien que très rarement utilisés.
Si vous êtes débutant, vous pouvez ignorer ces opérateurs qui ne vous seront utiles que dans des projets très complexes (et encore).
Les opérateurs binaires sont similaires aux portes logiques mais s'appliquent à chaque bit indépendamment.

  • La porte logique AND: &
  • La porte logique OR: |
  • La porte logique XOR: ^

variable1 = 6 & 10;

variable2 = 8 | 7;

variable3 = 2 ^ 1;

Exemple de la variable1:

6 (en décimal) vaut 0110 (en binaire)
10 (en décimal) vaut 1010 (en binaire)
0110 & 1010 = 0010 L'opérateur binaire & effectue l'opérateur booléen && entre chaque chiffre binaire (0 && 1 = 0; 1 && 0 = 0; 1 && 1 = 1; 0 && 0 = 0)
0010 (en binaire) vaut 2 (en décimal)
variable1 vaudra donc 2.

De la même manière, variable2 vaudra 15, et variable3 vaudra 3.

Tout comme les opérateurs +, -, * et / qui ont leur version compacte +=, -=, *= et /=, les opérateurs binaires en ont aussi: &=, |= et ^=.

Les derniers opérateurs binaires sont:

  • Le décalage bit à bit vers la gauche: <<
  • Le décalage bit à bit vers la droite: >>
  • L'inverseur de bits: ~

variable1 = 2 << 1;

variable2 = 32 >> 2;

variable3 = ~15;

Le décalage bit à bit consiste à décaler d'un ou plusieurs crans les chiffres binaires d'une valeur.

Dans cet exemple, la valeur 2 (0010 en binaire) va subir un décalage bit à bit de 1 cran vers la gauche, ce qui donnera 4 (0100 en binaire). Cette opération équivaut à multiplier par 2 la valeur à chaque cran.

A la seconde ligne de l'exemple, la valeur 32 (0010 0000 en binaire) va subir un décalage bit à bit de 2 crans vers la droite, ce qui donnera 8 (0000 1000 en binaire). Cette opération équivaut à diviser par 2 la valeur à chaque cran.

La dernière ligne de l'exemple utilise l'opérateur d'inversion de bits. Chaque bit de valeur 0 devient 1, et 1 devient 0. Cette action a aussi une influence sur le signe du nombre. Le nombre 0 (en décimal) est considéré comme faisant partie des nombres positifs. L'inverse de 15 ne sera donc pas -15, mais -16.

Conditions

EN COURS DE REDACTION

Structure de contrôle:
if

Accolades:
{ }

Structure de contrôle:
else

Structure de contrôle:
while for

( )

Fonctions

Une fonction est une appellation pour exécuter un groupe de tâches.
On peut fournir des arguments (valeurs) à une fonction pour qu'elle les utilise dans ses calculs.
Une fonction retourne un résultat à la fin de son exécution, qui peut être utilisé ou non dans la suite du code.

Une fonction se matérialise sous la forme d'un fichier Script dont le nom du fichier sera le nom de la fonction.
La fonction pourra ensuite être appellée comme ceci:

maFonction();


maFonction(argument0, argument1, argument2);


maFonction(argument0, argument1, argument2, argument3, argument4, argument5, argument6, argument7, argument8, argument9, argument10, argument11, argument12, argument13, argument14);

Le nombre d'arguments peut aller de 0 à 15
La fonction retourne ou non un résultat qui dans cet exemple est stocké dans une variable ou être utilisé directement dans une condition ou une autre fonction.

variable = maFonction();


if (maFonction() == true)


maFonction1(maFonction2());

Lorsqu'une fonction s'execute, le fichier Script qui porte le même nom sera exécuté.
Si ce fichier se trouve dans un dossier, la syntaxe pour exécuter la fonction sera l'une des suivantes:

monDossier->maFonction();


monDossier.maFonction();

Le nom de la fonction peut comporter autant de dossiers que possible.
Il existe une troisième syntaxe pour exécuter une fonction:

function("dossier/fichier");


Cette ligne exécutera le fichier res/scr/dossier/fichier.script

La création d'une fonction peut se faire de deux manières différentes:
- Créer un fichier Texte, et renommer son extension en .script
- Générer le fichier Script via la fonction create_function("maFonction", "leCodeIci");

Exemples de syntaxe d appel de fonctions Script

Norme

La norme d'un code est la façon avec laquelle il a été écrit rendant ainsi un code propre/sale, ou lisible/illisible selon la personne qui le lit.
Dans certains cadres professionnels ou collaboratifs, une norme est fixée pour qu'un code soit aussi lisible par toutes les personnes qui le programment.
Cette partie n'a pas pour but d'imposer une norme, mais de montrer la flexibilité du langage pour que vous puissiez construire votre propre norme.
Il n'existe pas de bonne ni de mauvaise norme. Ce sont juste un ensemble de conseils pour rendre un code plus agréable à lire, et ainsi trouver facilement ses erreurs sans avoir à les chercher.
L'usage d'aucune norme représente cependant une mauvaise façon de programmer, car le code est forcément illisible.
Beaucoup de programmeurs refusent de corriger un code qui n'est pas à la norme. Donc si vous demandez de l'aide à quelqu'un pour résoudre une erreur, pensez à écrire proprement votre code. Sachant que c'est souvent la raison pour laquelle une erreur a lieu.

Le point virgule

Commençons par un élément simple, le point-virgule ";". Utilisé à la fin de toutes les fonctions et affectations, il représente la fin d'une instruction. Dans de nombreux langages (comme le C et le C++), ce point-virgule est obligatoire pour le bon fonctionnement du code. Mais Script peut s'en passer, il reste cependant encore utilisé par les personnes habituées à son utilisation dans d'autres langages.

Les parenthèses

Les parenthèses "(" et ")", utilisées dans des conditions ou dans des calculs sont toutes facultatives tant qu'elles ne servent pas à indiquer un ordre de calcul.
Elles restent cependant obligatoires pour encadrer les arguments après le nom d'une fonction.

Le double égal

L'opérateur double-égal "==" présent dans les conditions peut aussi s'écrire avec un simple égal "=". Il s'agit juste d'une simplification pour faciliter la compréhension des conditions aux débutants. A ne pas confondre avec le simple égal des affectations de valeur.

Les opérateurs booléens

L'opérateur de condition AND s'écrit "&&" ou "and".
L'opérateur de condition OR s'écrit "||" ou "or".
L'opérateur de condition XOR s'écrit "^^" ou "xor".

Les accolades

Les accolades "{" et "}" encadrant les instructions précédées par une condition sont facultatives si elles ne contiennent qu'une instruction.
Elles peuvent aussi s'écrire respectivement "begin" et "end;".

L'indentation

L'indentation est le fait d'ajouter une marge à gauche des lignes de code lorsqu'elles sont encapsulées dans une condition ou dans des accolades.
Cette indentation sert à distinguer facilement et rapidement si une portion de code dépend d'une condition.
La marge d'une indentation peut faire la taille que vous souhaitez. Je conseille cependant d'utiliser une indentation bien régulière, comme un espace ou une tabulation.
Une indentation dans une autre représentera donc deux marges.

Le nom des variables et fonctions

De nombreuses normes sont proposées pour l'écriture des noms de variables. Le plus important reste cependant d'avoir des noms de variable clairs, compréhensibles ni trop longs, ni trop courts.

En voici quelques unes:

- maVariable : Mettre une majuscule devant chaque mot pour faciliter le travail de découpage de texte pour le cerveau. Cette norme très répandue s'appelle le "lowerCamelCase". Notez que le premier mot reste en minuscule.
- mavariablelocale et Mavariableglobale: Utiliser la majuscule de la première lettre pour distinguer la portée d'une variable (locale ou globale). Il existe une variante qui consiste à écrire les variables globales entièrement en majuscules.
- ma_variable : Utiliser des underscores "_" pour séparer les mots dans un nom de variable.

Ces normes peuvent être utilisées ensemble, ou d'autres peuvent être inventées tant que les variables restent intuitives à comprendre.

Les fonctions

Les fonctions créées par vous peuvent être appelées de différentes manières. avec une flèche "->", un point ".", ou la fonction function();

Exemples de syntaxe d appel de fonctions Script

Optimisation

Texte