?
| Nos forums | NwN2.fr | Lyncya | Notre channel IRC |
La Bibliothéque de Neverwinter Nights
La Bibliothéque de Neverwinter Nights
 
 
 
 
 
Bienvenue, connectez vous ou créez votre compte. Changer d'interface
 
Se connecter:
Login:

Password:


 
Neverwinter Nights 2
  Compendium NWN/NWN2
Classe, Warlock
Classes de Base
Classes de Prestige
Forum Joueur NWN2
Forum Concepteur NWN2
Bestiaire (Créatures)
Races
Tests
 - Collector Chaotique Mauvais (bbnwn, 4 nov 2006)
 - Mask of the Betrayer
 - Storm of Zehir
 - Mysteries of Westgate
Mondes
 - Les Artisans du Mitan
 - Les Légendes de Luiren
 - LanceDragon
 - La Bataille pour Cormanthor
 - Man O'War
 - Sendarie Nouvel Âge
Preview
 - 29 Mars 2006 (BBNWN)
 - 2 mai 2006 (Gamespot)
 - 17 Mai 2006 (WarCry)
 - 19 Mai 2006 (NWVault)
 - Designer Diary #1 (Gamespot, 1er Juin 2006)
Interview
 - Dorian Richard (20/02/2006)
 - Ferret Baudoin (22/02/2006)
 - Feargus Urquhart (2 mai 2006)
 - La Lettre Ouverte de Papermonk
 - Chris Avellone (Total Video Games)
Logs IRC
 - Warcry (27/01/2006)
 - NWVault / NWC (3 Juin 2006)
 - NWN2News.net (30 Juin 2006)
Faciliter la diffusion et l'installation de vos créations

 
Communauté
  Forums
Channel #nwnights-fr
Guide IRC
Liens
CEP

 
Fichier
  Tileset
Module
Hakpak
Objets
Portraits
Créatures
Scripts
Tutoriaux
Autres
Wallpapers

 
Editeur
  Tutorial Editeur
Cinématiques
Musiques
Textures
Tutoriaux NWScripts
Scripts

 
Le jeu
  Solution
Sorts
Classes
Dons (feat)
Aptitudes (skill)
Bestiaire
Règles 3e Edition
Jouer en multiplayer

 
Hordes of the Underdark
  Informations Générales
Solution [forum]

 
Shadows of Undrentide
  Preview
Informations générales
Classes de Prestige
'Lisez Moi.txt' de la Démo
FAQ
Nouveaux tilesets
Solution [forum]

 
Divers
  Traductions Logs Irc
Guides divers

 
Présentation
  Généralités
Configuration minimale
Serveur Dédié
Traduction FAQ
Historique (nwn et bioware)
Contrats de Bioware (vf)

 
Site
  Copyrights
Webmasters

 
     
 
Dîtes non aux inutiles protections contre la copie dans les jeux (SecuROM, StarForce, etc) !!
HADOPI - Le Net en France : black-out

9. Exercices


Bien, une fois que vous avez vu à peu près comment fonctionne le langage NWScript, on va pouvoir faire des exercices :

1. Cherchez les erreurs :

int a = 0;
int b = 1;
float c, d = 0.0f;

c = a + c;
a = a * b;
a = a / b;
b = b / a;
a = c + d;

2. Quel est le problème dans ce code ?

void main()
{
  int i = 0;

  while ( i == 0 )
    continue;
}

3. Simplifiez :

Soit a, b deux conditions.

if ( ( a || b ) && !( a && b ) )
  if ( a )
    instruction;
  else if ( b )
    instruction;

Soit i, j deux entiers :

i = i + 1;
j = i * 3;

Soit a une condition et i, j deux entiers :

if ( a )
  j = i * 3;
else if ( b )
  j = i * 4;

4. Cherchez les erreurs : ici a est une condition

void Foo()
{
  int i, j, k = 10;

  if ( I = j )
  {
    i = j * k
  }
  else if ( a && i + j == k )
  {
    break;
  }

  i = ( a ) k : i;
}

5. Valeur de VAR_GLOBALE : La fonction Foo est définie comme ci-dessous et doit normalement changer la valeur de la variable globale VAR_GLOBALE. Elle renvoie la valeur de cette même variable.

int VAR_GLOBALE = 1;
int Foo()
{
   return VAR_GLOBALE;

   VAR_GLOBALE += 3;
}

Quelle est la valeur de VAR_GLOBALE ?




La correction est plus bas. Cliquez ici pour y accéder (assurez vous d'avoir bien répondu à toutes les questions... ne trichez pas ! N'essayez même pas!)

































Correction
1. Cherchez les erreurs :
  • c = a + c : c est un nombre décimal, on peut donc lui ajouter une valeur entière.
  • a = a * b : il n'y pas de problème ici.
  • a = a / b : il n'y pas de problème ici.
  • b = b / a : ici, il ne s'agit que de maths, pas de type de variable : vous remarquerez que a vaut 0, et il est impossible de diviser un nombre par 0.
  • a = c + d : a est un entier, on ne peut lui donner une valeur décimale. Dans ce cas, il faudrait se servir de FloatToInt.

2. Quel est le problème dans ce code ? Le problème dans le code est que la boucle ne peut jamais se fermer; il s'agit d'une boucle infinie.

3. Simplifiez :
  • On peut simplifier la condition ainsi :
    if ( a && !b )
    instruction;
    else if ( !a && b )
    instruction;
  • L'opération peut s'écrire ainsi :
    j = (++i) * 3;
  • On peut réécrire l'opération sous deux formes :
    j = ( a ) ? (i * 3): (i * 4);
    // ou :
    j = i;
    j *= ( a ) ? 3 : 4;
4. Cherchez les erreurs
  • "I" n'est pas la même chose que "i". Ici vous auriez du déclarer et définir "I" ou changer I par i.
  • I = j : à supposer que I soit déclarée et définie : l'opération consistant à donner à I la valeur de j est tout le temps vraie sauf en cas d'erreur. Ici, on aurait du utiliser le signe " == ".
  • Il manque un ";" après le " k ".
  • Ce n'est pas une erreur, néanmoins :
    ( a && i + j == k )
    N'hésitez pas à mettre des parenthèses même si elles vous paraissent superflues :
    ( ( a ) && ( ( i + j ) == k ) )
    Imaginez un instant que "a" soit une condition compliquée...
  • Le "break" n'a rien à faire ici. Ce n'est pas une boucle ni un switch.
  • C'est sûrement une des erreurs les plus fréquentes dans l'utilisation des opérateurs ternaires : l'oubli du point d'interrogation " ? " (ou du deux points ":")

5. Valeur de VAR_GLOBALE: Ici, VAR_GLOBALE vaudra toujours " 1 " même après passage par Foo. Pour que VAR_GLOBALE soit changée il aurait fallu mettre le return VAR_GLOBALE après l'instruction " VAR_GLOBALE += 3 ".









Navigation rapide:
 
 
Revenir à la page d'accueil du site Ajouter la Bibliothéque de Neverwinter dans vos favoris Afficher une version imprimable de la page
  NeverList - Liste ...
Lyncya 3 - La Gue ...
Sarmates!
Le dernier des fi ...
Bonne année
Joyeux Noël 2010
The Witcher 2 en ...

Archives
Rechercher
 
 
Le Site



NwN 2 - Support des Modules Solos


Groupes
Archives
 

:: design by ghaxir :: coding by baldurien :: la bibliothèque de neverwinter :: tous droits réservés ::