Моя попытка

Закрытые или заброшенные проекты, не состоявшие в Клубе, но имевшие ветку на форуме.

Модератор: Jolly Roger

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Моя попытка

Сообщение Jolly Roger » 10 мар 2010, 19:07

/* id = 0 - трава, 1 - дерево, 2 - вода, 3 - стена пещеры, 4 - пол пещеры и т.п. */
int id;

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

Аватара пользователя
Newman
Сообщения: 144
Зарегистрирован: 23 фев 2010, 15:30

Re: Моя попытка

Сообщение Newman » 16 мар 2010, 08:02

В общем, пока сделал так:

Код: Выделить всё

class Tile {
 Terrain terrain;
}

class Terrain {
 /** Стоимость "хождения".
  Если 0, то данный тип местности непроходим
  Каменный пол (или дорога) - 2, трава - 3, песок - 5 и т.д.
 */
 int cost;
}
Остров пока квадратный. Можно перемещаться по стрелкам, по лесу кроме героя хаотически ходят звери (волки).
На этом пока всё.

Теперь хочу всё-таки сделать, чтобы остров был похож на остров.
Посмотрел несколько генераторов на сайте.
Фрактальный "размазывает" четыре типа местности на карту большого размера. Мне этого не нужно.
Метод, который "накладывает" на карту случайные прямоугольники - не пробовал, но результат кажется сомнительным.
Попробовал свой метод - случайно набросал на карту N (причём N гораздо больше width*height карты) точек, сделал сглаживание, потом все точки со значением меньше порогового, сделал водой. Тоже не очень получилось. :( (Хотя, может, нужно подобрать числовые параметры.)

Может, кто-нибудь что-то подскажет?

Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника" (так, кажется?), вот только "копатели" будут перемещаться не только по плоскости, но иногда выходить на уровень выше, пока не доберутся до поверхности. Ну, и комнаты тоже будут (хотя и не так уж и много).


Аватара пользователя
Newman
Сообщения: 144
Зарегистрирован: 23 фев 2010, 15:30

Re: Моя попытка

Сообщение Newman » 16 мар 2010, 08:36

Toth, спасибо, изучаю.

Аватара пользователя
Krechet
Сообщения: 9
Зарегистрирован: 14 авг 2009, 14:35

Re: Моя попытка

Сообщение Krechet » 24 мар 2010, 18:05

Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника"
А если тебе генерировать сначала лабиринт-муравейник, а потом как-бы обвести его контуром толщиной еще клеток в 3-4 - получишь контур поверхности своего острова. И по форме с подземельем совпадать будет, и побережье далеко не квадратное. (П.С. Идея спонтанно пришла, не пинать, если глупая :) )

Аватара пользователя
Jolly Roger
Сообщения: 2973
Зарегистрирован: 27 ноя 2009, 09:10
Откуда: Minsk, Belarus

Re: Моя попытка

Сообщение Jolly Roger » 24 мар 2010, 18:50

Krechet писал(а):
Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника"
А если тебе генерировать сначала лабиринт-муравейник, а потом как-бы обвести его контуром толщиной еще клеток в 3-4 - получишь контур поверхности своего острова. И по форме с подземельем совпадать будет, и побережье далеко не квадратное. (П.С. Идея спонтанно пришла, не пинать, если глупая :) )
Хмм...Хмм.! идея, на первый взгляд интересная. Если ограничить количество "муравьинных" проходов, то выйдет нтересная островная или болотная карта. :)
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.

Аватара пользователя
Newman
Сообщения: 144
Зарегистрирован: 23 фев 2010, 15:30

Re: Моя попытка

Сообщение Newman » 25 мар 2010, 10:41

Да, можно попробовать именно таким методом, из-под земли.

Тем временем попробовал изучить исходники angband, nethack и stonesoup - просто посмотреть, что там у них внутри, какие структуры для данных.... Может, что-то использовать подобное... И что-то моё психическое здоровье сильно пошатнулось. :)
Сколько лет в этих исходниках нужно разбираться???

Аватара пользователя
Newman
Сообщения: 144
Зарегистрирован: 23 фев 2010, 15:30

Re: Моя попытка

Сообщение Newman » 21 апр 2010, 11:06

Дело продвигается ужжасно медленно.
Игры пока нет. Просто перемещение по карте, остальные существа перемещаются рандомно, убивать нельзя, предметов нету... FOV тоже пока не реализован.
Но если кому хочется посмотреть - милости прошу (нужна Java RE 1.6).

