11.03.2014 / 00:25 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| web_demon, не, там отдельно по модулям сделано.
__________________
let live |
11.03.2014 / 10:14 | |
DominaN Пользователь Сейчас: Offline
Имя: Кирилл Откуда: Смоленск Регистрация: 28.09.2011
| aNNiMON, Предположительно классы CClient, CServer и CMessage, методы sendMessage на клиенте и сервере соответственно.
|
11.03.2014 / 18:12 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| DominaN, я думаю, он хотел большей конкретики =)
__________________
Эль Презеденте |
11.03.2014 / 18:35 | |
Koenig Модератор форума Сейчас: Offline
Имя: Дмитрий Откуда: Калининград(Koenigsberg) Регистрация: 23.01.2011
| aNNiMON, если по нормальному то да, несколько классов, сервер и клиент и сам класс игры который работает с объектами сервера и клиента можно обсервер замутить http://www.php.net/manual/en/class.splobserver.php __________________
Магистр Мёда |
11.03.2014 / 18:58 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| Koenig, мне кажется, или ты про обсервер в каждой второй теме пишешь?
В ООП популярен так называемый "контекст", в котором собраны ссылки на всякие разные синглтоновые сущности как то: класс работы с сетью (сервер/контекст), объектное дерево игровых сущностей (например, массив объектов), класс работы с базой и тд.
По сети обычно передают "сообщения". Парадигму сообщений вообще можно развить в более абстрактную методику "СОК" ("Сообщения-Объекты-Компоненты", не стоит гуглить, это я так назвал), о ней на хабре писали.
__________________
Эль Презеденте |
11.03.2014 / 19:16 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Пока сделал state-машиной. В идеале хотел бы видеть такую логику: Класс Server: sendInitialInfo();
while (!game.isOver()) {
sendMove(); // отправляем клиенту ход сервера
receiveMove(); // получаем ход оппонента
}
Класс Client: receiveInitialInfo(); // получаем инфу и создаём игру
while (!game.isOver()) {
receiveMove(); // получаем ход оппонента
sendMove(); // отправляем серверу свой ход
}
Если брать только эти два класса, то всё логично работает. Но вот на деле sendMove должна дождаться окончания хода игрока и уж потом отсылать данные. В общем есть два "параллельных мира" - клиент/сервер, которые я привёл и сам класс игрового процесса и отрисовки. Вот нужно по-умному как-то их связать. __________________
let live |
11.03.2014 / 19:20 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| aNNiMON, а почему бы не сделать Handler-ы? Обязательно сетевую логику в цикл заключать?
__________________
Эль Презеденте |
11.03.2014 / 19:25 | |
ProstoDimaO47 Пользователь Сейчас: Offline
Имя: Дима Откуда: Днепродзержинск Регистрация: 05.08.2013
| aNNiMON, if (isMoveCompleted) { //Закончен ход. Клавиша Ок или -7
sendMove();
}
while (opponentMoveCompleted==false) { //Отдельная переменная
drawString("Ждите")
}
receiveMove();
Как-то так Изменено ProstoDimaO47 (11.03 / 19:25) (всего 1 раз) |
11.03.2014 / 19:26 | |
aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| Oak, везде рекомендуют классы Server/Client отдельным потоком делать, то что я привёл как раз из метода run(). Хотя хэндлерами хорошая идея, ровно как и обсервер.
ProstoDimaO47, твой метод больше подходит для реализации в одном классе, а я как раз хочу разделить на два.
__________________
let live Изменено aNNiMON (11.03 / 19:29) (всего 1 раз) |
11.03.2014 / 19:42 | |
Oak Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| aNNiMON, поток все равно нужен будет, но не в нем же вызывать блокирующие операции!
__________________
Эль Презеденте |