Как получить обновление JButton для всех клиентов, подключенных к серверу? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть проект java, над которым я работаю, где я создал многопользовательскую игру Ludo (код отвратителен, но работает). Игра подключается к серверу, и на основе ввода локального клиента (который представляет собой кнопку) игра затем перемещает эту игровую статуэтку Ludo в место, которое должно быть для всех клиентов. Это отлично работает. Вот код для этого (в методе run () моего потока, который прослушивает выходные данные сервера):

switch(temp_currentTurn) {
                  case 0:
                     if(temp_greenCounter == 1){
                        green1.setBounds(greenArrX.get(currX), greenArrY.get(currY), size.width, size.height);
                     }
                     if(temp_greenCounter == 2){
                        green2.setBounds(greenArrX.get(currX), greenArrY.get(currY), size.width, size.height);
                     }
                     if(temp_greenCounter == 3){
                        green3.setBounds(greenArrX.get(currX), greenArrY.get(currY), size.width, size.height);
                     }
                     if(temp_greenCounter == 4){
                        green4.setBounds(greenArrX.get(currX), greenArrY.get(currY), size.width, size.height);
                     }
                     break;
                  case 1:
                     if(temp_yellowCounter == 1){
                        yellow1.setBounds(yellowArrX.get(currX), yellowArrY.get(currY), size.width, size.height);
                     }
                     if(temp_yellowCounter == 2){
                        yellow2.setBounds(yellowArrX.get(currX), yellowArrY.get(currY), size.width, size.height);
                     }
                     if(temp_yellowCounter == 3){
                        yellow3.setBounds(yellowArrX.get(currX), yellowArrY.get(currY), size.width, size.height);
                     }
                     if(temp_yellowCounter == 4){
                        yellow4.setBounds(yellowArrX.get(currX), yellowArrY.get(currY), size.width, size.height);
                     }
                     break;
                  case 2:
                     if(temp_redCounter == 1){
                        red1.setBounds(redArrX.get(currX), redArrY.get(currY), size.width, size.height);
                     }
                     if(temp_redCounter == 2){
                        red2.setBounds(redArrX.get(currX), redArrY.get(currY), size.width, size.height);
                     }
                     if(temp_redCounter == 3){
                        red3.setBounds(redArrX.get(currX), redArrY.get(currY), size.width, size.height);
                     }
                     if(temp_redCounter == 4){
                        red4.setBounds(redArrX.get(currX), redArrY.get(currY), size.width, size.height);
                     }
                     break;
                  case 3:
                     if(temp_blueCounter == 1){
                        blue1.setBounds(blueArrX.get(currX), blueArrY.get(currY), size.width, size.height);
                     }
                     if(temp_blueCounter == 2){
                        blue2.setBounds(blueArrX.get(currX), blueArrY.get(currY), size.width, size.height);
                     }
                     if(temp_blueCounter == 3){
                        blue3.setBounds(blueArrX.get(currX), blueArrY.get(currY), size.width, size.height);
                     }
                     if(temp_blueCounter == 4){
                        blue4.setBounds(blueArrX.get(currX), blueArrY.get(currY), size.width, size.height);
                     }
                     break;


               }
               repaint();

Фигурка устанавливается на основе оператора switch (чья она очередь) и фигурки перемещается на основе координат X и Y, которые он получает. Тем не менее, для каждого игрока, когда нажимается кнопка, кнопки обновляются только локально, например:

greenDie.setEnabled(false);
yellowDie.setEnabled(true);

Нечто похожее для других кнопок, только с добавленной логикой c, которая отлично работает локально для сколько игроков играют.

Мой вопрос в том, что я пытался поместить ту же логику c в часть выполнения моего кода, но она не обновляет кнопки для каждого игрока. Как я могу обновить кнопки для каждого подключенного игрока, а не только локально?

1 Ответ

0 голосов
/ 27 апреля 2020

Нет проблем с запросом сохранить все логи c локально.

Сервер может действовать только как хранилище. Думайте об этом как об отдельном классе, давайте назовем его сервером. java.

Этот класс имеет кнопку атрибута и 2 метода, getButton () и setButton (кнопка).

Игрок, после локального обновления своей кнопки, теперь будет вызывать setButton (localPlayerButton) на сервере. java. Все остальные игроки затем установят свое значение localPlayerButton для getButton (), вызываемого на сервере. java, чтобы они все обновлялись.

Все логи c в игре по-прежнему происходят на стороне клиента, вы просто используете сервер для хранения. Кроме того, вы можете использовать базу данных для хранения значений для кнопки.

...