Загвоздка с предметами.
Путь 1. Для всех типов предметов - один класс с необходимым набором полей, в том числе тип объекта (к примеру, 1 - dagger, 2 - short sword, 20 - health potion и т.д.).
Плюс - упрощается сохранение-загрузка.
Минус - меньшая гибкость.

Путь 2. Для всех типов предметов - свой класс. Т.е. класс Dagger, класс ShortSword и т.д.
Плюс - большая гибкость.
Минус - куча дополнительных классов, а также чёрт его знает как всё сохранять в файл (сначала пишем число - тип объекта, потом данные объекта? При чтении - читаем это число, потом по этому значению создаём свой класс...)

Путь 3. Гибрид. Классы Weapon, Potion и т.д., унаследованные от Item.
Плюс - меньше классов.
Минус - всё тот же из п. 2, правда, тут будет немного проще...

(UPD: файл удалён, потому как архив почему-то оказался испорчен...)
Последний раз редактировалось Newman 20 окт 2010, 13:00, всего редактировалось 1 раз.

Аватара пользователя
kipar
Сообщения: 2082
Зарегистрирован: 10 мар 2010, 13:16
Откуда: Москва

Re: Моя попытка

Сообщение kipar » 21 апр 2010, 11:14

Я у себя с предметами использую путь 3.
Причем так: считываем ИД класса, создаем класс (есть массив соответствия ИД и классов, не знаю можно ли такое сделать в Яве), потом вызываем полиморфный метод класса, который считывает остальное.
У базового класса TItem этот метод считает имя, картинку, ну еще какие-то общие для всех параметры. У унаследованного класса TWeapon этот метод вызовет родительский (т.е. TItem) и потом считает еще урон, точность и т.д.

Аватара пользователя
XVs
Сообщения: 719
Зарегистрирован: 18 янв 2010, 15:46
Контактная информация:

Re: Моя попытка

Сообщение XVs » 21 апр 2010, 13:06

Я голосую за первый Путь :3

Что у него за меньшая гибкость по твоему?

Аватара пользователя
Toth
Сообщения: 327
Зарегистрирован: 11 ноя 2009, 13:36
Откуда: Красноярск

Re: Моя попытка

Сообщение Toth » 21 апр 2010, 13:39

Могу точно перечислить минусы первого метода, т.к. им и пошел:
1) Избыточные данные (пример: для поушенов приходится хранить сведения о дамаге, арморе, материалах, бонусов и т.д., которые относятся к оружию, броне).
2) Разрастаются функции по работе с предметами (switch ТипПредмета ...).
3) Из-за 2 - сложнее вводить новые типы предметов и модернизировать существующие, а также добавлять новые свойства.

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

Аватара пользователя
XVs
Сообщения: 719
Зарегистрирован: 18 янв 2010, 15:46
Контактная информация:

Re: Моя попытка

Сообщение XVs » 21 апр 2010, 14:27

Toth, c первым пунктом согласен.
Насчёт второго - код в любом случае разрастётся, в остальных случаях за счёт других классов.
А вот вводить новые типы предметов в этом методе как раз-то легче.
Например, у нас есть тип "Сапоги" и мы хотим добавить тип "Шлем". Просто добавляем в функцию cItem::Equip() проверку на новый тип, чтобы он экипировался в слот головы. В других методов для этого надо было бы создавать полностью новый класс, заполнять с нуля все его переменные и методы(включая cHelmet::Equip()).

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Re: Моя попытка

Сообщение Maelstrom » 21 апр 2010, 14:49

Я прекрасно себя чувствую с 1. Ну и плюс для каждого предмета своя функция использования.
Айв кнгенгах Йог-Сотот

Аватара пользователя
Toth
Сообщения: 327
Зарегистрирован: 11 ноя 2009, 13:36
Откуда: Красноярск

Re: Моя попытка

Сообщение Toth » 21 апр 2010, 15:24

Ну и плюс для каждого предмета своя функция использования.
Можно тут подробнее.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Re: Моя попытка

Сообщение Maelstrom » 21 апр 2010, 15:27

В VB есть CallByName - вызов процедуры по строке с её именем. Вот у каждого предмета есть параметр "функция использования". В других языках, вроде, можно тоже как-то ссылку на функцию сделать.
Айв кнгенгах Йог-Сотот

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя