SFML и C++ Уроки \ Разработка игр › Форумы › SFML Graphics › как поменять карту? › Ответ в теме: как поменять карту?
Нет, нет, и ещё раз нет. Это +куча ненужных строчек. Я всё думал как это сделать, и придумал.
Значит первым делом, заходим в map.h и создаём ещё один массив (такого же размера как и основной map), назовём его map1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// Основной массив, с которым работают все функции const int H = 5; const int W = 6; sf::String map[H]={ "WWWWWW", "W W", "W W", "W W", "WWWWWW", }; // создаём второй массив, допустим это наш уровень 2 sf::String map2[H]={ "WWWWWW", "WWWWWW", "W W", "WWWWWW", "WWWWWW", }; // аналогичным образом можно создавать другие массивы (НО! Можно и менять размер массивов, но тогда код будет немного посложней) |
Теперь есть 2 способа реализации замены карты. Первый написать отдельную функцию (просто и удобно), или же непосредственно в самом main (тоже просто и удобно, но привык делать функции).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// объявим в самом верху 2 глобальные переменные bool и int int lvl; bool change_map=false; // дальше функция void changing_map_function(){ if (change_map == true) { if (lvl == 2) { for (int i=0; i<H; i++) for (int j=0; j<W; i++){ map[i][j] = map2[i][j]; // то есть по сути копируем переписываем map в map2 if ( i==H && j==W) change_map=false; // то есть, когда мы дошли до самого последнего значения массива мы останавливаем перепись массива map, иначе он бы переписывался бесконечно, что даёт нагрузку }//конец цикла }// конец условия lvl == 2 }// конец условия chnage_map==true }// конец функции // и уже непосредственно в main прописываем функцию в бесконечном цикле (!), и создаём различные условия смены карты, например: int main() { // опустим подробности создания окна и ивента while window.isOpen(){ // вот он тот самый бесконечный цикл changing_map_function(); if (Keyboard::isKeyPressed(Keyboard::Space)) { lvl=2;change_map=1;} // если нажата клавиша Space, (кстати лучше через ивент сделать) то тогда уровень 2, и меняем карту }// конец бесконечного цикла return 0; } // конец int main() |
Как я писал в коде, массивы необязательно должны быть одинаковых размеров , т.е. для первого уровня размер H, для второго H2. Но тогда нужно будет учитывать какой из массивов больше (учитывать и ширину и высоту отдельно) и добавлять уже другие условия. В общем вот так я справился с этой проблемой. P.S. На такую мысль навел урок про создание бонуса в рандомном месте карты, где просто переписывали один элемент массива, тут же я переписал весь.