我如何为连接到服务器的所有客户端更新JButton?

问题描述 投票:0回答:1

我有一个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);

其他按钮也有相似之处,只是增加了逻辑,对于在场人数多少,该逻辑在本地工作得很好。

我的问题是,我尝试将相同的逻辑放入代码的运行部分,但不会更新每个播放器的按钮。如何更新每个连接的播放器的按钮,而不仅限于本地?

java multithreading server client jbutton
1个回答
0
投票

将所有逻辑保留在本地的请求没有问题。

服务器只能充当存储设备。将其视为一个单独的类,我们将其称为Server.java。

此类具有属性button以及2个方法,getButton()和setButton(Button button)。

玩家在本地更新按钮后,现在将在Server.java上调用setButton(localPlayerButton)。然后,所有其他播放器将其localPlayerButton值设置为在Server.java上调用的getButton(),以便它们都被更新。

游戏的所有逻辑仍然发生在客户端,您只是使用服务器进行存储。或者,您可以使用数据库来存储按钮的值。

© www.soinside.com 2019 - 2024. All rights reserved.