2010-07-08 6 views
0

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?

+0

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

+0

La carte peut être plusieurs milliers de tuiles grandes dans chaque direction. Nous estimons une taille de 10000x7500 tuiles. – dbemerlin

+0

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

Répondre

3

Pas vraiment. Cela semble être une façon raisonnable et simple de le faire. La raison pour laquelle .NET ne fournit pas de méthode intégrée est que, contrairement à un tableau 1D, il existe différentes façons de copier/combiner des tableaux multidimensionnels.

Vous n'allez pas vraiment aller plus vite, et je pense que c'est parfaitement maintenable. On dirait que le code est assez fixe de toute façon.

Questions connexes