Je travaille sur un jeu client-serveur avec une carte de base. Si l'utilisateur modifie la section visible de la carte (c'est-à-dire défile dans n'importe quelle direction), j'interroge le serveur pour obtenir des informations sur la nouvelle section donnant X, Y, Largeur et Hauteur.C#: Copier la section de 2D-Array
L'info Carte est stockée sous forme de tableau 2D
MapTile[,]
(MapTile est un simple struct)
Lorsque le client demande une nouvelle section que je veux lire la section du tableau de tuiles de carte, pour que je défini une méthode
public MapTile[,] GetMapSection(Rectangle area)
{
[... snip validation ...]
MapTile[,] result = new MapTile[area.Width, area.Height];
for (Int32 y = 0; y < area.Height; ++y)
{
for (Int32 x = 0; x < area.Width; ++x)
{
result[x, y] = this.map[x + area.X, y + area.Y];
}
}
return result;
}
y at-il un moyen plus facile (=> plus facile à lire, à comprendre et à entretenir, pas nécessairement plus rapide) façon d'obtenir la section du tableau?
Pourquoi ne pas vous laissez le jeu charger la carte entière quand on commence le jeu? Je ne vois pas l'affort en interrogeant un petit rect plusieurs fois. Vous avez beaucoup de mémoire là-bas. ;-) Pour votre question: Vous pouvez organiser votre tableau dans un tableau 1D, puis simplement copier la partie dont vous avez besoin. 1Darray [X + Y * Dimension] = 2DArray [X] [Y]. – InsertNickHere
La carte peut être plusieurs milliers de tuiles grandes dans chaque direction. Nous estimons une taille de 10000x7500 tuiles. – dbemerlin
Transformer le tableau 2D en un tableau 1D serait bien sûr possible mais pas très maintenable avec beaucoup d'appels comme this.map [GetIndex (map, x, y)] ou this.map [x + (y * dimension)] . Pas très agréable à lire. – dbemerlin