Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 Tableaux dynamiques : des piles et des files

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2549

Date d'inscription : 01/08/2006


MessageSujet: Tableaux dynamiques : des piles et des files   Ven 7 Juin 2013 - 7:56

J'ai souvent eu besoin d'utiliser des tableaux dynamiques dans AGS. Seulement, les tableaux dynamiques que propose AGS ne sont pas assez "dynamiques" pour l'utilisation que j'en fais.
En effet, on peut créer un tableau d'une taille arbitraire avec AGS, mais une fois que ce tableau est créé, il n'y a aucune façon native d'agrandir ou de diminuer ce tableau sans l'effacer du même coup. En termes plus techniques, les tableaux dynamiques dans AGS ne sont ni des files, ni des piles.

Après plusieurs "reformulations", j'en suis arrivé à une petite fonction plutôt efficace pour agrandir les tableaux de façon vraiment dynamique :
Code:
/// Cette fonction retournera une copie du tableau auquel on aura ajouté VALEUR
int[] TableauAjouteInt(int tableau[], int taille, int valeur) {
  if (taille < 0) taille = 0;
  int tmp[] = new int[taille+1];
  int i = 0;
  while (i < taille) {
    tmp[i] = tableau[i];
    i++;
  }
  tmp[i] = valeur;
  return tmp;
}
Ensuite, il vous suffit d'agrandir un tableau de la façon suivante :
Code:
int taille = 2; // TAILLE sera la taille du tableau dynamique
int tableau[] = new int[taille]; // Création d'un tableau
tableau[0] = 10; // Assignation de valeurs arbitraires
tableau[1] = 20; // aux 2 premières cases
tableau = TableauAjouteInt(tableau, taille, 30); // Ajout de 30 à la fin du tableau
taille++; // On vient d'ajouter une valeur : on incrémente TAILLE
Display("> %d", tableau[2]); // Affichera "> 30"
Maintenant, vous pouvez aussi coder des fonctions pour traiter ces tableaux comme des piles ou des files :
Code:
/// Cette fonction retournera une copie du tableau dont on aura supprimé la dernière (si PILE vaut true) ou la première (si PILE vaut false) valeur
int[] TableauPopInt(tableau[], taille, bool pile) {
  if (taille <= 1) return null;
  int tmp[] = new int[taille-1];
  if (pile) {
    int i = 0;
    while (i < taille-1) {
      tmp[i] = tableau[i];
      i++;
    }
    return tableau;
  }
  else {
    int i = 1;
    while (i < taille) {
      tmp[i-1] = tableau[i];
      i++;
    }
    return tableau;
  }
}
Ensuite, vous utilisez ça comme ça :
Code:
//    Pile
int taille_pile = 2; // TAILLE_PILE sera la taille de la pile
int pile[] = new int[taille_pile]; // Création d'une pile
pile[0] = 10; // Assignation de valeurs arbitraires
pile[1] = 20; // aux 2 premières cases
Display("> %d", pile[taille_pile-1]); // Affiche "> 20"
pile = TableauPopInt(pile, taille_pile, true); // Supprime le dernier élément de la pile
taille--; // Réduction de la taille de 1
Display("> %d", pile[taille_pile-1]); // Affiche "> 10"

//    File
int taille_file = 2; // TAILLE_FILE sera la taille de la file
int file[] = new int[taille_file]; // Création d'une pile
file[0] = 10; // Assignation de valeurs arbitraires
file[1] = 20; // aux 2 premières cases
Display("> %d", file[0]); // Affiche "> 10"
pile = TableauPopInt(pile, taille, false); // Supprime le premier élément de la pile
taille--; // Réduction de la taille de 1
Display("> %d", file[0]); // Affiche "> 20"

Un exemple d'utilisation :
Code:
int taille_file;
int[] file;

function on_key_press(int touche) {
  // Chaque fois que le joueur appuie sur une touche autre que Retour, on ajoute son code à la file
  if (touche != eKeyReturn) {
    file = TableauAjouteInt(file, taille_file, touche);
    taille_file++;
  }
  // Si le joueur appuie sur Retour, on affiche dans l'ordre les touches sur lesquelles il a appuyées
  else {
    while (taille_file > 0) {
      Display("Touche %d", file[0]);
      file = TableauPopInt(file, taille_file, false); // FALSE : on traite bien file comme une file
      taille_file--;
    }
    // La file est maintenant vide
  }
}

_________________
Ga is Ga
Vous pouvez consulter l'aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit !


Dernière édition par Kitai le Mer 14 Sep 2016 - 16:18, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Billbis
Disciple de la Grande Tasse Bleue
Disciple de la Grande Tasse Bleue
avatar

Nombre de messages : 1275

Date d'inscription : 10/05/2012


MessageSujet: Re: Tableaux dynamiques : des piles et des files   Ven 7 Juin 2013 - 18:26

Pratique, les tableaux dynamiques ! Et les piles m'ouvrent des perspectives fascinantes...
Merci pour l'astuce.

_________________
Mon petit DevBlog
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://nothingaboutthedog.blogspot.fr/
 
Tableaux dynamiques : des piles et des files
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Program Files\Monte Cristo\Cities XL\Paks introuvable
» Mini graveur à piles
» Tableaux de munitions de fusarb
» TEST 3doTHE LOST FILES OF SHERLOCK HOLMES (par grand barbare)
» X-Files, le jeu d'aventure (5%)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Trucs & Astuces, Tutoriaux-
Sauter vers: