Article [Coverage]


Thumb

<< Chapitre précédent

Les variables sont l'un des principaux éléments de la programmation. Lorsque l'on parle de programmation, on fait appel à l'automatisation d'une tâche qui nécessite le plus souvent l'utilisation de variables. Il est certes possible de ne pas les utiliser, mais tous les programmes n'étant pas réalisables de cette façon, notre tutoriel sur le développement de jeux pour PC-Engine les prendra donc en compte.

 

Mais que sont les variables ?

Les variables sont des états qui peuvent être modifiés à tout moment par le programmeur, l'utilisateur ou encore la machine. Ils sont stockés dans les registres du processeur (mémoire la plus rapide, mais très limitée en espace) ou bien dans la mémoire vive (lente par rapport aux registres, mais bien plus conséquente). En C, nous ne nous préoccuperons pas du stockage dans les registres ou dans la mémoire vive, le compilateur réalisera cette tâche à notre place.

 

 

Typage des variables

 

 

Différents types

 

Afin de répondre aux besoins spécifiques du programmeur, les variables peuvent être de plusieurs types :

  • Les types entiers qui contiennent les entiers relatifs (..., -2, -1, 0, 1, 2…)
  • Les types flottants et contenant les réels (par exemple -2,123 pour les signés, et 2,332 pour les signés et non signés)

 

Mais pourquoi avoir créé plusieurs types de variables ?

La mémoire est une denrée précieuse en informatique. Et à plus forte raison sur la PC-Engine qui n'en possède que très peu. Vous vous doutez bien que chacun de ces types n'utilise pas la même place mémoire. Ainsi, plus le type est restrictif, moins il occupe de place pour stocker un même intervalle de nombres : par exemple, il existe plusieurs types entiers afin d'optimiser la gestion de la mémoire.


Octets bits et bytes

 

Qu'est-ce qu'un bit ?

C'est un simple chiffre binaire. Habituellement nous comptons en base décimale, base 10. Cela signifie que chaque chiffre peut prendre 10 valeurs : {0,1,2,3,4,5,6,7,8,9}. En binaire, nous comptons en base 2 et chaque chiffre peut ne prendre que 2 valeurs : 0 ou 1. Un bit est donc un 0 ou un 1.

 

Qu'est-ce qu'un octet ?

Un octet est une succession de 8 bits.

 

Qu'est-ce qu'un byte ?

Le byte n'est pas un bit ! Prononcez bit comme bite et byte comme "baille te". Le mot byte signifie octet en anglais. La confusion est facile alors ne vous y trompez pas. Nous utiliserons le terme d'octet dans ce tutoriel.

 

Types existant en C sur PC-Engine

 

Comme nous le disions plus haut, vous avez la possibilité de spécifier le nombre d'octets sur lesquels seront enregistrées vos variables. Ainsi, il existera plusieurs types entiers non signés vous permettant d'optimiser au maximum la gestion de la mémoire en fonction des valeurs que vous aurez à enregistrer.

Voici une liste des types de variables accessibles sur PC-Engine :

Nom en C
 Type Nombre d'octets
 Valeurs pouvant être stockées
 char entier signé
 1 octet
 -128 à 127
 int entier signé
 2 octets
 -32768 à 32767
 short entier signé 2 octets -32768 à 32767

 

NB : Le type int à une longueur de 2 octets ici. Cependant si vous compilez sur votre ordinateur pour votre ordinateur, il aura certainement une longueur de 4 ou 8 octets. En effet, le type int correspond à la taille d'un mot sur le processeur que l'on utilise donc à la taille nécessaire pour l'adressage des données. Le cas de la PC-Engine est un peu spécial puisque celle-ci embarque un processeur central de 8 bits. En toute logique le int devrait donc être de 1 octet. Mais le processeur graphique de cette console étant de 16 bits, on se retrouve devant un int de 2 octets.

 

 

Déclaration de variables en C

 

Nous avons découvert les différents types de variables. À présent, il s'agit de savoir les déclarer en C. Pour cela rien de plus simple.

 

Vous vous souvenez de notre code C qui affichait un message à l'écran ?

Pour mémoire le voici :

CODE C

 /* Instructions préprocesseur */
#include "huc.h"
/* Fonction principale */
main()
{
      /* Instructions */
      set_color(1,0x777);
      set_font_pal(0);
      set_font_color(1,0);
      load_default_font();
      put_string("Bonjour␣Livegen␣!",0,0);
}



Pour rajouter des variables à ce programme, il faut, entre la déclaration de la fonction (ici main) et les instructions, ajouter les variables du programme précédées de leur type. Par exemple, une variable du nom de variable1 du type entier de longueur de 1 octet sera déclarée ainsi : int variable1;. Voici un exemple du programme précédent avec la déclaration de deux variables :

