Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Карта для игры 
:(
    Опции темы
arts80
Дата 4.5.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Необходимо реализовать карту для игры. Предполагаемый размер карты 10 000 x 10 000, каждая клетка карты - объект (объекты в игре идентифицируються типом long и  храняться в базе данных). 

Задача - требуеться минимальное время для определения есть ли в ячейке карты объект и поиск пути между клетками, при условии что некоторые объекты не проходимы. Алгоритм поиска известен, но проблема в организации хранения карт, хранить в виде двумерного массива потребует уж очень много памяти. Кто что посоветует ?

Использовать NIO Mapped Buffer на файл размером 10 гиг - насколько будет быстрая работа с таким файлом ? в основном требуеться READ_ONLY доступ
   

Это сообщение отредактировал(а) arts80 - 4.5.2006, 14:05
PM MAIL   Вверх
sandello
Дата 4.5.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



надо ж замыслить такое...
Вопрос: во взаимодействии могут участвовать любые точки на карте? 


--------------------
user posted image
PM MAIL Jabber   Вверх
ALKS
Дата 4.5.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



10 000 x 10 000 x 8 byte (long) это что-то около 800Kb. Разве это много? 
PM   Вверх
powerOn
Дата 4.5.2006, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



Можно поизмываться и хранить данные о наличии объекта ввиде потока битов.
long  это 8 байт, т.е. 64 бита - 64 клетки.

1 - есть объект, 0 - нет объекта. Установка и получение значений через побитовые операции.
 


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
arts80
Дата 5.5.2006, 05:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



Цитата(ALKS @ 4.5.2006,  14:52)
10 000 x 10 000 x 8 byte (long) это что-то около 800Kb. Разве это много?

10 000 x 10 000 = 100000000 элементов
если по 8 байт то 800000000 байт всего или 762 мегабайта, что вообще уже не мало, а вы как считали ?

Добавлено @ 05:53 
Цитата(MoonCat @ 4.5.2006,  14:59)
Можно поизмываться и хранить данные о наличии объекта ввиде потока битов.
long  это 8 байт, т.е. 64 бита - 64 клетки.

1 - есть объект, 0 - нет объекта. Установка и получение значений через побитовые операции.

Да, как вариант для определения пути (свободные или нет клетки) он подходит, но опять же проблема в том что надо знать какой именно объект находиться в клетке

Добавлено @ 05:55 
Цитата(sandello @ 4.5.2006,  14:52)
надо ж замыслить такое...
Вопрос: во взаимодействии могут участвовать любые точки на карте?

не любые, вообще когда человек стоит на одной клетке - ему надо переместиться на другую, то есть достаточно обработать квадрат 50x50 при поиске пути, но предполагаеться 1000 - 10000 игроков on-line одновременно, так что быстродействие на первом месте  

Это сообщение отредактировал(а) arts80 - 5.5.2006, 05:56
PM MAIL   Вверх
ALKS
Дата 5.5.2006, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



ой да, насчет объема ошибся, сорри smile 
PM   Вверх
sandello
Дата 6.5.2006, 06:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 18.5.2005
Где: Пермь

Репутация: нет
Всего: 2



Цитата(arts80 @  5.5.2006,  08:51 Найти цитируемый пост)
10 000 x 10 000 = 100000000 элементов
если по 8 байт то 800000000 байт всего или 762 мегабайта, что вообще уже не мало

Тьфу, напугал. Всего-то гиг оперативки... Поставь два и не мучайся :-)

Цитата(arts80 @  5.5.2006,  08:51 Найти цитируемый пост)
предполагаеться 1000 - 10000 игроков on-line одновременно, так что быстродействие на первом месте

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


--------------------
user posted image
PM MAIL Jabber   Вверх
arts80
Дата 6.5.2006, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



пришел к этому же решению, поставим гиг 8 и нормально будет 
PM MAIL   Вверх
ALKS
Дата 6.5.2006, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



а ваша java машина 8 гиг сможет адресовать? под Windows 2Gb на один процесс максимум. это притом что вы сможете даже 2 Gb отъесть. например заставить java 1.4 захватить 2Gb на машине с 4Gb физической памяти нам так и не удалось.... можно конечно несколько процессов запускать но тут уже понятно все сложнее... 
PM   Вверх
arts80
Дата 6.5.2006, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 25.4.2006

Репутация: нет
Всего: нет



будет java1.5 и один из вариантов Linux 
PM MAIL   Вверх
ALKS
Дата 6.5.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



Цитата(arts80 @ 6.5.2006,  14:06)
будет java1.5 и один из вариантов Linux

эм... а Linux 64bit ? 2GB это не с потолка взято. это следствие 32 битной адресации. 32я битами можно проадресовать 4096Mb максимум. но в Windows 1 бит зарезервирован для каких-то нужд, вот и получаеться 2048Mb на процесс. и это теоритический максимум для любой 32х битной версии Windows. Linux я не знаю но любая 32х битная OS не может выделить процессу памяти больше чем 4096Mb даже теоритически. но на практике я сомневаюсь что это удасться. Java 1.4 под Windows имеет какие-то глюки и даже 1.5GB захватить не в состоянии... кто сказал что в другой OS будет намного лучше? тестить надо.

с другой стороны с 64bit OS (которой по определению требуются 64bit процессора ) я не сталкивался не слишком-то оно распостранено ещё, да и стоит конкретно... 
PM   Вверх
JUncle
Дата 6.5.2006, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



arts80, я конечно не имею полного представления о вашей задаче, но ИМХО вы используете не тот метод решения.
А для 64-бит ОС надо, сдается мне, и JVM соответствуюшую. Есть ли такие?
Кстати далеко не факт что JVM на один long будет тратить именно 8 байт оперативки (вернее факт, что будет больше). 

Это сообщение отредактировал(а) JUncle - 6.5.2006, 20:12
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
ALKS
Дата 6.5.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



JVM 1.5 под Solaris SPARC 64-bit и под AMD64 для Windows и Linux точно есть. берите и пользуйтесь.

JUncle, это почему это больше 8 байт на лонг???? а ну-ка отсюда по-подробней пожалуйста. 
PM   Вверх
JUncle
Дата 6.5.2006, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 6.4.2006
Где: Казань, РФ

Репутация: нет
Всего: 1



Накладные расходы на динамическое выделение памяти однако должны быть. 
--------------------
class JUncle extends Man // singleton{/*...*/}
PM MAIL   Вверх
LSD
Дата 7.5.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Я бы использовал MappedByteBuffer на 64-bit машине с оперативкой не менее 4Гб. Мы не требуем от данных постоянно находится в памяти, но при этом если памяти хватает ОС будет держать эти данные в памяти. И плюс распологать данные в файле так, чтобы соседние ячейки имели близкие адреса, например квадратами 64х64. Для расчета движения вся карта не нужна, а вот соседние ячейки понадобятся. 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1130 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.