0

好的,所以我有一个 2d 的字符向量,我称之为网格。让我们说它的 70 x 30。创建网格时,它会自动用“x”填充每个位置

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

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

以下是我的想法:

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

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

4

1 回答 1

0

如果这些点可以通过地图预先确定(如在关卡编辑器或其他固定模式中),则制作一个 x/y 坐标字典来表示图块的位置。遍历字典并进行每次替换。

如果这些点不是预先确定的,而是遵循一种模式,例如线条或斑点,那么编写一个方法来绘制线条/斑点/任何东西并一遍又一遍地调用它。该方法决定替换哪些瓦片并替换那些瓦片。

顺便说一句,在进行这样的 2D 检查和处理时有一个技巧,称为“delta”,例如 xdelta=-1, ydelta=0 是西,xdelta=1, ydelta=1 是东北。通过使用 delta,您可以使用不同的 delta 运行一个函数两次、四次或八次,并且只需使用 delta 的方向,它就会在不同的方向上移动,而无需自己尝试所有八个方向 - 也可以使用 delta如果需要,可以进行边界检查,因为例如,您不能在没有前进的方向上越界。然后你可以更进一步,枚举所有方向,反转方向的函数,将方向旋转 90/45 度(如果枚举它非常简单,你只需在枚举中添加 2 或 1 并返回新方向) , ETC,

所以我可能有类似的东西

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

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

于 2013-03-12T22:31:02.230 回答