Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447

Игра Arcanoid. Рандомное создание блоков для уровня

09.02.2014, 08:24. Показов 2451. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу арканойд используя фреймворк cocos2d-x. Придумал такую идею: при каждом запуске игры или при каждом прохождении текущего уровня должен генерироваться новый уровень.

На данный момент я создаю блоки хардкодом и так много уровней конечно же не наделаешь...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch(gameLevel)
    {
    case 1 : 
        {   
            curGameWorld[0][0] = 0; curGameWorld[0][1] = 0; curGameWorld[0][2] = 3; curGameWorld[0][3] = 0; curGameWorld[0][4] = 0; 
            curGameWorld[1][0] = 0; curGameWorld[1][1] = 3; curGameWorld[1][2] = 3; curGameWorld[1][3] = 2; curGameWorld[1][4] = 0; 
            curGameWorld[2][0] = 3; curGameWorld[2][1] = 3; curGameWorld[2][2] = 2; curGameWorld[2][3] = 1; curGameWorld[2][4] = 1;  
            curGameWorld[3][0] = 3; curGameWorld[3][1] = 3; curGameWorld[3][2] = 2; curGameWorld[3][3] = 2; curGameWorld[3][4] = 1; 
            curGameWorld[4][0] = 3; curGameWorld[4][1] = 3; curGameWorld[4][2] = 2; curGameWorld[4][3] = 1; curGameWorld[4][4] = 1;  
            curGameWorld[5][0] = 0; curGameWorld[5][1] = 3; curGameWorld[5][2] = 3; curGameWorld[5][3] = 2; curGameWorld[5][4] = 0;  
            curGameWorld[6][0] = 0; curGameWorld[6][1] = 0; curGameWorld[6][2] = 3; curGameWorld[6][3] = 0; curGameWorld[6][4] = 0;  
            break;
        }
    }
Главные правила при генерации уровня я вывел следующие:
1. Игровое поле[7][5]
2. При генерации должны получаться красивые объекты(квадратики, ромбики, кружочки)
3. Сначала идут кубики уровня 3, потом 2, потом 1

Пример, который я запрограммировал хардкодом выглядит так: скрин прикрепляю

п.с Может у кого есть какие идеи на счет алгоритма... как же все таки реализовать эту идею с рандомным созданием продуманного и красивого мира для арканойда.
Миниатюры
Игра Arcanoid. Рандомное создание блоков для уровня  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2014, 08:24
Ответы с готовыми решениями:

Игра начинается с 0 уровня
Собственно, вот сам скрипт. Работает он нормально, уровни (не)повышаются как надо, но в самом начале при запуске приложения уровень стоит...

Рандомное создание объектов
Добрый вечер! Хочу создать рандомное появление объектов 4 штуки вряд, но чтобы появллись с разным интервалом. чтобы в одно время не было...

Игра "Однорукий Джо/Бандит". Рандомное изменение цифр
Здравствуйте! Подскажите,пожалуйста. Игра "Однорукий Джо/Бандит" на ASP.Net. Надо код,чтобы три цифры при нажатии кнопки рандомно...

3
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
09.02.2014, 09:00
Цитата Сообщение от kpoxaa Посмотреть сообщение
как же все таки реализовать эту идею с рандомным созданием продуманного и красивого мира для арканойда
Прежде всего целесообразно задуматься: а надо ли оно? Это определенно не та задача, которую стоит автоматизировать. Лучше продумать формат хранения уровней в файлах (xml, json) и загружать уровни, нарисованные человеком. Опционально - было бы неплохо написать редактор уровней.

Что касается симметричного уровня, то все кажется простым: берем часть поля (половину, четверть, столбец или строку), забиваем случайными блоками, а затем получившийся паттерн применяем ко всему полю.

Может возникнуть несколько проблем.
Уровень может не оказаться красивым. Просто будет прослеживаться некоторый паттерн. Тут можно поэкспериментировать с извесными распределениями, прогрессиями. Мб можно попробовать за основу взять известные числовые последовательности (например, поиграться вокруг чисел Фибоначчи).

В полученном уровне может отсутсвовать логика.
Случайные уровни хороши в играх вроде сапера, где у ячейки всего два состояния и нет необходимости получить конкретный узор. А логика может быть нарушена если, например, нам сгенерится сплошная стена непробиваемых блоков.

Прикладываю несколько скриншотов - эти уровни просто так не сгенерить. Также видно, что хороший уровень совсем не обязательно симметричен.

Как итог.
Если принципиально хочется, чтобы уровни обязательно были случайными, лучше выбрать самый простой тупой алгоритм. Сгенерировать часть уровня и растянуть. Более умные алгоритмы потребуют больших затрат, скорее всего неоправданных. Лучше потратить силы на редактор уровней.
Миниатюры
Игра Arcanoid. Рандомное создание блоков для уровня   Игра Arcanoid. Рандомное создание блоков для уровня   Игра Arcanoid. Рандомное создание блоков для уровня  

2
75 / 36 / 1
Регистрация: 03.08.2012
Сообщений: 447
09.02.2014, 09:08  [ТС]
Да вы правы... спасибо. Красивый уровень просто так не сделаешь. А вы работали с парсером json на си++? Я только на джаве пробовал.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
09.02.2014, 09:11
Цитата Сообщение от kpoxaa Посмотреть сообщение
А вы работали с парсером json на си++?
Там нет никаких сложностей. Несколько минут гугления и выбора парсера, немного чтения доков. Сам в проектах использовал этот http://jsoncpp.sourceforge.net/
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.02.2014, 09:11
Помогаю со студенческими работами здесь

Рандомное создание объекта в определенном месте
В общем суть такова, пытаюсь создать объекты там где находиться платформа, но не знаю как сделать так чтоб они были разбросаны в разных...

Рандомное создание объектов на границе экрана
Добрый день! Требуется чтобы периодически создавались объекты с любыми координатами, но на границе игрового экрана, а затем перемещались в...

Матрица. Рандомное создание и сортировка строк.
задание: Дана матрица NxM (я использую 8х8), упорядить ее строки по возрастанию их первых элементов. Я путаюсь всегда с i и j то...

arcanoid+pong=airhockey
Делаю игру на Си (что-то похожее на арканоид, понг и air hockey) с использованием sdl, у меня двигается 2 платформы, а как сделать чтобы...

Создание 2д уровня
Здравствуйте! Требуется создать карту для 2д игры такую, чтобы текстура была со всех 4 сторон. Скачал простой скрипт триангуляции и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru