заполнение 2d массива в 1d массиве

0

Я читаю текстовый файл следующим образом:

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) но для второго я получаю странное поведение при первом движении, когда я начинаю перемещаться внутри карты

  • 0
    Что должен вернуть fix_pos , индекс [4, 2], если все значения были в одномерном массиве ??
Теги:
arrays

2 ответа

1
Лучший ответ
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);
}
0

Я думаю, что это должно быть одно из следующих (в зависимости от вашего представления):

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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню