为游戏生成矢量网格

时间:2012-10-16 16:56:21

标签: c++

我正在开发一个c ++项目而且我被卡住了。我试图从一个向量生成一个网格,该向量包含网格中的元素。最初,矢量将保持类似(3,3)的东西,我只是创建一个看起来像这个XXX的网格。如果是(3,2,1),那将是XX | X.括号中的第一个数字表示我的网格中的X的总数(即使在删除了X之后),结果数字表示每列的X数,如上所示。

我遇到的问题是创建一个网格,同时跟踪已移除的X,因此当我想重新创建它时,移除的X的空间就在那里而不会被覆盖。

例如:初始网格 = XXX | XX =>(5,3,2)                后期网格 = OOX | XX => (3,1,2)

从“初始网格”生成网格很简单,但生成以后的网格很难(对我而言)。例如,我的新向量将保留(3,1,2)“后面的网格”。如果我想使用(3,1,2)表示生成“后期网格”,我该怎么做。任何帮助是极大的赞赏。

这不是一个家庭作业,这是我正在研究的一个副项目。

2 个答案:

答案 0 :(得分:0)

听起来你正在处理持久性问题。我可能不完全明白你想要做什么,但听起来你会以(x:int, y:int, z:int)的形式阅读一系列元组。

x = total number of 'X' 
y = 'X' before vertical bar
z = 'X' after vertical bar 

然后你想用“O”填充缺少'X'。

看起来问题是你丢失了有关网格初始状态的信息,因此不知道要填充多少“O”。

如果我是你,我会添加另一个值来跟踪初始状态。该值永远不会改变,并且在首次生成网格时将使用初始数量“X”填充。

所以在你的例子中你有:

初始网格 = XXX | XX =>(5,3,2)后期网格 = OOX | XX => (3,1,2)

而是尝试将初始状态值添加到元组中,如此

初始网格 = XXX | XX =>(5,3,2, 5 后期网格 = OOX | XX =&gt ; (3,1,2,的 5

现在你有一个(x:int, y:int, z:int, n:int)形式的元组

x = total number of 'X' 
y = 'X' before vertical bar
z = 'X' after vertical bar 
n = 'X' in initial state

现在我们可以通过评估来确定要填充的“O”数量

n - x = number of 'O' to pad with 

假设'X'的初始数量从元组变为元组,您还需要跟踪初始的'X'状态。跟踪“X”的初始数量将允许您始终识别每次连续迭代网格需要填充多少“O”

答案 1 :(得分:0)

二维数组不足以满足您的程序吗?假设您声明了最大地图大小的二维数组,然后使用两个自变量来表示之后的最大网格大小?

char Map[15][15] = {//...}
int Width = 15;
int Height = 15;

//Map decreases in size...
Width--;
Height--;
//all calculations are now based off of width and height(not the initial size of the array)

if(xpos < Width)
//do stuff