【发布时间】:2022-01-02 08:50:32
【问题描述】:
我不完全确定如何表达这个问题,抱歉标题没有帮助。
我有一个大数组(5 列,50 行),我用它来绘制 ascii 文本中的关卡环境(数组中的每个条目都是一个字符,它们都被打印出来以制作图像) 即:
char worldarr[5][9] =
{
{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'}, //the length of these entries are actually
{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'}, //50 but I shortened them for the post
{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
{'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X'},
}
输出在哪里:
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
现在我正在尝试建立一个坐标系,其中 (0,0) 是左下角,目标是能够放入一个坐标并将该位置替换为我原来的“@”假设我可以使用这个:
int x = 0, y = 0;
worldarr[y][x] = '@';
但是这个输出:
@XXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
不是:
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
XXXXXXXXX
@XXXXXXXX
如何创建一个新系统来强制 (0,0) 位于数组的底部,或者更好的是,位于数组的确切中心(如果可能的话)。
再次为糟糕的简洁感到抱歉,我不确定我在使用什么。
【问题讨论】:
-
可能是问题中的拼写错误,但
px!=x。如果是代码中的拼写错误,那就是你的问题。 -
要做我认为你要求的事情,我会编写一个转换外部维度的函数。像
int real_y(int y) { return MAX_Y - y - 1; };这样的东西更进一步,我会将数组移动到一个类中,该类将翻译隐藏在访问器函数后面,这样用户就永远不会搞砸并忘记使用翻译函数。 -
您需要自己编写一个小函数 aXY(x,y) 来转换(反转)Y 坐标并交换 x 和 y。或者,更好的是,定义一个模板 XYarray
并使其成为一个方法。 -
为什么不创建一个具有更改原点的成员函数的二维数组类。无论如何,原始的 C 样式数组都很痛苦。
-
@user4581301,这正是我所需要的,谢谢!