Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Taille maximale d'un tableau
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Taille maximale d'un tableau

Posté le 08/02/2016 10:05

Hey, quelle est la taille maximale d'un tableau à deux dimensions en C sur calculatrice s'il-vous-plait ?

Merci


Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 09/02/2016 10:38 | #


J'étais justement en train de bosser dessus et je pense possiblement avoir trouvé, après, reste à voir si ça tient dans 255 caractères
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 09/02/2016 22:38 | #


Matt36230 a écrit :
Je ne comprends pas bien, un tableau de char peut aller jusqu'à 255*255 max ?

Oui je veux bien faire une génération procédurale mais je ne sais pas comment stocker en mémoire ce qui à déjà été chargé

Ca serait génial si je savais faire ce que tu me dis

Je te parle d'un tilemap classique.

En gros, tu as une énorme carte divisé en plusieurs petites. Quand tu t'appproche d'une extrémité de la petite carte, tu charge l'autre petite carte correspondant à celle qui est à coté. Du coup, t'as au max 2 cartes de chargées en RAM, le reste attend patiemment dans la mémoire de stockage qu'on l'appelle.

Pas besoin de génération procédurale pour ça. Au passage, tu peux faire un tableau de chars de 10*10*10*10 ou de 1000*10 si ça t'amuse. Le tout c'est d'avoir assez de RAM pour le créer.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 09/02/2016 23:13 | #


C'est en gros ce que j'ai fait mais comment stocker les autre tile justement ?

Sachant que les dites cartes sont générées aléatoirement selon un algorithme très complexe non ? Il est simple ? Ah dommage..
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 09/02/2016 23:49 | #


Les autres tiles ?

Un peu de vocabulaire, qu'on se comprenne :

– Sprite : image (quelconque) du jeu, terme plutôt réservé aux items et personnages
– Tile : sprite (tuile) destinée à l'affichage de la map
– Tileset : un ensemble (set) de tiles correspondant aux sprites de tous les blocs constituant la map
– Tilemap : un tableau contenant les numéros des tuiles à afficher, c'est le "cœur" de la map

Donc ce que je dis, c'est de créer un tilemap par partie de carte, exemple :

// Monde (immense) de 6 * 4
0 0 1 2 3 0
1 2 3 0 5 6
0 1 2 3 4 0
0 2 0 3 6 0

// On le sépare en 4 tilemaps
0 0 1    2 3 0
1 2 3    0 5 6

0 1 2    3 4 0
0 2 0    3 6 0

// On sauvegarde ces 4 tilemaps de manière séparée
tilemap_1 = 0 0 1 1 2 3

tilemap_4 = 3 4 0 3 6 0

// On charge le tilemap où se trouve le joueur
actual_map = tilemap_1

// Si il s'approche trop d'un bord du tilemap, on change de tilemap
if player.x >= 3 actual_map = tilemap_2
if player.y >= 3 actual_map = tilemap_3


Tu peux généraliser cet exemple à des maps de 150 par 150, pour des tilemaps de 30*30, ce qui est déjà largement suffisant
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 10/02/2016 10:00 | #


Ah désolé DS je disais tile pour réutiliser ce que tu as dit mais je n'avais pas pensé qu'il y avait plusieurs significations
tilemaps

Tout ça j'avais compris
C'était surtout pour la compression que je peinais Mais c'est bon

Juste. Y'a-t-il un moyen de créer des tableau de char une dimension via le programme ou est-ce que je vais devoir les initialiser préalablement et donc en avoir un nombre limité ?

En tour cas merci de ton aide DarkStorm
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 10/02/2016 19:31 | #


Pour déclarer un tableau dynamiquement (genre char tab[variable]), il faut passer par l'allocation dynamique :

char *tab = NULL; // on déclare un pointeur sur des chars

tab = malloc(variable * sizeof(char)); // on lui donne de l'espace en mémoire, autant que besoin. Le sizeof(char) sert à rien dans l'absolu, vu que ça fait 1, mais dans le cas où tes variables sont plus complexes (structures, unions, autres)

tab[0] = 2; // on y accède comme d'hab ensuite


free(tab); // et [b]on n'oublie surtout pas[/b] de libérer le pointeur à la fin, sinon on perd de la RAM (ce qui fini par faire planter la calto une fois que y'a plus rien

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 10/02/2016 22:52 | #


Je n'arrive pas trop à voir comment je pourrais en créer une infinité
Lephenixnoir En ligne Administrateur Points: 24232 Défis: 170 Message

Citer : Posté le 14/02/2016 10:57 | #


Matt36230 a écrit :
Je ne comprends pas bien, un tableau de char peut aller jusqu'à 255*255 max ?

Définitivement pas. Un tableau de char peut-être aussi long qu'on le veut, c'est la taille des éléments qui est limitée (de -128 à 127 en signed, 0 à 255 en unsigned pour les char ou -mieux- les uint8_t).

Matt36230 a écrit :
Je n'arrive pas trop à voir comment je pourrais en créer une infinité

L'allocation dynamique c'est demander au système la mémoire dont tu as besoin. Tant qu'il y a de la ram, le système peut te donner de la mémoire. En l'occurrence il y a 48 kio de heap donc dans l'absolu tu peux allouer un tableau de 48 000 char si tu veux.
Je parlerai pas trop d'alloca() mais y'a moyen d'allouer dynamiquement sur la pile si les allocations ont la durée de vie d'une variable locale.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 60 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd