AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
-20%
Le deal à ne pas rater :
Pack Gigabyte Ecran PC Gamer 27″ LED M27Q (rev2.0) + Radeon RX 6950 ...
749 € 939 €
Voir le deal

 

 remplir un array à partir d'un fichier

Aller en bas 
3 participants
AuteurMessage
Sasarai
Nouveau



Messages : 2

remplir un array à partir d'un fichier Empty
MessageSujet: remplir un array à partir d'un fichier   remplir un array à partir d'un fichier EmptyMar 24 Juil 2012 - 10:10

Tout d'abord bonjour a tous, happy1
Je programme depuis quelque temps déjà dans plusieurs langage, php, c/c++ et je reviens aujourd'hui vers le langage qui m'a donné cette envie, soit le GML.
Aujourd'hui, je viens pour vous présentez un problèmes, voulant créer un petit système de chargement de map, je me suis dits que pour le faire le plus efficace possible, il fallait que je le fasse a partir d'un .txt.
L'idée étant d'écrire dans le .txt une ligne qui correspondrais a la map, de la forme :

Code:
0001111335555533334449999333

Chaque chiffres correspond a une tile dans un tileset.

Je me suis donc lancé dans l'ouverture de fichier texte avec le GML, j'y arrive sans problème, obtenant dans un test d'affichage la chaine de caractère qui est dans le .txt.

Le problème viens après, je crées deux variable, i et j qui indique chacun les coordonnées sur la carte. i étant la position sur la largeur, j la position sur la hauteur, l'idée étant de mettre dans un array a deux dimension la valeur de la tile a afficher pour chaque pair de coordonnée [i][j].

Code:

    nombreCaseLarge = 10;
    nombreCaseHaut = 10;
    map1 = file_text_open_read("map1.txt");
    text = file_text_read_string(map1);

 for (j = 0; j < nombreCaseHaut; j += 1)
    {
        for (i = 0; i < nombreCaseLarge; i += 1)
        {
        ....
        }
    }

Le soucis viens dans les deux boucle, je me trouve incapable en GML d'isoler un caractère dans une chaine pour le placer dans un array et donc de construire celui ci.
J'ai évidement chercher sur internet des pistes pour régler ce problème, j'en ais trouvé du coté des chaine de caractère mais je ne trouve toujours pas de solution, étant donné qu'il faut aussi que la position de ce caractère évolue avec les valeur de i et j.

Pouvez vous m'aidez à résoudre ce problème ?
Merci d'avance, clinoeuil
Sasarai

Revenir en haut Aller en bas
-Coco-
Utilisateur confirmé: Rang ***
-Coco-


Messages : 545
Localisation : Grenoble - Montpellier
Projet Actuel : Orion VII - 0%

remplir un array à partir d'un fichier Empty
MessageSujet: Re: remplir un array à partir d'un fichier   remplir un array à partir d'un fichier EmptyMar 24 Juil 2012 - 11:38

En parcourant la chaîne de caractères de manière indépendante de i et j ça devrait marcher :

Code:
  nombreCaseLarge = 10;
    nombreCaseHaut = 10;
    map1 = file_text_open_read("map1.txt");
    text = file_text_read_string(map1);
   
    varString = 0;

 for (j = 0; j < nombreCaseHaut; j += 1)
    {
        for (i = 0; i < nombreCaseLarge; i += 1)
        {
            array[i][j] = real(text[varString]);
            varString += 1;
        }
    }

/!\ Ce code n'est pas vérifié et je ne suis sûr de rien ! /!\
Ça fait très longtemps que je n'ai pas touché à Game Maker...
Déjà je sais pas si c'est comme ça qu'on accède à une array, et je ne sais pas non plus si la fonction pour transformer une string en nombre est bien real(), mais enfin voici en gros le template et tu peux arranger toi même après, c'est juste pour donner l'idée.

_________________
Oh, snap.
Revenir en haut Aller en bas
Bako'
Nouveau



Messages : 5

remplir un array à partir d'un fichier Empty
MessageSujet: Re: remplir un array à partir d'un fichier   remplir un array à partir d'un fichier EmptyMar 24 Juil 2012 - 11:47

Salut,

Si j'ai bien compris tu ne sais pas comment séparer le contenu de ton fichier pour le répartir dans un tableau ?

