2013-02-13 2 views
-1

Я разрабатываю простую шахматную игру в java и хочу добавить сеть (модель клиента и сервера) в
. Один игрок находится на стороне сервера, а другой - на стороне клиента. Прямо сейчас я hava server.java client.java и game.java.Java сетевой дизайн игры

game.java включен как на стороне сервера, так и на стороне клиента (у каждого игрока есть игровой экземпляр). Моя проблема в том, что я не знаю, когда отправлять данные между двумя сторонами. Я добавляю слушателя в класс игры, но серверный клиент, похоже, не может получить событие click внутри игрового класса. Один из способов заключается в том, что я использую ожидание, чтобы постоянно проверять, есть ли обновление. Но есть ли способ проверить обновление, не используя ожидание?

+0

Подумайте, как матч в стиле пинг-понга. Вы отправляете данные (ping) на сервер, когда хотите отправить информацию, они отправляют данные назад (понг), когда они хотят отправить вам информацию. – Makoto

+0

Стандартный способ помощи SO, чтобы решить что-то вроде этого, - это сначала использовать Google, написать код, а затем при запуске, опубликовать код в SO ... Btw, подумайте об использовании некоторой готовой библиотеки, такой как некоторая реализация XMLRPC, вместо того, чтобы катиться ваш собственный, если это не упражнение по программированию в сети. – hyde

ответ

0

В этом post приведен пример кода о том, как писать сервер и клиент и принимать несколько запросов.

1

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

+1

Я думаю, что он создает личность против системной игры. – basiljames

0

В принципе, вам нужно настроить какой-то «токен», который диктует, какой игрок может двигаться. Игрок с токеном - единственный игрок, который может сделать действительный ход и отправит эти данные другому игроку вместе с токеном. Первый игрок затем будет переведен в состояние ожидания ...

Игрок без токена будет ожидать ответа от другого игрока. Это можно легко установить, просто прочитав входной поток сокета.

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

У меня был бы механизм обратного вызова от вашего «сетевого движка», который уведомлял «игровой движок» о сетевых событиях, таких как «движение получено», «отказ сети» и т. Д.

У меня был бы простой метод в «сетевом движке», который позволил бы мне отправить данные перемещения назад другому игроку. Если правильно закодировано, «сетевой движок» может блокировать запросы от «игрового движка», пока игроки не перейдут на ход. Точно так же вы можете иметь чеки, чтобы определить текущее состояние игроков.

Только некоторые случайные мысли: P

+0

Reaaaaally ценить ур хороший ответ. Но, как я уже сказал, как узнать, когда отправить токен? Как класс сервера знает, что в классе игры есть движение? Есть ли механизм прослушивания? – Cherish

+0

Нет. В принципе, как я уже сказал. Одна сторона ожидала, что что-то будет записано в сокет. Пока он ждет, вы считаете, что игрок неактивен. Когда активный игрок что-то пишет в сокет, тогда получит неактивный игрок.Если я получу какое-то время, я сделаю простой пример ... – MadProgrammer

Смежные вопросы