Re: Эрланг для задачи: бесконечное пространство для игры в крестики-нолики.

173 views
Skip to first unread message

Yuri Zhloba

unread,
Jan 29, 2013, 5:17:25 AM1/29/13
to erlang-...@googlegroups.com
не очень подходит, но сделать можно. Состояние в таком случае нужно
хранить в ETS

Yuri Zhloba

unread,
Jan 29, 2013, 5:18:39 AM1/29/13
to erlang-...@googlegroups.com
состояние поля в ets, состояния игроков можно хранить в процессах игроков

29 января 2013 г., 13:17 пользователь Yuri Zhloba <yzh4...@gmail.com> написал:
> не очень подходит, но сделать можно. Состояние в таком случае нужно
> хранить в ETS



--
Yuri Zhloba

skype: yzh44yzh
jabber: yzh4...@gmail.com
phone: +375 44 793 33 73
site: http://yzh44yzh.com

Paul Peregud

unread,
Jan 29, 2013, 5:22:00 AM1/29/13
to erlang-...@googlegroups.com



2013/1/29 ivan kuznetsov <flo...@gmail.com>
Всем привет! 

Я только начинаю вникать в суть эрланга и пытаюсь понять, насколько он подходит для моих задач. А задача такова: 
1) игровое пространство состоит из клеток, каждая из которых должна иметь одно из  2-х состояний: пустая (0) или заполненная каким-либо цветом (#0xFABC12, например).
2) пустая клетка (0) может изменить своё состояние в любое возможное заполненное состояние, заполненная клетка уже не может изменять своего состояния (функция makeMove(X, Y, Color))
3) клиент может запросить состояние области игрового поля вокруг одной клетки (функция getFieldState(X,Y, Radius))
Чтобы делать выборку по двум координатам воспользуйтесь R-Tree или чем-то похожим.
4) если информации о запрошенных в getFieldState  клетках ещё нет в игровом пространстве, то они создаются как пустые (0).
нет смысла хранить нули - это состояние по умолчанию.
5) все ходы (makeMove(X, Y, Color)) совершаются в реальном времени множеством клиентов одновременно, и информация об изменениях передаются между всеми заинтересованными клиентами (т.е. изменения в той области, где клиент последний раз сделал getFieldState(X,Y, Radius)) в реальном времени + всякие проверки валидности действий(ограничение 1 ход в секунду, например) и получения наград по некоторым условиям
6) у каждого клиента есть его состояние, которое может меняться (количество очков, другие награды и т.д.)

Насколько такая задача подходит для эрланга? Как (где?) лучше хранить игровое пространство? Состояния игроков?
Прошу прощения, если пропустил что-то важное. Спасибо.

--
--
Страница рассылки: http://groups.google.com/group/erlang-russian
Новости: http://erlanger.ru
Чат: xmpp://erl...@conference.jabber.ru
Чат для оффтопа: xmpp://erlang...@conference.jabber.ru
Правила, действующие в чате и рассылке: http://erlanger.ru/ru/erlang-at-conference-jabber-ru
 
Написать письмо: erlang-...@googlegroups.com
Отписаться: erlang-russia...@googlegroups.com
---
Вы получили это сообщение, поскольку подписаны на группу Erlang по-русски.
 
Чтобы отказаться от подписки на эту группу и перестать получать из нее сообщения, отправьте электронное письмо на адрес erlang-russia...@googlegroups.com.
Подробнее о функциях можно узнать на странице https://groups.google.com/groups/opt_out.
 
 



--
Best regards,
Paul Peregud
+48602112091

Petr Kozorezov

unread,
Jan 29, 2013, 7:17:13 AM1/29/13
to erlang-...@googlegroups.com
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫). О©╫сё
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ =).


On 1/29/13 1:50 PM, ivan kuznetsov wrote:
> О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫!
>
> О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫:
> 1) О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫ 2-О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: О©╫О©╫О©╫О©╫О©╫О©╫ (0) О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫-О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫ (#0xFABC12, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫).
> 2) О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (0) О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫оё О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫ makeMove(X, Y, Color))
> 3) О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫О©╫О©╫О©╫О©╫О©╫О©╫ getFieldState(X,Y, Radius))
> 4) О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ getFieldState О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫щё О©╫О©╫О©╫ О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ (0).
> 5) О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ (makeMove(X, Y, Color)) О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ (О©╫.О©╫.
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫ getFieldState(X,Y, Radius)) О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ + О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫(О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 1 О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫) О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> 6) О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> (О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫.О©╫.)
>
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫ (О©╫О©╫О©╫?) О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫? О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫?
> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫-О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
> --
> --
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: http://groups.google.com/group/erlang-russian
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫: http://erlanger.ru
> О©╫О©╫О©╫: xmpp://erl...@conference.jabber.ru
> О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫: xmpp://erlang...@conference.jabber.ru
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
> http://erlanger.ru/ru/erlang-at-conference-jabber-ru
>
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫: erlang-...@googlegroups.com
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫: erlang-russia...@googlegroups.com
> ---
> О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ Erlang О©╫О©╫-О©╫О©╫О©╫О©╫О©╫О©╫.
>
> О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫
> erlang-russia...@googlegroups.com.
> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> https://groups.google.com/groups/opt_out.
>
>

Yuri Zhloba

unread,
Jan 29, 2013, 7:21:50 AM1/29/13
to erlang-...@googlegroups.com
Erlang хорош, когда данные в разных потоках изолированы друг от друга.
А если нужно расшаривать на каждого клиента, то тут преимущества
Erlang потеряются. Его модель многопоточности на такую задачу не
ложится.

Maxim Sokhatsky

unread,
Jan 29, 2013, 7:24:31 AM1/29/13
to erlang-...@googlegroups.com
Сдесь дело в не в эрланге уже а в обеспечении глобал стейта.
Нужно уже использовать riak, VoltDB для MMORPG или что-то другое нужно смотреть по задаче. Для этой конкретной задачи пойдет любой распределенный CA стораж.

> Date: Tue, 29 Jan 2013 15:21:50 +0300
> Subject: Re: Эрланг для задачи: бесконечное пространство для игры в крестики-нолики.
> From: yzh4...@gmail.com
> To: erlang-...@googlegroups.com

ivan kuznetsov

unread,
Jan 30, 2013, 2:30:41 AM1/30/13
to erlang-...@googlegroups.com
Спасибо всем за ответы, стало намного яснее!

Иван.

Alexey Eremikihin

unread,
Feb 1, 2013, 3:18:35 AM2/1/13
to erlang-...@googlegroups.com
Возможно, это не ответит ни на один из ваших вопросов, но вот тут есть
похожий проект
https://github.com/Tremax/eTicTacToe

Для меня в нём был интересен способ задания стейта - два списка
координат - крестики и нолики соответственно.
Вторая интересность - использование http keep alive соединения-для игры.

On 29/01/13 13:50, ivan kuznetsov wrote:
> Всем привет!
>
> Я только начинаю вникать в суть эрланга и пытаюсь понять, насколько он
> подходит для моих задач. А задача такова:
> 1) игровое пространство состоит из клеток, каждая из которых должна
> иметь одно из 2-х состояний: пустая (0) или заполненная каким-либо
> цветом (#0xFABC12, например).
> 2) пустая клетка (0) может изменить своё состояние в любое возможное
> заполненное состояние, заполненная клетка уже не может изменять своего
> состояния (функция makeMove(X, Y, Color))
> 3) клиент может запросить состояние области игрового поля вокруг одной
> клетки (функция getFieldState(X,Y, Radius))
> 4) если информации о запрошенных в getFieldState клетках ещё нет в
> игровом пространстве, то они создаются как пустые (0).
> 5) все ходы (makeMove(X, Y, Color)) совершаются в реальном времени
> множеством клиентов одновременно, и информация об
> изменениях передаются между всеми заинтересованными клиентами (т.е.
> изменения в той области, где клиент последний раз
> сделал getFieldState(X,Y, Radius)) в реальном времени + всякие
> проверки валидности действий(ограничение 1 ход в секунду, например) и
> получения наград по некоторым условиям
> 6) у каждого клиента есть его состояние, которое может меняться
> (количество очков, другие награды и т.д.)
>
> Насколько такая задача подходит для эрланга? Как (где?) лучше хранить
> игровое пространство? Состояния игроков?
> Прошу прощения, если пропустил что-то важное. Спасибо.
Reply all
Reply to author
Forward
0 new messages