Мне нужна помощь в реализации более быстрого способа выполнить полную смену двумерного массива.
Моя проблема в том, что у меня есть двухмерный массив с данными карты игры. Эта игра похожа на Geometry Dash, но на Game Boy Advance. Пока у меня есть карта, которая выглядит примерно так:
int map1[9][40] = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0, 0, 0 },
{0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0 },
{0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 },
};
Но чтобы прочитать эту карту, я должен пройтись по каждому элементу и посмотреть, должен ли он отображаться на экране (x ›= 0 && x‹ = screen_width).
Поразмыслив, я думаю, мне следует использовать двусвязный список. Таким образом, я мог бы сдвинуть список, переместив узел заголовка в трейлер, а затем просто нарисовать данные первых 15 узлов (или около того). Будет ли это улучшением производительности по сравнению с циклическим перебором каждого элемента в 2D-массиве? Хотя сквозное прохождение не обязательно является недостатком производительности игры, я все же хочу его оптимизировать.
Если да, то как мне реализовать этот двусвязный список, чтобы он содержал те же данные, что и 2d-массив?
top,left,right,bottom
индексы этого прямоугольника. И затем вы можете перебрать эти ячейки в массиве карты. - person BitTickler   schedule 16.08.2020