【问题标题】:reversing coordinates in an array variable C++反转数组变量C ++中的坐标
【发布时间】: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,这正是我所需要的,谢谢!

标签: c++ arrays variables


【解决方案1】:

您可以将数组包装在一个类中,而不是尝试完全重新映射您的数组。

类似:

class World {
private:
    static const size_t COLS = 5;
    static const size_t ROWS = 9;
    char worldarr[COLS][ROWS] = 
    {
        {'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'},
    };
public:
    char* operator[](int indx) {
        return worldarr[COLS - (indx + 1)];
    }
};

然后你可以像这样使用它:

World w;
w[0][0] = '@';

在此处查看实时示例:https://ideone.com/f6xgBb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多