█▄▀ Création d'un menu avec inventaire
 
   Fonctions et variables à connaître
o draw_sprite(n,img,x,y)
    Dessine la sous image img (-1 = en cours) du sprite
    d'index n dont l'origine est à la position x,y.

o Instruction Repeat
    L'instruction repeat a la forme suivante : repeat ( <expression> ) <instruction>
    L'instruction est répétée autant de fois qu'indiquée par la valeur arrondie de
    l'expression.

o Tableaux
Vous pouvez utiliser des tableaux à 1 ou 2 dimensions dans GML. Mettez l'index entre crochets. Pour les tableaux bidimensionnels, séparez les 2 index par une virgule. Quand vous utilisez pour la 1ère fois un tableau, celui-ci est créé. Chaque index commence à 0. Faites attention en utilisant des index trop grand, cela exige beaucoup de mémoire. N'utilisez jamais d'index négatifs. Chaque index est limité à 32.000 éléments et à 1.000.000 pour la taille totale.
 
Alors nous allons étudier un système permettant d'afficher un menu avec inventaire.

Etudions le fonctionnement général d'un menu. Un menu c'est une image de fond, des objets et un curseur. Donc le truc c'est de créer un objet qui détecte les touches appuyées, et ainsi on calcule la position du curseur puis on dessine sur l'écran le menu, puis les objets puis le curseur.
Alors comment allons-nous déplacer et calculer la position du curseur selon les touches appuyées ?
La réponse est dans l'inventaire de zelda alttp.
Ici, nous voyons que l'inventaire forme un tableau. Donc nous allons utiliser une sorte de tableau pour déplacer notre curseur.
Le truc c'est d'utiliser les numéros de colonne et de ligne. Voyons un exemple.
Dans cet exemple, nous avons un curseur en (4;2). Comment mathématiquement peut-on déplacé le curseur en (3;3).
La réponse : il faut retirer 1 à la valeur de la colonne et ajouter 1 à la valeur de rangée.
(4-1;2+1) --> (3;3)
Ainsi pour aller dans la colonne de droite il faut ajouter 1 à la valeur colonne, pour aller dans la colonne de gauche il faut retirer 1 à la valeur colonne. Pour aller dans la rangée en bas, il faut ajouter 1 et pour aller dans la rangée en haut il faut retirer 1.
Nous connaissons la position du curseur dans le tableau or l'écran de jeu n'est pas composé d'un tableau mais de pixels. Donc nous allons calculer les différentes emplacements des cases sur l'écran.

Pour cela il faut utiliser une boucle repeat et des tableaux à 1 dimension. (un tableau pour chaque composantes)
// on initialise le x de départ
a = 70;

// on détermine avec j le nombre de répétition de la boucle
// on répète la boucle autant de fois qu'il y a de colonnes
repeat(nb_colonne)
{
   x[j] = a;
   
   // on incrémente par l'espacement qu'on veut entre les colonnes, ici 50
   a += 50;
}
Pour 5 colonnes, le code ci-dessus renvoie les valeurs de x :
x[1] = 70;
x[2] = 120;
x[3] = 170;
x[4] = 220;
x[5] = 270;

Ainsi pour connaître l'emplacement d'une colonne il suffit d'apeller la varible x[colonne]. Ainsi lorsqu'on connaît la place du curseur dans le tableau, on peut calculer sa position sur l'écran.

Exemple: le curseur se trouve la position que l'exemple du début, (4;2) donc pour afficher le curseur durant l'event draw, on écrit :
draw_sprite(target_inventory, 0, x[colonne], y[rangee])
Vous avez remarqué le y[rangee], et bien il faut faire la même chose avec les rangée, il faut d'abord calculer les valeurs de y avec les arrays et la boucle for. A vous de le faire tout seul ! Si vous avez compris il n'y aura aucun problème.
Pour les objets vous créer déclarer leur emplacement au départ, et vous règlez votre script draw pour qu'ils apparaissent au bon endroit.

Exemple :
/* Toutes ces instructions sont exécutés dans un même objet que vous
pouvez appeller menu_object mais dans des event différents qui
est indiqué au début de chaque paragraphes. */


// ev_draw event draw
draw_sprite(arc_spr,0,x[1],y[1]);
draw_sprite(boomerang_spr,0,x[2],y[1]);
draw_sprite(bombes_spr,0,x[2],y[1]);
draw_sprite(grappin_spr,0,x[2],y[2]);

// ev_create initialisation
objet[1,1] = "arc"; //ça c'est un tableau à 2 dimensions
objet[1,2] = "boomerang";
objet[2,1] = "bombes";
objet[2,2] = "grappin";

// intéraction avec les touches
// si on appuie sur y ...
if (keyboard_check(global.y))

//... alors on assigne au bouton y l'objet qui se trouve dans
// la colonne et la ligne correspondantes
global.item_bouton_y = objet[colonne,rangee];

/* donc si le curseur se trouve sur la colonne 2 rangée 1 cette objet sera les bombes. */
Le plan des actions de l'objet menu

Bien sûr tout ces exemple n'ont que valeur de théorie, n'allez pas tout recopier au charactère près pour voir si ça marche sans réfléchir. Ce tutorial ne vous présente que les idées pour arriver à faire votre menu. C'est à vous créer les scripts qui contrôleront votre menu.