CODE C

 /* Instructions préprocesseur */
#include "huc.h"
/* Fonction principale */
main()
{
      /* Variables */
      int variable1;
      char  variable2;

      /* Instructions */
      set_color(1,0x777);
      set_font_pal(0);
      set_font_color(1,0);
      load_default_font();
      put_string("Bonjour Livegen !!",0,0);
}

 

Cela nous donne le même résultat :

 

source - http://img1.livegen.fr/00/00/25/81/0000258135.jpg

 

Ce programme procède simplement à la déclaration de deux variables : variable1 de type entier sur 1 octet et variable2 du même type.

Précisons que quelques règles s'imposent pour le choix des noms des variables.

  • Leur nom ne doit pas débuter par un chiffre
  • Leur nom ne doit pas contenir d'espaces
  • Leur nom ne doit pas être un mot-clé C. Pour éviter cela, préférez des noms en français, au moins vous risquez moins ce genre de mésaventure qui de toute façon fera planter la compilation
  • Le nom des variables est sensible à la classe c'est-à-dire que les majuscules et les minuscules sont prises en compte : les variables toto et Toto ne sont pas les mêmes. Évitez toutefois de nommer deux variables avec le même nom en changeant simplement les majuscules. Vous risquerez de vous embrouiller.
  • Sachez qu'en plus, il est important de donner des noms explicites à vos variables. Cela permet la relecture aisée du code par la suite.

Enfin, si vous avez plusieurs variables du même type à déclarer, utilisez la syntaxe suivante :

CODE C

char variable1, variable2, variable3;

 

Et bannissez cette syntaxe :

CODE C

char variable1;
char variable2;
char variable3;

 

En effet, cette seconde optimisation est déconseillée dans la documentation du compilateur pour des raisons d'optimisation.

 

 

Variable globale et variable locale

 

Les variables en plus d'être de plusieurs types peuvent être globales ou locales. La nuance entre ces deux notions est fondamentale d'autant plus lorsque nous étudierons les fonctions.

 

Variables locales

 

Jusqu'à présent, nous n'avons fait qu'utiliser des variables locales. Celles-ci sont déclarées à l'intérieur des fonctions (ici main). Elles ne sont accessibles qu'à l'intérieur de la fonction. Une fois cette dernière terminée, ces variables sont effacées.

Ainsi, pour des données critiques, la documentation du compilateur nous déconseille d'utiliser des variables locales. De plus, il semble qu'elles utilisent des cycles supplémentaires et ralentissent l'exécution du programme lorsqu'elles sont modifiées à partir d'autres fonctions étant stockées dans une pile (nous reviendrons sur ce point plus tard dans ce tutoriel).

 

Variables globales

 

Les variables globales sont déclarées entre les instructions de préprocesseur et la fonction. Elles sont donc accessibles dans toutes les fonctions du programme. Ainsi lorsqu'une fonction se termine, ce type de variable n'est pas écrasé.

 

 

Affichez vos variables

 

Quel est le véritable intérêt des variables ?

C'est de contenir de l'information comme le score, le nombre de vies, la position du personnage, ses caractéristiques... Vous souhaiterez sans doute afficher certaines de ces informations à l'écran. Les programmeurs qui ont créé le compilateur HuC ont pensé à nous en nous fournissant dans leur bibliothèque de base quelques fonctions d'affichage de texte. Nous avions déjà vu quelques autres fonctions dans le chapitre précédent, à présent nous allons réellement les manier.

Sachez que chacune de ces fonctions dispose de deux formes, nous ne verrons pour l'heure que la seconde, certes légèrement plus lente, mais plus facile à utiliser. La rapidité n'est pas notre quête actuelle, nous aurons le temps de l'aborder plus tard.

 

Affichons un nombre

 

Pour afficher un nombre, rien de plus simple : il existe la fonction put_number. Examinons son comportement sur un exemple :

CODE C

#include "huc.h"
main()
{
      int variable1;
      variable1 = 3;
      put_number(variable1,5,0,0);
}

 

La compilation puis l'exécution de ce code nous donnent le résultat suivant :

 

source - http://img1.livegen.fr/00/00/25/81/0000258134.jpg

 

Pour l'utiliser, vous aurez besoin de plusieurs paramètres :

  • Le premier est la variable à afficher (ici variable1)
  • Le second est le nombre de chiffres sur lequel l'affichage s'effectuera
  • Le troisième et le quatrième sont les coordonnées x et y de l'endroit sur l'écran où cela sera affiché.

 

Comment se calculent les coordonnées sur l'écran ?

Elles s'expriment en unité de caractère. Sans spécifier d'option particulière, vous avez 28 lignes de caractères, commençant par la ligne 0 (donc de 0 à 27) et 32 colonnes.

Ainsi, vous pourrez faire prendre à x, le numéro de la ligne, les valeurs de 0 à 27 et à y, le numéro de la colonne, les valeurs de 0 à 31. Faites quelques essais afin de vous familiariser avec la gestion de ces coordonnées. Rien de plus naturel donc dans ce repérage suivant la lecture naturelle d'un texte.

Revenons donc sur le second paramètre : la longueur du chiffre à afficher. Si le chiffre (comme dans notre cas) est plus court que la longueur demandée, des espaces seront rajoutés à sa gauche et les coordonnées choisies correspondront au caractère le plus à gauche. Gardez bien cela en mémoire afin de prendre garde, lorsque vous afficherez des valeurs, à ne pas les faire dépasser sur la droite et donc à en masquer une partie avec un nombre de chiffres affichés trop grand ou des valeurs de lignes et de colonnes mal choisies.

 

Affichons un caractère

 

Nous n'en avons pas parlé jusque-là, mais les caractères sont des nombres ! En effet, chaque caractère est codé par un nombre suivant la table d'ASCII. On les stocke dans des char (table d'ASCII non étendue). Pour connaître la table d'ASCII, si vous êtes sous Linux ou Mac OS, tapez :

CODE BASH

> man ascii

 

source - http://img1.livegen.fr/00/00/25/80/0000258049.jpg

 Table d'ASCII (en octal)

 

Sinon pour Windows, vous pouvez aussi trouver facilement sur Internet la table d'ASCII : http://www.table-ascii.com/

Par exemple, le code suivant :

CODE C
#include "huc.h"
main()
{
      put_char(97,0,0);

 

Vous donnera le résultat suivant :

 

source - http://img1.livegen.fr/00/00/25/81/0000258133.jpg

 

Notre commande put_char prend trois paramètres :

  • Le premier, le caractère ASCII à afficher
  • Les deux suivants, les coordonnées toujours calculées de la même façon

Il est aussi possible de faire prendre à une variable le code ASCII du caractère correspondant en tapant ce caractère entouré d'apostrophes (ou simple quote en anglais...) :

CODE C

#include "huc.h"
main()
{
      char caractere;
      caractere = 'w';
      put_char(caractere,0,0);
}

 

Donne le résultat suivant :

 

source - http://img1.livegen.fr/00/00/25/81/0000258132.jpg

 

Affichons une phrase

 

Nous l'avions vu avec notre "Bonjour Livegen !" la fonction put_string permet d'afficher directement une phrase. Vous la connaissez bien à présent : celle-ci prend trois paramètres :

  • La phrase entre guillemets, nous expliquerons comment l'utiliser avec des variables plus tard
  • Les coordonnées calculées toujours de la même façon

 

Par exemple :

CODE C

#include "huc.h"
main()
{
      put_string("Vive Livegen",0,0);
}

 

Donne le résultat suivant :

 

source - http://img1.livegen.fr/00/00/25/81/0000258136.jpg

 

 

Exercice

 

Nous voilà bien au point avec les variables, l'heure est à présent à l'exercice. Je vous propose donc cette semaine de réaliser ceci :

Votre programme comporte 3 variables : vos deux initiales et votre âge. Il devra afficher ceci :

 

source - http://img1.livegen.fr/00/00/25/81/0000258131.jpg

 

Les variables d'âge et les initiales pourront donc être modifiées par un autre programmeur PC-Engine à qui vous fournirez votre programme. Il y a de très très vieux programmeurs PC-Engine qui ont plus de 127 ans ! Pensez à commenter votre code PENDANT sa réalisation.

Tentez de réaliser ceci. Si vous avez besoin d'aide, le forum est là pour ça !

Topic du Forum


Avatar Abuse

Le dimanche 21 février 2010 - 19h17
Encore un effort.
Avatar Yakamya Abuse
level. 6
Le vendredi 26 février 2010 - 00h07
Défenseur open-source Nintendo Wii Super Mario Galaxy (Succès Collector) Muramasa New Mario Bros Wii
Yakamya c'est avec un Y majuscule c'est a dire 89 en ASCII :emu:
Le délai pour poster un commentaire pour cet article a été dépassé!

Société

NEC


Thumb
Co-fabriquant et éditeur avec Hudson Soft de la PC-Engine/TurboGrafx, dans les années 80/début 90.