Разработка сетевого Rogue-Like

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

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

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 23 май 2008, 23:05

Asesino писал(а):(если я правильно прочитал первый пост) это будет всё-таки просто мультиплеерный рогалик, а не ММОРПГ :)
Вообще, это будет продукт математического моделирования с применением механизмов Марковских Процессов

Аватара пользователя
reincarnation
Сообщения: 33
Зарегистрирован: 25 ноя 2006, 22:24
Откуда: Москва

Сообщение reincarnation » 25 май 2008, 11:41

quasist писал(а):
Asesino писал(а):(если я правильно прочитал первый пост) это будет всё-таки просто мультиплеерный рогалик, а не ММОРПГ :)
Вообще, это будет продукт математического моделирования с применением механизмов Марковских Процессов
Это уже более интересно, но менее понятно. :) Как марковские цепи с рогаликами у вас связаны?

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 25 май 2008, 22:59

reincarnation писал(а): Это уже более интересно, но менее понятно. :) Как марковские цепи с рогаликами у вас связаны?
Когда я начал объяснять это своему научному руководителю(профессор мат анализа), то он устроил всей группе контрольную по марковским процессам :)
Речь идёт о вероятности перехода чего-то из одного состояния в другое. Это описывается матрицей (NхN квадратной стохастической): в строчку/столбик вероятности перехода из данного состояния(их N) в одно из N других.
Такими матрицами будет описано на сервере поведение монстры, системы спавна, генератора уроней и.т.д.

Плюсы - конечный алгоритм и простота редактирования :)

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 25 май 2008, 23:29

quasist писал(а):
reincarnation писал(а): Это уже более интересно, но менее понятно. :) Как марковские цепи с рогаликами у вас связаны?
Такими матрицами будет описано на сервере поведение монстры, системы спавна, генератора уроней и.т.д.

Плюсы - конечный алгоритм и простота редактирования :)
Интересно, честно говоря. С особенным удовольствием я бы почитал про применение цепей Маркова для генерации уровней, потому что лично мне не совсем понятно, что в таком случае будет считаться состоянием.
Dump the screen? [y/n]

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 26 май 2008, 03:00

Максим Кич писал(а):Интересно, честно говоря. С особенным удовольствием я бы почитал про применение цепей Маркова для генерации уровней, потому что лично мне не совсем понятно, что в таком случае будет считаться состоянием.
К примеру у системы "фрагмента" генератора 4 состояния
0-рисует корридор по направлению
1-поворот корридора на 90градусов влево
2-поворот корридора нп 90градусов вправо
3-поставить дверь или декорацию

имеется матрица(вероятности переходов в другие состояния в строке)

30% 20% 20% 30% -рисует корридор по направлению
80% 0% 0% 20% -поворот корридора на 90градусов влево
60% 0% 20% 20% -поворот корридора нп 90градусов вправо
30% 35% 35% 0% -поставить дверь или декорацию

И дать этому шагов 20...

Надеюсь в процессе написания диплома, у меня появются более впечатляющее нароботки.

Asesino
Сообщения: 94
Зарегистрирован: 03 май 2007, 15:20

Сообщение Asesino » 27 май 2008, 14:18

Хе-хе, копаясь на форуме TIGSource, нашёл платформенную игрушку (в разработке), в которой уровни генерятся с помощью тех самых Markov Chains :) Вот здесь.
Последний раз редактировалось Asesino 27 май 2008, 16:34, всего редактировалось 1 раз.

Аватара пользователя
reincarnation
Сообщения: 33
Зарегистрирован: 25 ноя 2006, 22:24
Откуда: Москва

Сообщение reincarnation » 27 май 2008, 15:35

quasist писал(а):
reincarnation писал(а): Это уже более интересно, но менее понятно. :) Как марковские цепи с рогаликами у вас связаны?
Когда я начал объяснять это своему научному руководителю(профессор мат анализа), то он устроил всей группе контрольную по марковским процессам :)
Речь идёт о вероятности перехода чего-то из одного состояния в другое. Это описывается матрицей (NхN квадратной стохастической): в строчку/столбик вероятности перехода из данного состояния(их N) в одно из N других.
Такими матрицами будет описано на сервере поведение монстры, системы спавна, генератора уроней и.т.д.

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

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 27 май 2008, 19:05

reincarnation писал(а):
quasist писал(а):
reincarnation писал(а): Это уже более интересно, но менее понятно. :) Как марковские цепи с рогаликами у вас связаны?
Когда я начал объяснять это своему научному руководителю(профессор мат анализа), то он устроил всей группе контрольную по марковским процессам :)
Речь идёт о вероятности перехода чего-то из одного состояния в другое. Это описывается матрицей (NхN квадратной стохастической): в строчку/столбик вероятности перехода из данного состояния(их N) в одно из N других.
Такими матрицами будет описано на сервере поведение монстры, системы спавна, генератора уроней и.т.д.

Плюсы - конечный алгоритм и простота редактирования :)
Я правильно понимаю, что в случае, например, поведения монстров, изменение состояния будет происходить в зависимости от внешних(по отношению к монстру) воздействий, например, ударили его или нет, есть ли рядом другие монстры и т.п.? В этом случае мы получаем скорее не марковскую цепь, а недетерминированный конечный автомат.
Смотря, что принимать за "время"(ему не обязательно быть непрерывным). И "внешние взаимодействия" можно описать как изменения коофициентов матрицы(они тоже могут меняться с течением времени).
Вероятности в матрице AI могут быть заданы функционально, скажем, от числа врагов, которых монстр видит, от здоровья монстра и.т.д.
Это звучит тока страшно.

Аватара пользователя
reincarnation
Сообщения: 33
Зарегистрирован: 25 ноя 2006, 22:24
Откуда: Москва

Сообщение reincarnation » 27 май 2008, 23:18

quasist писал(а):
reincarnation писал(а):
quasist писал(а): Когда я начал объяснять это своему научному руководителю(профессор мат анализа), то он устроил всей группе контрольную по марковским процессам :)
Речь идёт о вероятности перехода чего-то из одного состояния в другое. Это описывается матрицей (NхN квадратной стохастической): в строчку/столбик вероятности перехода из данного состояния(их N) в одно из N других.
Такими матрицами будет описано на сервере поведение монстры, системы спавна, генератора уроней и.т.д.

Плюсы - конечный алгоритм и простота редактирования :)
Я правильно понимаю, что в случае, например, поведения монстров, изменение состояния будет происходить в зависимости от внешних(по отношению к монстру) воздействий, например, ударили его или нет, есть ли рядом другие монстры и т.п.? В этом случае мы получаем скорее не марковскую цепь, а недетерминированный конечный автомат.
Смотря, что принимать за "время"(ему не обязательно быть непрерывным). И "внешние взаимодействия" можно описать как изменения коофициентов матрицы(они тоже могут меняться с течением времени).
Вероятности в матрице AI могут быть заданы функционально, скажем, от числа врагов, которых монстр видит, от здоровья монстра и.т.д.
Это звучит тока страшно.
Это не страшно, я просто говорю, что есть более подходящая модель происходящего.

Без формул, недерминированным конечным автоматом называется автомат, на вход которого в дискретном времени поступают сигналы из некоторого конечного алфавита(в данном случае внешние раздражители). Автомат в каждый момент времени находится в некотором состоянии из конечного списка. Соответственно, выход(дальнейшее поведение) и состояние, в которое перейдет автомат на следующем шаге, определяется по входному сигналу и текущему состоянию автомата. Для недерминированного автомата это происходит недетерминированно, т.е. для каждого входного символа и каждого текущего состояния есть возможные пары (выход, новое состояние) с присвоенными им вероятностями.

На roguelikedevelopment.org, помнится, были статьи про "State Machine AI", это по идее то же самое, но без вероятностей, поведение на каждом шаге детерминированно.

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 28 май 2008, 07:35

reincarnation писал(а):Без формул, недерминированным конечным автоматом называется автомат, на вход которого в дискретном времени поступают сигналы из некоторого конечного алфавита(в данном случае внешние раздражители). Автомат в каждый момент времени находится в некотором состоянии из конечного списка. Соответственно, выход(дальнейшее поведение) и состояние, в которое перейдет автомат на следующем шаге, определяется по входному сигналу и текущему состоянию автомата. Для недерминированного автомата это происходит недетерминированно, т.е. для каждого входного символа и каждого текущего состояния есть возможные пары (выход, новое состояние) с присвоенными им вероятностями.

На roguelikedevelopment.org, помнится, были статьи про "State Machine AI", это по идее то же самое, но без вероятностей, поведение на каждом шаге детерминированно.
Да хоть машиной Тьюринга всё в своём проекте реализуй. Цитировать статью из курса теории алгоритмов - не самое нужное в разработке рогуелайков. Что ты имеешь в виду тогда под недетерменированым поведением на каждом шаге?(или ты привинтил к своему компу реальный генератор чисел)


У меня дипломная работа про марковские големы... :) ...процессы, рогуелайк значит на них и будет :)

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 02 июн 2008, 17:28

Ни что не успокаивает посреди Сессии, как программирование :)

Сегодня дошёл до очерезной идеи. Поскоку игроку приходит вся информация на каждый ход: всё что он видит, его координаты, сообщения, параметры игрока. То записывая их, можно потом организовать реплей. Пакет одного хода занимает ~512 байт.

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 24 июн 2008, 15:34

Изображение

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 24 июн 2008, 15:56

quasist писал(а):Ни что не успокаивает посреди Сессии, как программирование :)

Сегодня дошёл до очерезной идеи. Поскоку игроку приходит вся информация на каждый ход: всё что он видит, его координаты, сообщения, параметры игрока. То записывая их, можно потом организовать реплей. Пакет одного хода занимает ~512 байт.
А если принять во внимание тот факт, что всё по-любому пляшет от двух факторов:
1. Значение RNG
2. Ввода игрока
то, на каждый ход требуется максимум 2 байта (код клавиатуры - 1 байт, плюс по биту на состояния shift, ctrl и alt). Плюс, начальное значение RNG (или несколько таких значений, если для каких-то целей используется несколько разных генераторов, что, имхо, как минимум странно). Кстати, всюду, где мне удалось расковыряться с записью демок используется именно такая схема.
Dump the screen? [y/n]

Аватара пользователя
Aerton
Сообщения: 503
Зарегистрирован: 11 авг 2007, 02:58
Откуда: Новосибирск
Контактная информация:

Сообщение Aerton » 24 июн 2008, 18:01

Максим Кич писал(а):
quasist писал(а):Кстати, всюду, где мне удалось расковыряться с записью демок используется именно такая схема.
Только если очень осторожно использовать float, т.к. повторные вычисления могут различаться. Хотя идеально работает в играх где только int.

Аватара пользователя
quasist
Сообщения: 68
Зарегистрирован: 20 апр 2008, 11:19
Контактная информация:

Сообщение quasist » 25 июн 2008, 01:42

Максим Кич писал(а):А если принять во внимание тот факт, что всё по-любому пляшет от двух факторов:
1. Значение RNG
2. Ввода игрока
то, на каждый ход требуется максимум 2 байта (код клавиатуры - 1 байт, плюс по биту на состояния shift, ctrl и alt). Плюс, начальное значение RNG (или несколько таких значений, если для каких-то целей используется несколько разных генераторов, что, имхо, как минимум странно). Кстати, всюду, где мне удалось расковыряться с записью демок используется именно такая схема.
Это скорее про исходящий трафик, который обычно для реплея не нужен. Ход игрока будет определятся индеском умения(скилла, действия) и "заканчиваться" направлением.
Никакие shift, ctrl и alt у меня использоваться не будут.

Даже если сделать так, чтобы всё генерилось(одинаковое в реплее и в игре)и ходы были по 2 байта, то возникает проблема "апгрейда" самого генератора, когда старые реплеи станут не совместимыми.

КТОМУ ЖЕ! (тока щас дошло) КАК ГЕНЕРАТОР СЛУЧАЙНЫХ ЧИСЕЛ ВОСПРОИЗВЕДЁТ В РЕПЛЕЕ ДЕЙСТВИЯ ДРУГИХ ИГРОКОВ ИМЕЯ ВСЕГО 2 БАЙТА??? :)

Ответить

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

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