Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Алгоритмика

Алгоритмика Об алгоритмах вообще; методы, обсуждения способов решения

Ответ
 
Опции темы
Старый 01.05.2011, 05:23   #16
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Если хранить допустим в тойже xml, то можно держать описание сектора, а внутри его описания к его стенкам.
По типу такого( для первой ячейке твоего примера)
<sector location="1;1" type="1" >
    <wall side="upper" type="1" />
    <wall side="left" type="1" />
    <wall side="buttom" type="2"/>
</sector>
Ну а ячейка должна быть типом/структурой, которая содержит список(а лучше словарь, с ключом - сторона) структур/классов её стенок.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Phantom (01.05.2011)
Старый 01.05.2011, 05:57   #17
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Полегче, у меня игра будет для мобилы, всё будет проще. =) По сути ты предлагаешь делить на сектора, как на рисунке, и у каждого сектора хранить информацию об окружающих его стенках. Я так и думал делать, но меня просто смущает некоторая избыточность, как и сказал IGR, потому что о каждой стенке информация так или иначе будет содержаться в двух соседних секторах. Но я сейчас подумал, наверно это будет хороший вариант. Я буду хранить не информацию о стенках, а информацию о полустенках, пофиг на исбыточность, зато можно будет прикольные вещи делать, например сделать стенку однопроходной, чтобы через неё в одну сторону можно было пройти, а в другую нет. Или порталы. В общем, вопрос решён. Спасибо. =)
(Offline)
 
Ответить с цитированием
Старый 01.05.2011, 05:59   #18
Dream
быдло
 
Регистрация: 05.08.2007
Сообщений: 1,435
Написано 614 полезных сообщений
(для 1,489 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Сообщение от Phantom Посмотреть сообщение
Полегче, у меня игра будет для мобилы, всё будет проще. =)
Xml не так уж и тяжел, если конечно там не будет описано 100000 ячеек
(Offline)
 
Ответить с цитированием
Старый 01.05.2011, 06:13   #19
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Да не, зачем усложнять. Я даже в памяти поле лабиринта наверно буду просто как массив чисел хранить. Если вдруг станет мало 4 байт, увеличу тип до Long.
(Offline)
 
Ответить с цитированием
Старый 01.05.2011, 14:52   #20
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Хм... не вижу разницы

Нажмите на изображение для увеличения
Название: maze.png
Просмотров: 891
Размер:	11.4 Кб
ID:	13613

блоки на уровне расставлять можно анализируя матрицы 3х3:

Нажмите на изображение для увеличения
Название: maze1.png
Просмотров: 885
Размер:	12.2 Кб
ID:	13614
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо pax за это полезное сообщение:
Dream (01.05.2011), Phantom (02.05.2011)
Старый 02.05.2011, 01:26   #21
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

pax, у меня и такая идея тоже была, но в таком случае нужно ещё хранить и углы секторов, информация о которых в коде вообще нафиг не нужна. Всё таки буду делать так, как решил. =)
(Offline)
 
Ответить с цитированием
Старый 02.05.2011, 02:11   #22
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Эм... мне казалось во втором варианте лабиринт больше в 4 раза... нет? Я что-от не понял про углы секторов...
(Offline)
 
Ответить с цитированием
Старый 02.05.2011, 08:41   #23
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Нее, лабиринт не больше. Поле по сути такое же. Он только кажется больше засчёт того, что стенки в нём находятся между секторами, а не являются секторами, как в первом.
(Offline)
 
