Tableaux à 2 dimensions

molgow

Membre expert
Club iGen
4 Janvier 2002
5 496
613
42
Suisse
Je developpe pour le plaisir un démineur en Cocoa, et j'ai besoin d'avoir un tableau à 2 dimensions pour stocker l'etat de toutes mes cases. J'aimerai utiliser les APIs Cocoa, et en particulier la classe NSArray, mais malheureusement il me semble qu'elle ne gère que des tableaux à 1 dimension.

Que me conseillez vous donc de faire pour avoir un tableau à 2 dimensions (les éléments sont une classe que j'ai créée) ?
- Faire un NSArray de NSArray ? (si oui, comment ? j'ai pas trop bien compris le fonctionnement de NSArray, je trouve cette classe assez "étrange")
- Relire plus attentivement les specs de NSArray car c'est possible de faire des tableaux multidimensionels facilement, et je me suis donc trompé ?
smile.gif

- Utiliser un tableau en C (...montableau[][]...) ? Non! cette solution ne m'intéresse pas.

Merci pour vos conseils,

molgow
 
Je te signale que tu peux avoir un NSArray d'elements qui sont des NSArray. Donc un tableau à 2 dimensions.
C'est interressant car tu peux avoir deux vues. Un NSArray de colonnes et un NSArray de lignes.
Tu as aussi la classe NSMatrix.
Je crois d'ailleurs que NSMAtrix est mieux pour toi. Tu as un exemple qui convient dans ton cas dans le livre cocoa de O'Reilly pour le développement de la ToDoList.
D'ailleurs iPhoto utilise excellement cette classe pour visualiser les photos d'une pellicule.
 
Merci pour tes infos, mais je ne crois pas que je vais utiliser NSMatrix, cette classe est une classe de type View (c'est une sous-classe de NSView d'ailleurs). Mon but est de réaliser mon programme en appliquant le plus juste possible le paradigme Model-View-Controller, et dans cette optique là, le stockage de l'etat des cases de mon jeu devrait appartenir à la partie Model.

A part ça, les tableaux à 2 dimensions étant très souvent utilisé en programmation, je trouve qu'Apple pourrait fournir une sous-classe de NSArray à 2 dimensions pour faciliter encore plus la tache des developpeurs.
 
Justement, NSMatrix correspont très bien à ce que tu veux faire. En effet n'oublie pas que c'est une classe
interresante qui te permet de controller en usne seule fois un ensemble d'éléments.
En fait dans ton schéma MVC, le model c'est un item de ta matrice. Tu peux aisément définir une classe item représentant un élément avec une variable état
et une ou des méthodes pour administrer cet état. Ta NSMatrix regroupera ces items. N'oublie pas que les notations du style A(i,j) s'applique également pour désigner un élément d'une NSMatrix.
En plus tu travaille sur des éléments de type Frame dans lesquels tu peux ranger des images. cela permet entre autre de modifier l'aapparence d'une cellule de ta matrice.
Franchement jette bien un coup doeil sur cette classe et comme je l'ai souligné, regarder l'exemple ToDoList dans le bouquin Cocoa de chez O'Reilly fait par les gars d'Apple.

Précisions sur l'application du concept MVC dans ton cas.

Les items 'éléments de ton tableau) forment la partie Model.
La NSMatrix est une View
Ton Controller fera le lien entre tes objets Model et ta NSMatrix. La seule éxigence de ta NSMatrix c'est qu'elle est constituée de cellules identiques dans lequelles tu 'taggeras' tes objets Model.
En outre tu profite de la multitude des méthodes de la classe de NSMAtrix pour manipuler aisément des items et reporter les modifs dans le Model. que tupeux sauvegarder puis les retrouver dans cetétat
au prochain lancement du jeu.