我有一个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);
其他按钮也有相似之处,只是增加了逻辑,对于在场人数多少,该逻辑在本地工作得很好。
我的问题是,我尝试将相同的逻辑放入代码的运行部分,但不会更新每个播放器的按钮。如何更新每个连接的播放器的按钮,而不仅限于本地?
将所有逻辑保留在本地的请求没有问题。
服务器只能充当存储设备。将其视为一个单独的类,我们将其称为Server.java。
此类具有属性button以及2个方法,getButton()和setButton(Button button)。
玩家在本地更新按钮后,现在将在Server.java上调用setButton(localPlayerButton)。然后,所有其他播放器将其localPlayerButton值设置为在Server.java上调用的getButton(),以便它们都被更新。
游戏的所有逻辑仍然发生在客户端,您只是使用服务器进行存储。或者,您可以使用数据库来存储按钮的值。