什么是在2D矢量中预定位置更改多个值的最简单方法?

时间:2013-03-12 22:25:18

标签: c++ for-loop vector points 2d-vector

好的,所以我有一个二维矢量的字符,我称之为网格。让我们说它是70 x 30.当网格创建时,它会自动用'x'

填充每个位置

我有一个显示网格的功能。所以我调用这个函数,并在控制台上显示一个70x30的x网格。

我想要调用的另一个函数基本上用不同的char替换网格的某些x,y坐标处的char。这些点并非完全随机/分散。我基本上从网格边缘的一个点开始,并将锯齿形线条绘制到另一个边缘。所有点都是预定的。有很多要点,所以手动做它似乎效率低下。

以下是我的想法:

  • 为循环,宽度和高度创建一个double,将它们称为i和j
  • 如果i =(a || b || c || d ...)&& j =(e || f || g ..)

基本上为每个可能的场景做了那个乏味的过程.. 当然有一个更容易和更简单的方式大声笑。任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

如果可以通过具有地图(如用于关卡编辑器或其他固定模式)来预先确定点,则制作x / y坐标的字典,使其成为平铺的内容。迭代字典并进行每次替换。

如果这些点不是预先确定的,而是遵循一个模式,例如直线或blob,那么编写一个绘制直线/ blob /的方法并反复调用它。该方法决定替换哪些瓷砖并替换它们。

顺便说一下,做这样的2D检查和处理有一个技巧,它被称为'delta',例如xdelta = -1,ydelta = 0是west,xdelta = 1,ydelta = 1是东北。通过使用delta,您可以使用不同的增量运行两次,四次或八次函数,只需使用delta的方向就可以向不同的方向移动,而不需要自己尝试所有八个方向 - 也可以使用delta如果你想要驱动边界检查,因为你不能走向你没有进行的方向。然后你可以进一步列举所有方向,反转方向的函数,将方向转向90/45度(如果枚举它很简单,你只需在枚举中加2或1并返回新方向)等等,现在处理非常简单。

所以我可能会有像

这样的东西

function drawLine(int xstart, int ystart, int xdelta, intydelta)

从xstart,ystart开始,用O替换tile,将xdelta添加到x,将ydelta添加到y,用O替换tile等,直到它从边缘掉落。