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

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

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

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

09.02.2014, 08:24. Просмотров 474. Ответов 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

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

п.с Может у кого есть какие идеи на счет алгоритма... как же все таки реализовать эту идею с рандомным созданием продуманного и красивого мира для арканойда.
0
Миниатюры
Игра Arcanoid. Рандомное создание блоков для уровня  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 08:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Игра Arcanoid. Рандомное создание блоков для уровня (C++):

Создание блоков в коде - C++
Пишу в Visual Studio 2013. Есть ли в с++ возможность создания блоков #region как в c# , или какие-нибудь аналоги?

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

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

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

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

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

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

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

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

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

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

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

kpoxaa
72 / 33 / 1
Регистрация: 03.08.2012
Сообщений: 447
09.02.2014, 09:08  [ТС] #3
Да вы правы... спасибо. Красивый уровень просто так не сделаешь. А вы работали с парсером json на си++? Я только на джаве пробовал.
0
0x10
2475 / 1648 / 247
Регистрация: 24.11.2012
Сообщений: 4,069
09.02.2014, 09:11 #4
Цитата Сообщение от kpoxaa Посмотреть сообщение
А вы работали с парсером json на си++?
Там нет никаких сложностей. Несколько минут гугления и выбора парсера, немного чтения доков. Сам в проектах использовал этот http://jsoncpp.sourceforge.net/
1
09.02.2014, 09:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2014, 09:11
Привет! Вот еще темы с ответами:

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

Создание игрового уровня - XNA
Всем привет! Ребят, я начинающий "игродел"(win phone 8), прочитавший кучу литературы на эту тему, которому дико не хватает практики и...

3ds Max Создание игрового уровня - 3D моделирование
Всем доброго времени суток! У меня банальный вопрос - Где можно найти внятные уроки или статьи (желательно подробные) по созданию уровней...

Создание блоков - HTML, CSS
Здравствуйте.Возник вопрос с созданием блоков.Как можно сделать "резиновые" блоки?Что лучше использовать div или table?Если есть...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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