簡體   English   中英

如何為連接到服務器的所有客戶端更新 JButton?

[英]How can I have a JButton update for all clients connected to a server?

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

其他按鈕也有類似的東西,只是增加了一些邏輯,可以在本地運行多少玩家正在玩。

我的問題是,我試圖將相同的邏輯放在代碼的運行部分中,但它不會更新每個玩家的按鈕。 如何更新每個連接的播放器的按鈕,而不僅僅是本地?

將所有邏輯保留在本地的請求沒有問題。

服務器只能充當存儲設施。 將其視為單獨的 class,我們稱之為 Server.java。

這個 class 具有屬性按鈕,以及 2 個方法,getButton() 和 setButton(Button button)。

玩家在本地更新其按鈕后,現在將調用 Server.java 上的 setButton(localPlayerButton)。 然后,所有其他玩家將他們的 localPlayerButton 值設置為在 Server.java 上調用的 getButton(),以便它們都被更新。

游戲的所有邏輯仍然發生在客戶端,您只是使用服務器進行存儲。 或者,您可以使用數據庫來存儲按鈕的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM