catpad: (Default)
[personal profile] catpad

Уже очень давно жду, не могу дождаться, игру Spore.

А тем временем у меня появилась идея игры, которая немного напоминает Spore, но при этом вполне может быть запрограммирована очень небольшими силами. Игра эта - некая смесь Second Life, Core Wars, клеточного автомата, Википедии и Твиттера. (Звучит безумно, я понимаю).

Название игры Third Life образовано так: Conway's Life + Second Life = Third Life.



Идея ещё далеко не до конца продумана, но в первом приближении её можно описать так:

На бесконечном двухмерном поле, разделённом на клетки, живут точки. (Всё это, конечно, web-based, так что любой пользователь, зашедший на сайт, видит поле и может принимать участие в игре).

Точки создаются пользователями, которые дают им имена. Кроме того, пользователи создают множество различных "поведений", которые описываются на некоем примитивном языке с помощью набора изначально заданных basic commands. Все поведения хранятся в единой базе данных, которую можно редактировать, то есть "поведение" - это как бы статья в Википедии - любой пользователь может всегда изменить поведение, но все версии сохраняются.

Кроме того, у точек есть "эмоции" (которые можно обозначать разными цветами). "Эмоции" тоже создаются пользователями и хранятся в базе данных эмоций.

Эмоции влияют на поведения, то есть поведение может меняться под воздействием текущей эмоции, а сами эмоции меняются в зависимости от контекста. Контекст - это внешние обстоятельства: встреча с другой точкой, разговор с соседней точкой, эмоция или поведение соседней точки и т.п.

Точки могут вести блог (нечто вроде Твиттера), где они коротко описывают происходящие с ними события. Таким образом, пользователи, могут следить за точками как самом поле, так и просто читая их "блог".
(Комическое расширение идеи - социальная сеть точек, где у каждой точки есть страница в Фейсбуке, и друзья-точки, которые повстречались на поле).

Идея "поведений" и "эмоций" в общих чертах такова. Изначально задан набор из нескольких примитивных команд (например, random walk, stay, go to, set emotion, say, blog). Поведения можно составлять из примитивных команд и из других поведений, постепенно создавая сложные, многоступенчатые поведения. Чтобы все точки не вели себя одинаково, игроки могут разрешать или запрещать своим точкам пользоваться теми или иными поведениями из базы данных. Кроме того, в каждое поведение можно ввести фактор случайности.
Простое поведение можно описать, например, так (жирным шрифтом выделены ключевые слова):

behavior A:
    on meeting:
       if neighbor is happy:
         say "hello"
         blog "I've met a very happy person today named <имя соседней точки>..."
      if neighbor is angry:
         run away
         set emotion scared


Здесь:
- on meeting - это событие "встреча с другой точкой". У каждой точки есть набор событий, на которые она реагирует.
- neighbor - это обозначение соседней точки.
- happy, angry - это эмоции, которые существуют в базе данных. Сама по себе эмоция ничего не обозначает, но смысл ей придают те поведения, которые основываются на значении слова.
- say - это основная команда, которая просто выводит на экран данные слова (около произносящей их точки).
- blog - это основная команда, которая помещает данный текст в блог точки.
- run away - может быть командой, составленной из более примитивного набора go + направление движения + скорость.
- set emotion - это основная команда, которая меняет эмоцию (и цвет) точки.

Заметим также, что переключение эмоции может служить триггером к произведению какого-то нового дейтствия. Например, set emotion scared, может вызвать следующее:

on my emotion set to scared:
    sleep 5 hours


где sleep - это ещё какое-то поведение, описанное в базе данных.

Из нескольких поведений можно составлять ещё более сложные поведения, например:

behavior ABC:
    if my emotion is sad:
       use behavior A
   if my emotion is cool:
      use behavior B
   else:
      use behavior C


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

Избежать совсем уж хаотичного и непредсказуемого поведения должен помочь "эффект Википедии": коллективный разум пользователей должен изменять или удалять нерациональное поведение. Таким образом, семантика эмоций и поведений должна постепенно возникать из постоянно уточняемой базы данных. Очень важно подчеркнуть, что изначально заданный набор основных команд должен быть как можно более примитивным.

Мы получаем некий клеточный автомат, которые подчиняется очень сложным правилам (в отличие от обычного клеточного автомата). Кроме того, правила эти постоянно уточняются пользователями (то есть, "автомат" разрешает вмешательство извне), а также этот автомат умеет рассказывать наблюдателям о происходящих событиях человеческим языком.
Можно даже сказать, что симбиоз клеточного автомата с пользователями постепенно создаёт семантическую сеть, которая этим автоматом и управляет.

