创建网格 - 这是一种有效的方法

时间:2011-01-16 19:01:37

标签: c# matrix grid

我前几天看完新的Tron电影后,正在制作一个基于文本的小游戏。 (正如你在手上花了很多时间做一个极客的那样)。

我已经创建了一个Grid,其中可以放置对象,目前我发现我的网格创建需要很长时间。

我对你如何表达这种以及任何对这类事物有用的设计模式,想法,概念等感兴趣。

目前我有4个组成网格的主要“部分”。

首先我有网格本身,其中包含'rows'数组

public interface IGrid
{
    GridRow[] Rows { get; set; }
}

GridRow依次拥有一个GridCell数组,每个数组都包含一个IEntity数组(每个可以放在网格单元格中的对象都必须实现IEntity。

public class GridRow
{
    public int Index { get; set; }
    public GridCell[] Cells { get; set; }
}

public class GridCell
{
    public int Index { get; set; }
    public IEntity[] Entities { get; set; }
}

在创建网格时需要很长时间。目前,200 * 200'网格'需要大约17秒的时间来构建。

我非常确定必须有一种更有效的方法来存储这些数据或使用当前概念创建网格。

欢迎任何和所有建议。

更新

以下是我目前撰写网格的方式:

public IGrid Create(int rows, int cols, int concurentEntitiesPerCell)
        {
            var grid = new Grid();
            Rows = new GridRow[rows];

            grid.Rows = Rows;

            var masterCells = new GridCell[cols];

            var masterRow = new GridRow();
            var masterCell = new GridCell();

            for (var i = 0; i < masterCells.Count(); i++)
            {
                masterCells[i] = new GridCell();
                masterCells[i].Index = i;
                masterCells[i].Entities = new IEntity[concurentEntitiesPerCell];
            }

            masterRow.Cells = masterCells;

            for (var j = 0; j < rows; j++)
            {
                grid.Rows[j] = new GridRow();
            }
            return grid;
        }

1 个答案:

答案 0 :(得分:3)

您似乎无缘无故地创建了很多对象?为什么不使用List<List<IEntity>>或多维数组实体[,]?

在任何情况下,我所显示的代码都没有说明减速的原因。你可以在实际分配对象的地方发布代码吗?