Vu que le contenu est sous la forme : 0001111335555533334449999333, tu auras beaucoup de mal à savoir comment le répartir dans un tableau sauf si l'id ne dépasse jamais un caractère mais ce serait beaucoup se limiter quand même. Il faut que donc que tu mettes des repères dans cette chaîne pour pouvoir la séparer comme il faut selon les ids de tiles.

Entre chaque id de tile, mets une virgule par exemple. Grâce à ça, tu pourras ensuite récupérer facilement chaque id dans l'ordre en utilisant une fonction dans le style split ou explode comme tu connais php.
En GML, voici une fonction pour ça ici : http://gmc.yoyogames.com/index.php?showtopic=358444

Ca te donnera donc un tableau contenant chacun de tes ids.

Bien sur, ça ne fait pas encore exactement ce que tu voudrais puisqu'il faut gérer les coordonnées x et y. Dans ton cas, c'est i et j.
On part du principe que I représente une ligne et J une colonne.

Donc pour représenter ça dans notre fichier, il faut insérer un autre repère. On garde les virgules pour définir chaque id sur une ligne et pour dire qu'on change de ligne on met par exemple le point virgule ; ou autre chose.

On a donc pour une map de 3x3, quelque chose comme ça : 0,0,0;0,0,0;0,0,0 ou encore une map de 2x4 (2lignes, 4colonnes) : 0,0,0,0;0,0,0,0

Ensuite y'a plus qu'à extraire tout ça en utilisant la fonction explode. D'abord sur le repère ; qui retournera donc un tableau où chaque index contiendra le contenu de chacune de tes lignes, puis ensuite, pour chaque valeur de ce tableau,on explode sur la virgule pour obtenir chaque id d'une ligne.

Bon je ne connais pas encore bien GML donc je donne ce que je ferai dans un autre langage. Mais normalement, avec ça, ça devrait pouvoir te guider pas mal pour pouvoir le répartir facilement dans ton tableau [i][j]. Sauf si c'était pas du tout ça ta question et que je suis totalement à côté de la plaque xD Dans ce cas, bah autant pour moi ^^.

Revenir en haut Aller en bas
Sasarai
Nouveau



Messages : 2

remplir un array à partir d'un fichier Empty
MessageSujet: Re: remplir un array à partir d'un fichier   remplir un array à partir d'un fichier EmptyMar 24 Juil 2012 - 19:20

Tout d'abord, merci à vous deux,
La communauté est toujours aussi rapide à répondre, sa fais plaisir.

@-coco- : Merci de ton aide, elle m'as permis de me concerté dans la possibilité qu'il existait quelque chose de simple à réaliser pour faire ce que je voulais Wink
@Bako' : Ta solution pouvais surement marché mais aurais était assez longue à mettre en place, j'ai donc trouver une autre solution plus rapide et qui à l'air tout aussi efficace.

Je laisse cette solution ici des fois que sa puisse aider quelqu'un par hasard, la voici.
Code:

{
    /* On paramétre la hauteur de la carte, ici elle feras 10, 10. (le array feras seras donc un tableau à deux dimmension, array[10, 10]*/
    nombreCaseLarge = 10;
    nombreCaseHaut = 10;
    /* On ouvre le fichier map1.txt ou la map est décrite a l'aide de chiffre map1 ici seras l'id du ficher ouvert et text1 seras le contenu de la premiere ligne de celui ci. */
    map1 = file_text_open_read("map1.txt");
    text1 = file_text_read_string(map1);
    /* On crée une boucle, cela permet de changer les coordonnées dans l'array pour chaque chiffre enregistré dans celui ci */
    for(i = 0 ; i < nombreCaseHaut ; i += 1)
    {
        for (j = 0 ; j < nombreCaseLarge ; j += 1)
        {
            /* On lit le chiffre de text1 a la position donné par l'argument2, le calcul permet de savoir quelle et la position du chiffre dans le fichier en fonction de l'avencement de la création de l'array */
            mapFinal[i, j] = string_char_at(text1, (nombreCaseLarge * i) + j);
        }
    }
}

Arf je vois pas comment gérer les commentaire dans le code affiché sur le forum sa fais tout pas beau gha
Revenir en haut Aller en bas
Contenu sponsorisé





remplir un array à partir d'un fichier Empty
MessageSujet: Re: remplir un array à partir d'un fichier   remplir un array à partir d'un fichier Empty

Revenir en haut Aller en bas
 
remplir un array à partir d'un fichier
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: