我不完全確定如何表達這個問題,對于無用的標題感到抱歉。
我有一個大陣列(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) 位于底部,或者更好的是,位于陣列的確切中心(如果可能)。
再次為糟糕的簡潔性感到抱歉,我不確定我在做什么。
uj5u.com熱心網友回復:
您可以將陣列包裝在一個類中,而不是嘗試完全重新映射您的陣列。
就像是:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364600.html
上一篇:我可以洗掉下一行代碼嗎?
