Я читаю текстовый файл следующим образом:
wwwwwwwwwwwwwww
wffbbbbbbbbbffw
wf1bwbwbwbwbwfw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
wbwbwbwbwbwbwbw
wbbbbbbbbbbbbbw
или
fffffffffffffff
wffffffffffffff
fwfffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
ff1ffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffffffffff
fff2fffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
wffffffffffffff
fwfffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffwfffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
fffffffffffffff
Затем я получаю x
и y
этого файла, выполняя strlen
первой строки для y
и количество строк для x
:
void Map::get_size_map(char *dat_name)
{
std::ifstream ifs;
int x;
int y;
char c;
x = 0;
y = 0;
c = 0;
ifs.open (dat_name, std::ifstream::in);
if(ifs.is_open())
{
while(!ifs.eof())
{
c = ifs.get();
if(y == 0 && c != '\n')
x++;
if(c == '\n')
y++;
}
}
ifs.close();
this->x_map = x;
this->y_map = y;
}
Теперь в моей программе я хочу получить доступ, скажем, положение [4][2]
моей карты, потому что я сделал функцию, возвращающую правильное место в моем массиве 1d с моим func следующим образом:
int Map::fix_Pos(int x, int y)
{
int x_r;
int y_r;
x_r = x * this->x_map;
return (x_r + y);
}
Он хорошо работает для первого text(map)
но для второго я получаю странное поведение при первом движении, когда я начинаю перемещаться внутри карты
int Map::fix_Pos(int x, int y)
{
int x_r;
int y_r;
x_r = x * this->x_map;
return (x_r + y);
}
На самом деле вы умножаете горизонтальную линию (это X) и добавляете горизонтальную линию (которая равна Y). Поступая, вы получите противоположную позицию своей карты.
Попробуйте умножить количество вертикальной линии (Y) на размер вашей линии и добавить остальную горизонтальную линию.
Попробуй это:
int Map::fix_Pos(int x, int y)
{
return (y * this->x_map + x);
}
Я думаю, что это должно быть одно из следующих (в зависимости от вашего представления):
int Map::fix_Pos(int x, int y) const
{
return y * this->x_map + x;
}
или
int Map::fix_Pos(int x, int y) const
{
return x * this->y_map + y;
}
fix_pos
, индекс [4, 2], если все значения были в одномерном массиве ??