我最近在观看了新的《创:战纪》电影后制作一款基于文本的小游戏。(当你手头有太多时间,你就会这样做,因为你是个极客)。
我创建了一个网格,在其中可以放置物体,但目前发现网格的创建需要很长时间。
我对如何实现这个网格以及实用于这种类型的任何设计模式、想法、概念等感兴趣。
目前,我有四个主要的“部分”组成网格。
首先,我有网格本身,它包含一个“行”的数组。
我创建了一个网格,在其中可以放置物体,但目前发现网格的创建需要很长时间。
我对如何实现这个网格以及实用于这种类型的任何设计模式、想法、概念等感兴趣。
目前,我有四个主要的“部分”组成网格。
首先,我有网格本身,它包含一个“行”的数组。
public interface IGrid
{
GridRow[] Rows { get; set; }
}
GridRow
持有 GridCell
数组,每个 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;
}