Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
kpoxaa
70 / 31 / 1
Регистрация: 03.08.2012
Сообщений: 446
09.02.2014, 08:24     Игра Arcanoid. Рандомное создание блоков для уровня #1
Пишу арканойд используя фреймворк 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. Рандомное создание блоков для уровня  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 08:24     Игра Arcanoid. Рандомное создание блоков для уровня
Посмотрите здесь:

Рандомное распределения чисел C++
Рандомное заполнение C++
C++ Задачи с массивами для C++ начального уровня
Подбор литературы. Для повышенного уровня C++
C++ Задать рандомное число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
09.02.2014, 09:00     Игра Arcanoid. Рандомное создание блоков для уровня #2
Цитата Сообщение от kpoxaa Посмотреть сообщение
как же все таки реализовать эту идею с рандомным созданием продуманного и красивого мира для арканойда
Прежде всего целесообразно задуматься: а надо ли оно? Это определенно не та задача, которую стоит автоматизировать. Лучше продумать формат хранения уровней в файлах (xml, json) и загружать уровни, нарисованные человеком. Опционально - было бы неплохо написать редактор уровней.

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

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

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

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

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

kpoxaa
70 / 31 / 1
Регистрация: 03.08.2012
Сообщений: 446
09.02.2014, 09:08  [ТС]     Игра Arcanoid. Рандомное создание блоков для уровня #3
Да вы правы... спасибо. Красивый уровень просто так не сделаешь. А вы работали с парсером json на си++? Я только на джаве пробовал.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
09.02.2014, 09:11     Игра Arcanoid. Рандомное создание блоков для уровня #4
Цитата Сообщение от kpoxaa Посмотреть сообщение
А вы работали с парсером json на си++?
Там нет никаких сложностей. Несколько минут гугления и выбора парсера, немного чтения доков. Сам в проектах использовал этот http://jsoncpp.sourceforge.net/
Yandex
Объявления
09.02.2014, 09:11     Игра Arcanoid. Рандомное создание блоков для уровня
Ответ Создать тему
Опции темы

Текущее время: 01:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru