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

Рандомные стенки в игре Змейка - C++

Восстановить пароль Регистрация
 
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
11.10.2012, 22:05     Рандомные стенки в игре Змейка #1
Собираюсь делать стенки для игры Змейка. Хотелось бы спросить о математической части. Формулу для генерации лучше делать одну или возможно несколько для разных случаев генерации?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 22:05     Рандомные стенки в игре Змейка
Посмотрите здесь:

C++ Шарик, летающий по экрану и ударяющийся об его стенки
C++ Рандомные числа
C++ Стенки внутри лабиринта
C++ Рандомные числа
C++ Загрузка информации из файла (система рекордов в игре "Змейка")
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 01:25     Рандомные стенки в игре Змейка #2
смотря что именно вы понимаете про генерацию стен, думаю чо меньше гемороя будет с 1м случаем генерации, потому как делал морской бой с рандомным выставлением кораблей и уж поверте нет ничего гаже чем отлаживать функцию rand() =/

а стенки например можно сделать такие
C++
1
2
3
4
5
6
7
=========================================
=      =                                =
=      =                                =
=                                        =
=                            =          =
=                            =          =
=========================================
C++
1
2
3
4
5
6
7
=========================================
=                     =                 =
=                     =                 =
=                                        =
=                     =                 =
=                     =                 =
=========================================
Думаю это будет не сильно сложно, понравится делайте другие виды генерации =)
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
12.10.2012, 07:29  [ТС]     Рандомные стенки в игре Змейка #3
Цитата Сообщение от MrGrig Посмотреть сообщение
смотря что именно вы понимаете про генерацию стен, думаю чо меньше гемороя будет с 1м случаем генерации, потому как делал морской бой с рандомным выставлением кораблей и уж поверте нет ничего гаже чем отлаживать функцию rand() =/

Думаю это будет не сильно сложно, понравится делайте другие виды генерации =)
Вы предлагаете не рандом в змейке? Дело в том что мне не сколько нужно узнать как делаются рандомные стенки в змейке, сколько узнать, как делаются рандомные уровни вообще. Я хочу знать, рандомная стенка, подобна к примеру рандомному кубику из minecraft (если знаете такую игру), ее координаты вычисляются по одной формуле? Или по нескольким? Или в одну формулу вставляют еще несколько формул?
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 08:21     Рандомные стенки в игре Змейка #4
( в майнкрафт играю =)) не совсем понимаю о какой формуле вы именно говорите....

в морском бое у меня был 2мерный масив поля в котором были определенные значения типа "поле занято", "рядом корабль" и "поле свободно" немного измененной функцией рандома я генерировал координаты х и у, и вставлял туда рандомно повернутый корабль, если не получалось пробовал повернуть по другому, после 3х поворотов генерировал новые координаты.

ваше поле тоже можно предстваить в виде 2х мерного массива, причем булевского где соответственно 0 пусто 1 есть препятствие. стенки по дефолту советую поставить по координатам 0.0 .. 0.н, 0.0 .. м.0, 0.н .. н.м и м.о .. н.м. чтобы соответственно был 4х угольник. далее рандомно по этим координатам выбирать 2,3,4 ну или сколько вам угодно точек и стоить столбики снизу вверх и сверху вниз соответственно (ну или с лева на право и с права на лево (только не забудьте сделать проверку в какой части вашего 4х угольника координата со столбиком, а то может случится так что вы построите препятствие которое будет вне карты или на линии 4х угольника)). длину столбиков тоже можно выбирать рандомно. и советую все это описать в 2х функциях чтобы было проще строить. если чтото не понятно могу пояснить более детально с наглядным примером примером =)
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
12.10.2012, 09:02  [ТС]     Рандомные стенки в игре Змейка #5
Цитата Сообщение от MrGrig Посмотреть сообщение
( в майнкрафт играю =)) не совсем понимаю о какой формуле вы именно говорите....

в морском бое у меня был 2мерный масив поля в котором были определенные значения типа "поле занято", "рядом корабль" и "поле свободно" немного измененной функцией рандома я генерировал координаты х и у, и вставлял туда рандомно повернутый корабль, если не получалось пробовал повернуть по другому, после 3х поворотов генерировал новые координаты.

ваше поле тоже можно предстваить в виде 2х мерного массива, причем булевского где соответственно 0 пусто 1 есть препятствие. стенки по дефолту советую поставить по координатам 0.0 .. 0.н, 0.0 .. м.0, 0.н .. н.м и м.о .. н.м. чтобы соответственно был 4х угольник. далее рандомно по этим координатам выбирать 2,3,4 ну или сколько вам угодно точек и стоить столбики снизу вверх и сверху вниз соответственно (ну или с лева на право и с права на лево (только не забудьте сделать проверку в какой части вашего 4х угольника координата со столбиком, а то может случится так что вы построите препятствие которое будет вне карты или на линии 4х угольника)). длину столбиков тоже можно выбирать рандомно. и советую все это описать в 2х функциях чтобы было проще строить. если чтото не понятно могу пояснить более детально с наглядным примером примером =)
Расскажите подробнее про ваш 2 мерный масив поля в котором были определенные значения типа "поле занято", "рядом корабль" и "поле свободно" немного измененной функцией рандома. А то я немного не понял
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 10:40     Рандомные стенки в игре Змейка #6
ну обычный интовский массив. По правилам морского боя корабли должны находится друг от друга на расстоянии минимум 1 клетки. у меня 0 было свободно 1 занято 2 рядом корабль. соответственно при генерировании новых координат если она попадала не в свободно или все развороты попадали в несвободные клетки генерировались новые координаты.

Добавлено через 6 минут
вам я предложил такую реализацию, что рандом предлагает координаты исключительно по вашему контуру
C++
1
2
3
4
5
6
7
=========================================
=                                        =
=                                        =
=                                        =
=                                        =
=                                        =
=========================================
допустим случайная координата будет здесь

C++
1
2
3
4
5
6
7
=========================================
=                                        =
=                                        =
=                                        =
=                                        =
=                                        =
===================[=]=====================
программа проанализировав поняла что точка находится на нижней стенке, соответственно нужно препятствие строить вверх. опять же выбрала случайную длину препятствия (допустим 2) и добавила по соответствующим координатам препятствие

C++
1
2
3
4
5
6
7
=========================================
=                                        =
=                                        =
=                                        =
=                    =                  =
=                    =                  =
===================[=]=====================
если вам нужно чтобы функция рандом выбирала координаты только на стенках, обращайтесь подскажу =)
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
13.10.2012, 01:36  [ТС]     Рандомные стенки в игре Змейка #7
Цитата Сообщение от MrGrig Посмотреть сообщение
ну обычный интовский массив. По правилам морского боя корабли должны находится друг от друга на расстоянии минимум 1 клетки. у меня 0 было свободно 1 занято 2 рядом корабль. соответственно при генерировании новых координат если она попадала не в свободно или все развороты попадали в несвободные клетки генерировались новые координаты.

Добавлено через 6 минут
вам я предложил такую реализацию, что рандом предлагает координаты исключительно по вашему контуру
Я не пойму если ваш массив содержит координаты, то откуда там значения типа свободно, занято и рядом корабль. Кстати про формулы кубов из minecraft: почитайте «Генерация земли, часть 1». Нотч говорит о какойто формуле, и там она представлена как математическое выражение. Хотя я не знаю как каждый куб в любых случаях можно генерировать по одной формуле, по одному выражению
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
13.10.2012, 08:46     Рандомные стенки в игре Змейка #8
Цитата Сообщение от PedRo87 Посмотреть сообщение
Я не пойму если ваш массив содержит координаты, то откуда там значения типа свободно, занято и рядом корабль. Кстати про формулы кубов из minecraft: почитайте «Генерация земли, часть 1». Нотч говорит о какойто формуле, и там она представлена как математическое выражение. Хотя я не знаю как каждый куб в любых случаях можно генерировать по одной формуле, по одному выражению
нет не т нет. в матрице у меня храняться лишь данные о свободно занято. А координаты есть счетчики х и у =) так же намного проще. вот у вас тоже есть матрица поля допустим 20 на 20 и координаты поля 2.3 есть 2й столбец в 3й строке =)
не по теме