Ответить с цитированием
Старый 02.05.2011, 11:41   #24
IGR
Blitz's Shame !!
 
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений
(для 2,013 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

не ну в первом случае стенки занимают (отнимают) место в лабиринте, а во втором нет так как стенки именно между ячейками !! По этому в первом лабиринте пространства меньше чем во втором !!
(Offline)
 
Ответить с цитированием
Старый 02.05.2011, 12:03   #25
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Во втором случае стенками являются все клетки, в отличии от первого, а ходить можно по ребрам. Это как раз увеличивает площадь лабиринта в 4 раза так как я расставил нолики и единички.

Собственно я хотел собрать первый лабиринт из блоков второго - у меня не получилось... наверное потому что принцип построения разный. Карту такую можно собрать из ~10 разновидностей блоков каждый поворачивая на 0/90/180/270 градусов, но сетка передвижения будет такой как я привел. Если хочешь, чтобы она была такого же разрешения, как и первый лабиринт, то второй надо инвертировать. Но опять же новый лабиринт будет больше, т.е. клеток, на которые можно наступить будет больше:
Нажмите на изображение для увеличения
Название: maze2.png
Просмотров: 918
Размер:	3.8 Кб
ID:	13616

Правда надо будет хранить информацию о гранях/углах для столкновений... Так что даже не знаю как ты собираешься с тем же разрешением сделать нормальную обработку... Потом поделись решением, если не секрет будет
(Offline)
 
Ответить с цитированием
Старый 02.05.2011, 19:36   #26
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Всё можно сделать чуточку проще. Представьте себе, что вам нужно сделать кольчугу из квадратиков. Причём базовый элемент кольчуги должен быть одинаковый. Что мы сделаем? Правильно, сделаем элемент, который имеет соединения типа "папа" с, допустим, нижней и правой стороны, и "мама" с верхней и левой. И тогда можно строить какие угодно кольчуги.

Тот же принцип и здесь:
чтобы не было повторяющихся стенок, храним информацию только о 2х из 4х стенок - информацию о двух других стенках в любом случае содержат наши "соседи". С точки зрения хранения инфы это всего 2 бита инфы для ячейки, + если для хранения одной ячейки используется 1 байт, у тебя остаётся ещё 6 бит на описание того, что находится в ячейке.

Из потенциальной проблемы только границы уровня, но тут либо делать их всегда закрытыми, либо добавлять ещё по ряду "лишних" клеток с незаписываемых сторон лабиринта.

В аттаче помалевал поверх лабиринта его "схему" - зелёные линии получились там, где нижняя стенка, синие - где правая, белые уголки - где обе хранимые стенки. Думаю, понятно вышло...

UPD.
В принципе получается, что "стеночный" лабиринт вдвое больше по количеству информации, чем его "блочный" собрат.

Что касается формы хранения и обработки - 2 бита на стенки, 6 на содержимое должно хватить (2^6 = 64 разных состояния клетки, или 63 айтема + пустая клетка), во время перемещения персонажа я бы держал в памяти для удобства массивчик Surround 3х3, в котором хранил бы возможность перейти в соседнюю клетку из текущей. ЧТобы просчитать Surround-карту достаточно точечно (считай - без вложенного цикла) взять 8 позиций из карты лабиринта (не нужно брать нижнюю правую клетку, т.к. её данные ни на что не повлияют) если персонаж может гулять по диагонали, или вообще 3, если не может (левее, выше, и прямо где персонаж).
Миниатюры
Нажмите на изображение для увеличения
Название: лабиринты.png
Просмотров: 761
Размер:	4.3 Кб
ID:	13623  
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Taugeshtu за это полезное сообщение:
Лit}{Ъ (03.05.2011), Phantom (02.05.2011), St_AnGer (05.05.2011)
Старый 02.05.2011, 19:52   #27
Phantom
Элита
 
Аватар для Phantom
 
Регистрация: 14.06.2008
Адрес: Украина, Киев
Сообщений: 2,273
Написано 754 полезных сообщений
(для 1,833 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

Правда надо будет хранить информацию о гранях/углах для столкновений... Так что даже не знаю как ты собираешься с тем же разрешением сделать нормальную обработку... Потом поделись решением, если не секрет будет
Игра вообще будет 3D

Taugeshtu, всё таки я думаю, что со способом, на котором я определился, будет проще работать в программе.
(Offline)
 
Ответить с цитированием
Старый 12.05.2011, 10:52   #28
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Смех Ответ: Создание 2Д игр с условно бесконечным пространством

"Я так думаю нужно вводить какуето игровую единицу растояния и в файлах даных записывать позиции объектов в етих единицах: объект1, 100, 20; объект2,5000,450; и т. д."

Эм... допустим у тебя 500 объектов (при такой большой карте вполне реальное число).

итак, надо ввести условие, попадает ли объект на область экрана, и если да, то прорисовываем. А теперь подумайте.

Допустим, тебя устравивает 10 фпс. Значит, нужно проводить 500*10*2 (сравнивается x и y)=10000 сравнений в секунду. Чисто для одного условия из кода. ИМХО, это не очень полезно для быстродействия.
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Старый 12.05.2011, 12:53   #29
Taugeshtu
scientist.alien
 
Аватар для Taugeshtu
 
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений
(для 2,593 пользователей)
Ответ: Создание 2Д игр с условно бесконечным пространством

ИМХО, это не очень полезно для быстродействия.
ИМХО, ты не представляешь себе, на что способны современные процессоры. Квадратичная сложность - ничтожна, хоть там 10к вызовов средней тяжести функции, хоть 100к.
Для примера представь себе, как тяжело физиксу, когда у него в памяти сидит тримеш уровня о 100к вершин, и ещё 100 патиклов с физическим взаимодействием с миром на него сыпятся. Да-да, это 10М переборов, и ведь жуёт, зараза!

Ну а для телефонных игр условно бесконечное пространство - ооооочень сомнительная фича. Даже на 5" экране.
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab.
We LOVE you. We MADE you.
(Offline)
 
Ответить с цитированием
Старый 12.05.2011, 17:57   #30
PassCall
Разработчик
 
Аватар для PassCall
 
Регистрация: 07.04.2011
Адрес: Млечный путь, Земля, Европа, Беларусь, Могилев
Сообщений: 391
Написано 94 полезных сообщений
(для 319 пользователей)
Сообщение Ответ: Создание 2Д игр с условно бесконечным пространством

Я говорил про мобильный телефон =)

Простите, не читал тему полностью.
Вообще вполне реально создать такую карту, чтобы была ну очень большого размера.

Ведь по сути память занимает массив с индексами тайлов. И если взять размер тайла 30х30 пикс., а матрица будет 500х500, то это замет 25000*6 байт (вроде столько занимает интегер)=150Кб, а размер такого мира -15000 пикс (что примерно 50 мобильных экранов в ширину и около 38 экранов в высоту).

Думаю, только профессиональные мазохисты решат обследовать весь такой мир =)
__________________
Мечта программиста: запрограммировать процесс программирования.

Всё гениальное - просто.

http://passcall.ucoz.com
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 16:12.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com