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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kpoxaa
71 / 32 / 1
Регистрация: 03.08.2012
Сообщений: 446
#1

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

09.02.2014, 08:24. Просмотров 450. Ответов 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. Рандомное создание блоков для уровня  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 08:24     Игра Arcanoid. Рандомное создание блоков для уровня
Посмотрите здесь:
Подбор литературы. Для повышенного уровня C++
C++ Задачи с массивами для C++ начального уровня
Программа для подсчета уровня частоты вхождений слов C++
C++ Программа для подсчета уровня частоты вхождений слов
Игра для двух игроков C++
Игра в города для бота C++
C++ Рандомное число
Рандомное заполнение C++
Рандомное назавние программы C++
C++ Рандомное имя файла
C++ Получить рандомное число от 1 до 10
C++ Рандомное заполнение массива

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

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

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

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

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

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

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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru