SFML и C++ Уроки \ Разработка игр › Форумы › SFML готовые решения (сниппеты) и советы › Генератор случайной карты к уроку 13.
В этой теме 0 ответов, 1 участник, последнее обновление eL_FaRMaZoN 7 года/лет, 11 мес. назад.
Просмотр 1 сообщения - с 1 по 1 (всего 1)
-
АвторСообщения
-
C++12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667//это пишем до функции мейнconst int HEIGHT_MAP = 25; //размер карты высотаconst int WIDTH_MAP = 40; //размер карты ширинаenum mapObjects { Brick , Floor, Stone, Daphne, Hearth }; // новое понятие, которое ещё не разбиралось в уроках - перечисляемый тип. Просто названия объектов, которые мы хотим использовать. Можно было обойтись и просто числами, но так проще разбираться в написанном коде чтобы не задумываться, 3 - это у нас сердечко или волчья ягода.mapObjects TileMap[HEIGHT_MAP][WIDTH_MAP]; // создание массива для карты. тип String меняем на наш перечисляемый тип. внутрь ничего сразу не пишем, по умолчанию он заполнится первым элементом типа - кирпичом....//пишем в мейне до бесконечного циклаint DaphneCount; //счётчик волчьих ягод.int HearthCount; // счётчик сердечек.mapObjects Object;for (int i = 1; i < HEIGHT_MAP-1; i++) //цикл по высоте, обратите внимание, что i берем от 1, до HEIGHT_MAP-1 чтобы не портить бордюр из кирпичей.for (int j = 1; j < WIDTH_MAP-1; j++) //цикл по ширине, аналогично без бордюра.{Object = mapObjects(rand ()%5); //создаем случайный объект из нашего массива переменныхif (Object == Brick) Object = Floor; // если случайным объектом получился кирпич - меняем его на пол, зачем нам стены посреди комнаты?if (Object == Daphne) // просто так получается слишком много ягод, поэтому проверяем волчья ягода ли это?{DaphneCount++; // считаем еёObject = Floor; //меняем на полif (DaphneCount>5) // если пропустили уже 5 ягод{Object = Daphne; //делаем ягодкуDaphneCount = 0; // сбрасываем счётчик} // т.о. рисуем только каждую 6 ягодку, которая случайно генерируется.}if (Object == Hearth) // всё полностью аналогично ягодам.{HearthCount++;Object = Floor;if (HearthCount>6){Object = Hearth;HearthCount = 0;}}TileMap[i][j] = Object; // записываем в наш массив карты объект, который мы сгенерировали и преобразовали выше.};...//отрисовка карты меняется следующим образом:for (int i = 0; i < HEIGHT_MAP; i++) //цикл по высотеfor (int j = 0; j < WIDTH_MAP; j++) // по ширине{switch (TileMap[i][j]) //оператор switch case, смотрит на значение в переменной и выполняет действия в зависимости от содержания. замена многочисленным if-ам.{case Floor: //рисуем полspriteMap.setTextureRect(IntRect(0, 0, 32, 32));break;case Stone: //каменьspriteMap.setTextureRect(IntRect(32, 0, 32, 32));break;case Brick: // кирпичspriteMap.setTextureRect(IntRect(64, 0, 32, 32));break;case Daphne: // волчью ягодуspriteMap.setTextureRect(IntRect(96, 0, 32, 32));break;case Hearth: // сердечкоspriteMap.setTextureRect(IntRect(128, 0, 32, 32));break;};spriteMap.setPosition(j * 32, i * 32);window.draw(spriteMap);}
-
АвторСообщения
Просмотр 1 сообщения - с 1 по 1 (всего 1)
Для ответа в этой теме необходимо авторизоваться.