Вниз  Совершенный код
- 11.03.2014 / 00:25
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
web_demon, не, там отдельно по модулям сделано.
__________________
 let live
- 11.03.2014 / 10:14
DominaN
  Пользователь

DominaN 
Сейчас: Offline
aNNiMON, Предположительно классы CClient, CServer и CMessage, методы sendMessage на клиенте и сервере соответственно.
- 11.03.2014 / 18:12
Oak
  Пользователь

Oak 
Сейчас: Offline
DominaN, я думаю, он хотел большей конкретики =)
__________________
 Эль Презеденте
- 11.03.2014 / 18:35
Koenig
  Модератор форума

Koenig 
Сейчас: Offline
aNNiMON, если по нормальному то да, несколько классов, сервер и клиент и сам класс игры который работает с объектами сервера и клиента
можно обсервер замутить
http://www.php.net/manual/en/class.splobserver.php
__________________
 Магистр Мёда
- 11.03.2014 / 18:58
Oak
  Пользователь

Oak 
Сейчас: Offline
Koenig, мне кажется, или ты про обсервер в каждой второй теме пишешь?

В ООП популярен так называемый "контекст", в котором собраны ссылки на всякие разные синглтоновые сущности как то: класс работы с сетью (сервер/контекст), объектное дерево игровых сущностей (например, массив объектов), класс работы с базой и тд.

По сети обычно передают "сообщения". Парадигму сообщений вообще можно развить в более абстрактную методику "СОК" ("Сообщения-Объекты-Компоненты", не стоит гуглить, это я так назвал), о ней на хабре писали.
__________________
 Эль Презеденте
- 11.03.2014 / 19:16
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Пока сделал state-машиной.

В идеале хотел бы видеть такую логику:
Класс Server:
  1. sendInitialInfo();
  2. while (!game.isOver()) {
  3.    sendMove(); // отправляем клиенту ход сервера
  4.    receiveMove(); // получаем ход оппонента
  5. }

Класс Client:
  1. receiveInitialInfo(); // получаем инфу и создаём игру
  2. while (!game.isOver()) {
  3.    receiveMove(); // получаем ход оппонента
  4.    sendMove(); // отправляем серверу свой ход
  5. }

Если брать только эти два класса, то всё логично работает. Но вот на деле sendMove должна дождаться окончания хода игрока и уж потом отсылать данные.
В общем есть два "параллельных мира" - клиент/сервер, которые я привёл и сам класс игрового процесса и отрисовки. Вот нужно по-умному как-то их связать.
__________________
 let live
- 11.03.2014 / 19:20
Oak
  Пользователь

Oak 
Сейчас: Offline
aNNiMON, а почему бы не сделать Handler-ы? Обязательно сетевую логику в цикл заключать?
__________________
 Эль Презеденте
- 11.03.2014 / 19:25
ProstoDimaO47
  Пользователь

ProstoDimaO47 
Сейчас: Offline
aNNiMON,
  1. if (isMoveCompleted) { //Закончен ход. Клавиша Ок или -7
  2. sendMove();
  3. }
  4. while (opponentMoveCompleted==false) { //Отдельная переменная
  5. drawString("Ждите")
  6. }
  7. receiveMove();
Как-то так :)

Изменено ProstoDimaO47 (11.03 / 19:25) (всего 1 раз)
- 11.03.2014 / 19:26
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
Oak, везде рекомендуют классы Server/Client отдельным потоком делать, то что я привёл как раз из метода run(). Хотя хэндлерами хорошая идея, ровно как и обсервер.

ProstoDimaO47, твой метод больше подходит для реализации в одном классе, а я как раз хочу разделить на два.
__________________
 let live

Изменено aNNiMON (11.03 / 19:29) (всего 1 раз)
- 11.03.2014 / 19:42
Oak
  Пользователь

Oak 
Сейчас: Offline
aNNiMON, поток все равно нужен будет, но не в нем же вызывать блокирующие операции!
__________________
 Эль Презеденте
Наверх  Всего сообщений: 233
Фильтровать сообщения
Поиск по теме
Файлы топика (7)