что касается майнкрафта, то там тоже видимо улучшенная функция рандом. мне кажется там у поля есть какойто парамер который отвечает вероятность пренадлежности кубика к тому или иному, скажем так, ресурсу, который создает вокруг себя примерный обьем на который так же накладывается параметр появления этого же кубика и чем дальше от начального кубика следующий появившийся тем вероятность появления такогоже кубика меньше. соответственно есть большая вероятность что гдето в далеке от допустим песка появится кубик земли, который в свою очередь накладывает на объем вокруг уже вероятность появления своего собрата. Также я думаю что на эти вероятности так же влияют то что находится рядом, так как кубики с песком часто бывают сводой и под ней. Кактусы и тростник только на песке растет. деревья не растут на песке. также видимо есть изменение этих коэффицентов в зависимости от глубины кубика. т.к. лава на поверхности встречается редко, а на глубине её достаточно много ну и тд и тп =) в последней версии майнкрафта ввели так называемые биомы (очень большие участки принадлежащей к одному типу местности территории) это зделано для того чтобы небыло аких казусов что около пустыни встречается место со снегом и льдом, хотя они до сих пор встречаются =)


Добавлено через 5 минут
Цитата Сообщение от PedRo87 Посмотреть сообщение
Хотя я не знаю как каждый куб в любых случаях можно генерировать по одной формуле, по одному выражению
ну достаточно создать класс кубик и от него уже породить другие классы ну а дальше рекурсия =)
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
13.10.2012, 12:41  [ТС]     Рандомные стенки в игре Змейка #9
Цитата Сообщение от MrGrig Посмотреть сообщение
нет не т нет. в матрице у меня храняться лишь данные о свободно занято. А координаты есть счетчики х и у =) так же намного проще. вот у вас тоже есть матрица поля допустим 20 на 20 и координаты поля 2.3 есть 2й столбец в 3й строке =)
То есть, у вас массив[x,y] и, например, массив[10,20] = занято?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.10.2012, 09:06     Рандомные стенки в игре Змейка
Еще ссылки по теме:

C++ Как реализовать взаимодействие классов в игре "Змейка"
Не получаются стенки в лабиринте C++
C++ Ошибки в почти готовой игре Змейка

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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
14.10.2012, 09:06     Рандомные стенки в игре Змейка #10
Цитата Сообщение от PedRo87 Посмотреть сообщение
То есть, у вас массив[x,y] и, например, массив[10,20] = занято?
несовсем понял о чем вы ладно для примера на вашу задачу.

C++
1
2
3
4
5
6
7
8
9
10
11
i\j 0 1 2 3 4 5 6 7 8 9
 0  = = = = = = = = = =
 1  =                 =
 2  =                 =
 3  =                 =
 4  =                 =
 5  =                 =
 6  =                 =
 7  =                 =
 8  =                 =
 9  = = = = = = = = = =
так вот все элементы под индексами/координатами
0.0 .. 0.9, 0.0 .. 9.0, 0.9 .. 9.9 и 9.0 .. 9.9 ,будут заняты, т.е. значение в них будет равно 1.
соответвенно если змейка при следующем шаге будет попадать на одну из этих координат игра закончится
Yandex
Объявления
14.10.2012, 09:06     Рандомные стенки в игре Змейка
Ответ Создать тему
Опции темы

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