Моя попытка
Модератор: Jolly Roger
- Jolly Roger
- Сообщения: 2973
- Зарегистрирован: 27 ноя 2009, 09:10
- Откуда: Minsk, Belarus
Re: Моя попытка
/* id = 0 - трава, 1 - дерево, 2 - вода, 3 - стена пещеры, 4 - пол пещеры и т.п. */
int id;
может лучше сделать это не перечисленным типом, а ссылкой на объет? таким образом можно будет иметь много разных стен, полов и прочего на тех же ресурсах без головной боли?
int id;
может лучше сделать это не перечисленным типом, а ссылкой на объет? таким образом можно будет иметь много разных стен, полов и прочего на тех же ресурсах без головной боли?
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
Re: Моя попытка
В общем, пока сделал так:
Остров пока квадратный. Можно перемещаться по стрелкам, по лесу кроме героя хаотически ходят звери (волки).
На этом пока всё.
Теперь хочу всё-таки сделать, чтобы остров был похож на остров.
Посмотрел несколько генераторов на сайте.
Фрактальный "размазывает" четыре типа местности на карту большого размера. Мне этого не нужно.
Метод, который "накладывает" на карту случайные прямоугольники - не пробовал, но результат кажется сомнительным.
Попробовал свой метод - случайно набросал на карту N (причём N гораздо больше width*height карты) точек, сделал сглаживание, потом все точки со значением меньше порогового, сделал водой. Тоже не очень получилось. (Хотя, может, нужно подобрать числовые параметры.)
Может, кто-нибудь что-то подскажет?
Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника" (так, кажется?), вот только "копатели" будут перемещаться не только по плоскости, но иногда выходить на уровень выше, пока не доберутся до поверхности. Ну, и комнаты тоже будут (хотя и не так уж и много).
Код: Выделить всё
class Tile {
Terrain terrain;
}
class Terrain {
/** Стоимость "хождения".
Если 0, то данный тип местности непроходим
Каменный пол (или дорога) - 2, трава - 3, песок - 5 и т.д.
*/
int cost;
}
На этом пока всё.
Теперь хочу всё-таки сделать, чтобы остров был похож на остров.
Посмотрел несколько генераторов на сайте.
Фрактальный "размазывает" четыре типа местности на карту большого размера. Мне этого не нужно.
Метод, который "накладывает" на карту случайные прямоугольники - не пробовал, но результат кажется сомнительным.
Попробовал свой метод - случайно набросал на карту N (причём N гораздо больше width*height карты) точек, сделал сглаживание, потом все точки со значением меньше порогового, сделал водой. Тоже не очень получилось. (Хотя, может, нужно подобрать числовые параметры.)
Может, кто-нибудь что-то подскажет?
Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника" (так, кажется?), вот только "копатели" будут перемещаться не только по плоскости, но иногда выходить на уровень выше, пока не доберутся до поверхности. Ну, и комнаты тоже будут (хотя и не так уж и много).
Re: Моя попытка
Toth, спасибо, изучаю.
Re: Моя попытка
А если тебе генерировать сначала лабиринт-муравейник, а потом как-бы обвести его контуром толщиной еще клеток в 3-4 - получишь контур поверхности своего острова. И по форме с подземельем совпадать будет, и побережье далеко не квадратное. (П.С. Идея спонтанно пришла, не пинать, если глупая )Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника"
- Jolly Roger
- Сообщения: 2973
- Зарегистрирован: 27 ноя 2009, 09:10
- Откуда: Minsk, Belarus
Re: Моя попытка
Хмм...Хмм.! идея, на первый взгляд интересная. Если ограничить количество "муравьинных" проходов, то выйдет нтересная островная или болотная карта.Krechet писал(а):А если тебе генерировать сначала лабиринт-муравейник, а потом как-бы обвести его контуром толщиной еще клеток в 3-4 - получишь контур поверхности своего острова. И по форме с подземельем совпадать будет, и побережье далеко не квадратное. (П.С. Идея спонтанно пришла, не пинать, если глупая )Под островом лабиринт подземелий, наверное, будет сделан методом "муравейника"
Писать диздок спустя несколько лет разработки и множества изменений концепции - исконная русская девелоперская традиция.
Re: Моя попытка
Да, можно попробовать именно таким методом, из-под земли.
Тем временем попробовал изучить исходники angband, nethack и stonesoup - просто посмотреть, что там у них внутри, какие структуры для данных.... Может, что-то использовать подобное... И что-то моё психическое здоровье сильно пошатнулось.
Сколько лет в этих исходниках нужно разбираться???
Тем временем попробовал изучить исходники angband, nethack и stonesoup - просто посмотреть, что там у них внутри, какие структуры для данных.... Может, что-то использовать подобное... И что-то моё психическое здоровье сильно пошатнулось.
Сколько лет в этих исходниках нужно разбираться???
Re: Моя попытка
Дело продвигается ужжасно медленно.
Игры пока нет. Просто перемещение по карте, остальные существа перемещаются рандомно, убивать нельзя, предметов нету... FOV тоже пока не реализован.
Но если кому хочется посмотреть - милости прошу (нужна Java RE 1.6).
Загвоздка с предметами.
Путь 1. Для всех типов предметов - один класс с необходимым набором полей, в том числе тип объекта (к примеру, 1 - dagger, 2 - short sword, 20 - health potion и т.д.).
Плюс - упрощается сохранение-загрузка.
Минус - меньшая гибкость.
Путь 2. Для всех типов предметов - свой класс. Т.е. класс Dagger, класс ShortSword и т.д.
Плюс - большая гибкость.
Минус - куча дополнительных классов, а также чёрт его знает как всё сохранять в файл (сначала пишем число - тип объекта, потом данные объекта? При чтении - читаем это число, потом по этому значению создаём свой класс...)
Путь 3. Гибрид. Классы Weapon, Potion и т.д., унаследованные от Item.
Плюс - меньше классов.
Минус - всё тот же из п. 2, правда, тут будет немного проще...
(UPD: файл удалён, потому как архив почему-то оказался испорчен...)
Игры пока нет. Просто перемещение по карте, остальные существа перемещаются рандомно, убивать нельзя, предметов нету... 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 раз.
Re: Моя попытка
Я у себя с предметами использую путь 3.
Причем так: считываем ИД класса, создаем класс (есть массив соответствия ИД и классов, не знаю можно ли такое сделать в Яве), потом вызываем полиморфный метод класса, который считывает остальное.
У базового класса TItem этот метод считает имя, картинку, ну еще какие-то общие для всех параметры. У унаследованного класса TWeapon этот метод вызовет родительский (т.е. TItem) и потом считает еще урон, точность и т.д.
Причем так: считываем ИД класса, создаем класс (есть массив соответствия ИД и классов, не знаю можно ли такое сделать в Яве), потом вызываем полиморфный метод класса, который считывает остальное.
У базового класса TItem этот метод считает имя, картинку, ну еще какие-то общие для всех параметры. У унаследованного класса TWeapon этот метод вызовет родительский (т.е. TItem) и потом считает еще урон, точность и т.д.
Re: Моя попытка
Я голосую за первый Путь :3
Что у него за меньшая гибкость по твоему?
Что у него за меньшая гибкость по твоему?
Re: Моя попытка
Могу точно перечислить минусы первого метода, т.к. им и пошел:
1) Избыточные данные (пример: для поушенов приходится хранить сведения о дамаге, арморе, материалах, бонусов и т.д., которые относятся к оружию, броне).
2) Разрастаются функции по работе с предметами (switch ТипПредмета ...).
3) Из-за 2 - сложнее вводить новые типы предметов и модернизировать существующие, а также добавлять новые свойства.
Newman, не вводи сразу большое количество предметов в игру, добавляй постепенно, по-ходу увидишь где ты пошел не в том направлении, и перепишешь, если что - не так.
1) Избыточные данные (пример: для поушенов приходится хранить сведения о дамаге, арморе, материалах, бонусов и т.д., которые относятся к оружию, броне).
2) Разрастаются функции по работе с предметами (switch ТипПредмета ...).
3) Из-за 2 - сложнее вводить новые типы предметов и модернизировать существующие, а также добавлять новые свойства.
Newman, не вводи сразу большое количество предметов в игру, добавляй постепенно, по-ходу увидишь где ты пошел не в том направлении, и перепишешь, если что - не так.
Re: Моя попытка
Toth, c первым пунктом согласен.
Насчёт второго - код в любом случае разрастётся, в остальных случаях за счёт других классов.
А вот вводить новые типы предметов в этом методе как раз-то легче.
Например, у нас есть тип "Сапоги" и мы хотим добавить тип "Шлем". Просто добавляем в функцию cItem::Equip() проверку на новый тип, чтобы он экипировался в слот головы. В других методов для этого надо было бы создавать полностью новый класс, заполнять с нуля все его переменные и методы(включая cHelmet::Equip()).
Насчёт второго - код в любом случае разрастётся, в остальных случаях за счёт других классов.
А вот вводить новые типы предметов в этом методе как раз-то легче.
Например, у нас есть тип "Сапоги" и мы хотим добавить тип "Шлем". Просто добавляем в функцию cItem::Equip() проверку на новый тип, чтобы он экипировался в слот головы. В других методов для этого надо было бы создавать полностью новый класс, заполнять с нуля все его переменные и методы(включая cHelmet::Equip()).
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Моя попытка
Я прекрасно себя чувствую с 1. Ну и плюс для каждого предмета своя функция использования.
Айв кнгенгах Йог-Сотот
Re: Моя попытка
Можно тут подробнее.Ну и плюс для каждого предмета своя функция использования.
- Maelstrom
- Мастер
- Сообщения: 2062
- Зарегистрирован: 26 ноя 2006, 14:19
- Откуда: г. Усть-Кирдык
- Контактная информация:
Re: Моя попытка
В VB есть CallByName - вызов процедуры по строке с её именем. Вот у каждого предмета есть параметр "функция использования". В других языках, вроде, можно тоже как-то ссылку на функцию сделать.
Айв кнгенгах Йог-Сотот
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 43 гостя