Проблема, которую я здесь сразу вижу, такова: очень сложно, если вообще возможно, реализовать действительно интересное поведение на основе единственного значимого события в жизни точки - то есть, на встречах с другими точками. Для того, чтобы разнообразить жизнь точек, нужны ещё и объекты другого мира, а именно - предметы, поселения и, возможно, деньги. Тогда точки могут обмениваться предметами (которые также влияют на их поведение), строить города и дома (закрашивать области доски разными цветами и давать им названия), а также предлагать друг другу работу и платить друг другу деньги, на которые, в свою очередь, можно покупать предметы, дома и земли.
Опять же, всё это должно быть не заранее задано, а постепенно вноситься пользователями в базу данных. Всё, что здесь требуется - это несколько новых примитивных команд, например: build, create, name, give, take.
Но всё равно, такое расширение очень усложняет игру.

В общем, вот такая идея. Буду рад любым мыслям по этому поводу.

 

Date: 2008-06-12 04:23 am (UTC)
From: [identity profile] kalvado.livejournal.com
Ну чтобы разнообразить можно добавить параметр типа везучести (который случайно меняется), и соответственно случайные плюсы и минусы - хотя бы того же настроения (и запись в блоге - мне сегодня повезло/ой бли-ин)..

Date: 2008-06-12 06:58 am (UTC)
From: [identity profile] thedimka.livejournal.com
всё путём кроме идеи с "примитивным языком"
- слишком сложно.
надо просто сделать кучу разных опций с чекбоксами и позволять их включать и тогда разные их комбинации будут задавать поведение.
если таких обций штук 20-30, то вариантов будет очень много.
а с учётом что ещё и соседние точки будут влиять друг на друга, то тогда вариатов будет ещё больше, особенно если влиять может несколько точек сразу.

Date: 2008-06-12 07:11 am (UTC)
From: [identity profile] catpad.livejournal.com
По-моему, управлять таким GUI куда сложней, чем написать две строчки на этом языке. Но это, смотря на какую аудиторию нацеливаться, конечно.

Date: 2008-06-12 07:17 am (UTC)
From: [identity profile] thedimka.livejournal.com
ну можно сделать чтобы пользователь сам мог выбрать как это делать.
но только язык нельзя

Date: 2008-06-12 07:21 pm (UTC)
From: [identity profile] fairplay.livejournal.com
Да-да, я тоже считаю, что язык совсем не страшно, успех тех же Core War внушает оптимизм по этому поводу.

Date: 2008-06-13 09:33 am (UTC)
From: [identity profile] thedimka.livejournal.com
с днём родженья Миш!
я тебе тут мальнькую штучку нарисовал
http://setupmac.com/images2/hbcatpad.mov

Date: 2008-06-13 12:09 pm (UTC)
From: [identity profile] catpad.livejournal.com
Ой, спасибо Котодимыч, отличная вещь!
Приезжай давай скорей в гости.

Date: 2008-06-12 07:37 am (UTC)
From: [identity profile] catpad.livejournal.com
Хе-хе,
ну что-то вроде этого.

Date: 2008-06-12 07:44 am (UTC)
From: [identity profile] gianthare.livejournal.com
Надо долго разрабатывать и гонять всухую, чтобы понять, выйдет ли из этого что-нибудь.
Или наоборот сделать кривой прототип на чем-нибудь вроде Лиспа, чтобы можно было язык не придумывать пока, а проверить, что в нем должно быть. Только все равно это все для программистов.
Кстати, неужели ты в этот Спор будешь играть? Все равно лучше ְAOE ничего нет. Я вот думаю, не купить ли Арьке.

Date: 2008-06-12 07:54 am (UTC)
From: [identity profile] catpad.livejournal.com
Да этот язык в принципе очень просто придумать (я вот почти уже придумал), и сделать его можно за 2-3 дня. Тут самое сложное - это сама идея, конечно же. Пока что я не понимаю, что тут ещё нужно.

Буду играть в Спор, обязательно - во всяком случае, пока не пойму, что это ерунда.
Я согласен, что лучше АОЕ ничего не было и нет, только мне играть не с кем. Если у вас дома два компьютера - купи конечно же. Сейчас его, правда, уже вряд ли найдёшь, но скачать где-нибудь можно.

Date: 2008-06-12 07:57 am (UTC)
From: [identity profile] gianthare.livejournal.com
Невозможно понять, чего в языке не хватает, пока его не позапускаешь и не посмотришь, что получается. Вот я тебе сразу скажу - если точка не может реагировать (или ты об это не написал, просто) на то, что другая точка говорит, то этот say абсолютно бессмыслен.

Date: 2008-06-12 08:03 am (UTC)
From: [identity profile] catpad.livejournal.com
Не совсем, он нужен для того, чтобы его содержимое поместить в блог и вывести на экран - должен же быть хоть какой-то внешний output, иначе ты ничего не увидишь, кроме метания точек по экрану.
А чтобы точка реагировала на смысл слов - ну, тут мне тебе не нужно объяснять, чем это пахнет.

Date: 2008-06-12 08:08 am (UTC)
From: [identity profile] gianthare.livejournal.com
Много маленьких Элиз
Так у тебя же есть отдельно say и blog.

Date: 2008-06-12 08:14 am (UTC)
From: [identity profile] catpad.livejournal.com
Ага, Элизы, разговаривающие друг с другом. Печальное зрелище!

Date: 2008-06-12 07:35 pm (UTC)
From: [identity profile] fairplay.livejournal.com
Ну и хорошо бы ввести смертность и кроссбридинг, с обменом "генетической" информацией (ближайший кандидат на роль гена это элементарное правило поведения). Возможно, в результате эволюции, в популяции и так не останется хаотичных моделей, без нашего вмешательства.

Date: 2008-06-13 07:58 am (UTC)
From: [identity profile] catpad.livejournal.com
Да, я про всё это уже думал. Правда, тогда суть немного меняется - вместо "социальной сети" точек, управляемой людьми, получается какой-то автомат на основе генетического алгоритма.

Date: 2008-06-16 01:42 pm (UTC)
From: [identity profile] kukuk.livejournal.com
а прикольно :)

только героями надо делать не точки, ну или придумать как сделать точки симпатичными :)
и обязательно уже в базовой модели какие-то параметры, которые можно качать, пусть даже статистические, а не влияющие на дальнейший прогресс
ну типа: моя точка распугала сегодня 100 других точек (я стремлюсь отыгрывать хищника)
или моя точка сегодня подружилась с 10 точками (я социализируюсь) и тд

Date: 2008-06-16 02:09 pm (UTC)
From: [identity profile] zelych.livejournal.com
Совершенно случайно пролистывал на днях вот это: http://benfry.com/organic/thesis-0522d.pdf
Там есть глава Properties of Organic Systems. Пока читал её, возникло желание повозиться с моделированием организмов.
Только у меня задумка немного в другую сторону была, хотелось взять язык, в котором можно гарантировать необходимые свойства ботов. Т.е. написание бота может стать нетривиальной задачей (а может и нет). Зато среда, в которой боты будут жить, получится максимально простой в реализации.

Date: 2008-06-20 11:26 am (UTC)
From: [identity profile] zelych.livejournal.com
Я тут прикинул, если писать на хаскелле и на хаскелоидов же в качестве целевой аудитории ориентироваться, то рабочий прототип можно уложить пару сотен строчек.

Бота можно описать такой функцией:
bot
  :: Serializable memory 
-- состояние текущей и соседних клеток, боты которые их занимают и т.п.
  => Environment
-- состояние бота, которым управляет система (типа жизни, инвентаря, скилов)
  -> BotState
-- user defined состояние бота, тут можно запоминать свои предыдущие действия и их последствия
  -> memory
-- случайное число, источник рандомности
  -> Int
-- что бот решил делать на этом шаге + новое состояние памяти
  -> (BotAction, memory)


Дружественные боты могут друг с другом общаться: либо прямым доступом к user defined состоянию, либо через сообщения в BotAction. Т.е. можно создавать команды.

Бонусы такие:
- игроки получают в распоряжение выразительный язык для описания поведения ботов;
- при этом (теоретически) можно получить гарантии того, что боты ничего деструктивного с системой сделать не смогут (надо только подумать, что делать c unsafePerformIO);
- очень быстро можно написать прототип и постепенно дорабатывать его.

Самое сложное придумать хороший геймплей.
А самое интересное -- написать способный держать кучу ботов движок на хаскелле.

Date: 2008-06-20 11:14 pm (UTC)
From: [identity profile] catpad.livejournal.com
Выглядит интересно. Я Хаскелл практически не знаю, так что мне сложно оценить. Но может быть, опишете идею в [livejournal.com profile] coding4fun_ru ?

Date: 2008-06-23 08:41 am (UTC)
From: [identity profile] zelych.livejournal.com
Не думаю, что в coding4fun_ru оценят такое ограничение языка.
Я попробую сначала накидать немного кода, что бы было что предложить, а потом напишу.

Date: 2008-07-14 07:20 pm (UTC)
From: [identity profile] zelych.livejournal.com
Похожую игру уже сделали, называется icfpcontest 2008. Только там социализации нехватает.
Page generated Jun. 21st, 2025 02:53 am
Powered by Dreamwidth Studios