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

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

09.02.2014, 08:24. Показов 2422. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru