2014-10-11 2 views
1

Прежде всего, я знаю, что этот вопрос задан много, но мне нужно прояснить и понять некоторые вещи. Кроме того, я все еще изучаю C++, в настоящее время из книги и учебников, поэтому не будьте суровыми :)C++ 2D векторные карты

Как я могу получить 2D-карту для платформера, определенного в коде и измененного? Я понимаю базовые многомерные массивы, но я действительно не могу их использовать, потому что размер моей карты будет сильно изменяться. Я могу использовать вектор векторов, но и от того, что я слышал, это не прямоугольная сетка больше, это больше похоже ...

x x x x x x x x x x 
x  x . . . . . 
x  x . . . . . 
x x x x x x x x x x 

где х представляет собой плитку, пространство воздуха плитка , а точка не выделена. Не сетка!

Я также смущен тем, как работают указатели массивов.

Извините за то, что я здесь, но я все еще пытаюсь разобраться.

Любая помощь будет очень полезна!

+1

Похоже, вы хотите изменить размер матричного класса, которого нет в STL, насколько мне известно. – cdhowie

+0

Тогда любые альтернативы? Все, что я хочу сделать, это сохранить уровень моей игры :) – 5Mixer

+0

Вектор векторов действительно будет работать, если вы будете осторожны, чтобы все вложенные векторы были одинакового размера. – cdhowie

ответ

1

Я бы выбрал вектор векторов, если вам нужен простой размерный матричный класс. Вы всегда можете обернуть это в Matrix класс по своему усмотрению (возможно, шаблонирование размеров/типов)

struct Tile { 
    int whatever = 0; 
}; 

int main() { 
    std::vector<std::vector<Tile>> m; 
    m.resize(10); 
    for(auto& v : m) 
     v.resize(10); 

    // Print a 10x10 0-initialized matrix 
    for(auto& v : m) { 
     for(auto& elements : v) 
      std::cout << elements.whatever << " "; 
     std::cout << std::endl; 
    } 
} 

Live example

память в векторе смежно выделяются, нет «дыр». В любом случае вам придется сохранить размеры внутренних векторов в синхронизации, если вы измените размер.

Если вы считаете, что это слишком много работы для того, что вы имеете в виду, перейдите к возможностям Boost BLAS с помощью Matrix.

+0

Спасибо за эту ссылку, это может быть путь. Я abit путают с векторами LOL. Думаю, пока я не прочитаю о них больше, лучше использовать boost. Если у кого-нибудь есть другие идеи, пожалуйста, напишите :) Спасибо Марко. – 5Mixer

+0

Хорошо, провел последний час или около того, сделав правильное чтение на векторах векторов, и я думаю, что понимаю. Я думаю, что буду использовать этот метод для создания своих карт. Огромное спасибо! : D Принято. – 5Mixer

+0

Я обещаю, что время будет потрачено хорошо :) –

Смежные вопросы