反转数组变量 C++ 中的坐标
reversing coordinates in an array variable C++
我不太确定如何表达这个问题,对于没有帮助的标题感到抱歉。
我有一个大数组(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) 位于底部,或者更好的是,位于阵列的确切中心(如果可能)。
再次抱歉,简洁得可怕,我不确定我在做什么。
与其尝试完全重新映射数组,不如将数组包装在 class.
中
类似于:
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
我不太确定如何表达这个问题,对于没有帮助的标题感到抱歉。
我有一个大数组(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) 位于底部,或者更好的是,位于阵列的确切中心(如果可能)。
再次抱歉,简洁得可怕,我不确定我在做什么。
与其尝试完全重新映射数组,不如将数组包装在 class.
中类似于:
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