Salut à tous. Même si NwN2 n'est pas encore sorti, qui n'a jamais pesté de ne rien comprendre aux hiéroglyphes de la programmation lorsqu'il s'agissait de donner un peu d'interactivité à un module ?
La programmation possédant des bases commune à tous les langage il n'est pas inutile de les présenter ici dés aujourd'hui pour que les futur modeurs puissent faire leur première armes dans le monde de l'interactivité.
Alors entrons directement dans le vif du sujet !
il y'a qutre type d'objets en programmation (rien à voir avec la programmation orientée objet qu'il est préférable d'aborder dans un second temps) :
- les variable
- les opérateurs
- les fonctions
- les boucles
les variables :
Il s'agit de valeurs qui peuvent changer au cours du temps. Par exemple, les caractéristiques d'un personnage tels que son intelligence, sa force, son nom etc.
généralement on les déclare comme ceci :
<type de la variable> <nom de la variable> <valeur>
par exemple :
int force = 12
string nom = roger
float poids = 68,5
les mots int, string et float sont empruntés aux langage tels que le C, C++ ou encore Java.
int est utilisé pour désigner un nombre entier, tandis que
float l'est pour les nombres à virgule.
String quand à lui désigne un suite de caractères (lettres, nombres, ponctuations). Ce topic, par exemple, est enregistré dans la base de donnée du forum comme étant une string ("chaîne" en français).
Il y'a d'autres types de variable, comme par exemple le type
booléen. Un nom bizarre qui viens du mathématicien qui les à "inventés" et qui s'appelait Boole. Ce type ne peut prendre que deux valeurs : vrai ou faux (true ou false).
Il y'a aussi le type
char qui est un simple caractère, comme une chaîne mais composée d'un seul élément, par exemple 'c' ou '2' ou '#' etc.
Il existe d'autres types selon les langages, mais je ne les aborderaient pas ici car on entre alors dans des cas particuliers qui pourraient s'éloigner fortement des possibilités du NwNScript.
parenthèse :
Il est bon de savoir que tout ceci n'est qu'une convention d'écriture définie par les créateurs des différents langages.
En effet, dans mon exemple on écrit 'int force = 12' mais dans certains langages de programmation on écrira ' force = 12 as int'.
Pourquoi ?
parce qu'un ordinateur ne comprend absolument pas ce que veux dire 'int' ou 'float', il ne comprend que des trucs du genre 0110100101....
Et oui, les langages de programmation ont étés créés pour les humains, pas pour les ordinateurs !
Et il y'a autant de manière d'écrire en informatique qu'il y'en à dans la vie réelle (français, anglais, arabe, chinois, hiéroglyphes)
Encore une chose concernant les variable. Lorsqu'une variable possède une valeur qui ne change jamais on appelle ça une constante, par exemple le nombre 'PI', ou la vitesse de la lumière 'C'.
Il est à noter qu'il n'est pas toujours obligatoire de donner une valeur dès le départ. On peut par exempl écrire :
int force
dans ce cas là la valeur devra absolument être définie plus tard.
Les opérateurs
A quoi servent les opérateur ?
A faire des opérations, tout simplement.
Il y'a les opérateur mathématiques : + - * / =
les opérateurs de comparaison : > < <= >= et == et !=
un précision sur les deux derniers :
== permet de savoir si deux valeurs sont égales,
il est très courant de se tromper et d'écrire = à la place et ça n'a pas du tout le même résultat.
== est une question. Par exemple :
est ce que (force de roger) == (force de zombie) ?
tandis que = est une affirmation, par exemple
oui, (force de roger) = (force du zombie) !
dans le premier cas on essaye de savoir quelques chose qu'on ne sais pas, tandis que dans le second on modifie la valeur de la force de roger pour qu'elle soit égale à celle du zombie. Donc attention à ne pas se tromper sur ce coup là.
Concernant !=, il peut être écrit comme ceci <>
La aussi c'est un choix fait par les créateurs du langage.
La signification est le contraire de ==
par exemple (force de roger) != (force du zombie) est une question dans la quelle on essaye de savoir si les deux forces sont
différentes
les fonctions
les fonction sont en fait des mécanismes assez complexe. Ce sont des suite d'opérations.
on les note fréquemment comme ceci :
int nom_de_la_fonction(paramètre_1, paramètre_2,...)
{
mécanisme de la fonction
}
par exemple :
int addition(nombre_1, nombre_2)
{
return nombre_1 + nombre_2
}
cette fonction additionne les deux nombres et "retourne" le résultat grace au mot "return".
qu'est ce que ça veux dire ?
prenons un exemple. On veux savoir quelle est l'agilité totale d'un personnage
en fonction des bonus qu'il à en ce moment. On écrira une fonction du genre :
int calculAgilite(agilite, bonus)
{
return agilite + bonus
}
et dans notre script on pourra utiliser le resultat comme ceci :
int agiliteTotale
agiliteTotale = calculAgilite(agilite, bonus)
comme vous pouvez le remarquer il y'a deux étape.
La première s'appelle la "déclaration" de la fonction :
int calculAgilite(agilite, bonus)
{
return agilite + bonus
}
la seconde est son utilisation dans un script :
agiliteTotale = calculAgilite(agilite, bonus)
quel intérêt ?
imaginons que nous avons écrit une fonction très longue, qui fait plusieurs dizaines de lignes. Si nous voulions l'utiliser plusieurs fois dans notre script il faudrait faire un copier/coller de toutes les lignes à chaque fois... on aurais alors un script extrêmement long et, si par malheur on voulais modifier la fonction on devrait aller chercher partout dans notre programme pour modifier tous les copier/ collé !
alors on va laisser l'ordinateur faire les copier/coller pour nous en déclarant la fonction une fois et en utilisant la forme simplifiée dans notre script.
Les boucles
une boucle sert à effectuer des opération en série ou, dans le cas des boucles conditionnelles, une seule fois mais uniquement dans certaine condition.
les boucles les plus généralement utilisée en programmation :
- le if
if (force_roger < force_zombie)
{
mécanismes de la boucle
}
dans cet exemple on teste d'abord la condition (force_roger < force_zombie). Le resultat nous donnera vrai ou faux selon que la force de roger est inferieure à celle du zombie ou non.
On vois tout de suite l'interet de ce genre de boucle.
Par exemple, si le zombie est en train de pousser roger vers un précipice pour l'y faire tomber, via un script on vérifiera lequel des deux à la plus grande force et, en fonction du résultat on ferra ce qui est entre les accolades ou non.
par exemple
if (force_roger < force_zombie)
{
roger tombe dans le précipice !
}
sinon, roger ne tombe pas et on continu le script sans passer par le programme entre les accolades
si roger et le zombie sont en train de se pousser mutuellement vers le précipice on pourra écrire quelque chose du genre :
if (force_roger < force_zombie)
{
roger tombe dans le précipice !
}
else if (force_roger > force zombie)
{
c'est le zombie qui tombe cette fois car roger à plus de force !
}
else
{
personne ne tombe car leurs forces sont égales, à moins qu'ils ne tombent tous les deux ?
}
je m'arrete ici faute de temps, je reprendrais ce soir