2014-02-10 3 views
0

Я пытаюсь создать простую игру на Java. Я хочу закодировать сервер, который принимает несколько игроков. Тут лежит мета-игра:Многопоточный сервер с общим ресурсом

Проигрыватель подключается к серверу, чтобы сыграть в игру, и указать номер. Каждый игрок играет только одну игру. Игра только начинается или разрешается, если 4 игрока подключены. Если сумма всех игроков превышает 21, все проиграют, иначе выиграют все. После решения игры каждый игрок должен быть предупрежден, если он выиграл или проиграл.

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

+0

Что вы пытались и что именно не срабатывало так, как вы ожидали, что оно будет работать? – Philipp

+0

Я немного смущен тем, как работает параллелизм. Я мог бы сделать это с помощью кода и исправления, например, игра будет запущенными объектами со списком игроков и просто начнется/будет создана, когда у меня будет 4 игрока. После того, как игра решит, будет напечатано каждому клиенту результат. Но я действительно хочу, чтобы каждый клиент был потоком, который после ввода номера оставался заблокированным (await()), и когда все игроки вводят свои номера, будет предупреждено продолжить и распечатать результат. – Duozhasht

+1

Вы должны избегать многопоточности, когда можете. Несколько потоков приводят к взаимоблокировкам и условиям гонки, которые приводят к неясности и невозможности воспроизведения ошибок. Java предоставляет [New-IO] (http://tutorials.jenkov.com/java-nio/index.html), который позволяет обрабатывать большое количество клиентов в одном потоке. – Philipp

ответ

0

Что я понял из вашего заявления, так это то, что вам нужно точные 4 игрока, чтобы решить исход игры. каждый игрок передает номер при подключении к серверу, и ему/ей не разрешается вводить или передавать что-либо еще.

поэтому общие ресурсы являются ОБЩАЯ СУММА и КОЛИЧЕСТВО СВЯЗИ и нить подключение к серверу. Поэтому всякий раз, когда игрок запрашивает подключение к вам, запустите новый поток, и этот поток увеличит общий счет ИТОГО SUM и КОЛИЧЕСТВО СОЕДИНЕНИЯ и после увеличения также проверьте значение общей суммы и нет. соединения.

+0

Итак, в классе Game (если он существует), как он должен начинаться? Чтобы быть более конкретным, как я могу связать игрока и игру? – Duozhasht

+0

у вас может быть класс GAME, который реализует runnable, и у него есть общий способ совместного использования и запуска. Конструктор примет ввод как число и запустит этот внутренний поток. Внутренняя нить или метод запуска будут реализовывать всю логику игры. Существует еще один класс CONNECTION, который создает и запускает нить GAME. –

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