Quellcode durchsuchen

1.解决出牌问题;2.升级优化;3.玩家信息增加头像字段

johnclot69 vor 4 Monaten
Ursprung
Commit
0387b5aa92

+ 80 - 49
incubator-game/src/main/java/com/incubator/game/room/JDGDRoom.java

@@ -406,6 +406,8 @@ public class JDGDRoom extends Room implements GRoomInterface {
             this.data.curDisCardType = null;
             this.data.passList.clear();
         }
+        // 设置当前出牌玩家
+        this.data.disCardPlayer = player;
         // 设置下一个操作玩家
         this.data.currentPlayer = this.getNextPlayer(player);
         // 广播其他3人
@@ -423,68 +425,91 @@ public class JDGDRoom extends Room implements GRoomInterface {
      */
     private void upgrade() {
         // 头游
-        Player player = this.data.result.get(0);
+        Player player = this.data.result.get(1);
         if (player == null) {
             return;
         }
-        StringBuilder builder;
-        // 头游搭档
-        for (Map.Entry<Integer, Player> entry : this.data.result.entrySet()) {
-            if (entry.getValue().getId().equals(player.data.teammateId)) {
+        // 原级牌点数
+        int oldLevelPoint = this.data.curLevelPoint;
+        StringBuilder builder = null;
+        switch (this.data.maxNum) {
+            case 2:
+                // 2人房
                 builder = new StringBuilder();
-                switch (entry.getKey()) {
-                    case 2:
-                        // 搭档2游升3级
-                        if (this.data.curLevelIndex + 3 >= JDGDUtils.levelPoint.length) {
-                            this.data.curLevelIndex = JDGDUtils.levelPoint.length;
-                        } else {
-                            this.data.curLevelIndex += 3;
-                        }
-                        builder.append("头游玩家: ").append(player.data.name)
-                                .append(", 搭档玩家: ").append(entry.getValue().data.name)
-                                .append(" 2游升3级, ");
-                        break;
-                    case 3:
-                        // 搭档3游升2级
-                        if (this.data.curLevelIndex + 2 >= JDGDUtils.levelPoint.length) {
-                            this.data.curLevelIndex = JDGDUtils.levelPoint.length;
-                        } else {
-                            this.data.curLevelIndex += 2;
-                        }
-                        builder.append("头游玩家: ").append(player.data.name)
-                                .append(", 搭档玩家: ").append(entry.getValue().data.name)
-                                .append(" 3游升2级, ");
-                        break;
-                    case 4:
-                        // 搭档末游升1级
-                        if (this.data.curLevelIndex + 1 >= JDGDUtils.levelPoint.length) {
-                            this.data.curLevelIndex = JDGDUtils.levelPoint.length;
-                        } else {
-                            this.data.curLevelIndex += 1;
-                        }
-                        builder.append("头游玩家: ").append(player.data.name)
-                                .append(", 搭档玩家: ").append(entry.getValue().data.name)
-                                .append(" 末游升1级, ");
-                        break;
+                Player temPlayer = this.data.result.getOrDefault(1, null);
+                if (temPlayer == null) {
+                    return;
                 }
-                // 原级牌点数
-                int oldLevelPoint = this.data.curLevelPoint;
+                builder.append("头游玩家: ").append(player.data.name)
+                        .append(" 升3级, ");
                 // 设置当前级牌点数
-                this.data.curLevelPoint = JDGDUtils.levelPoint[this.data.curLevelIndex];
-                logger.info(builder + "原级牌点数: {}, 当前级牌点数: {}", oldLevelPoint, this.data.curLevelPoint);
+                int index = Math.min(this.data.curLevelIndex + 3, JDGDUtils.levelPoint.length - 1);
+                this.data.curLevelPoint = JDGDUtils.levelPoint[index];
                 // 设置我方玩家级牌点数展示
-                entry.getValue().data.levelPointView[0] = this.data.curLevelPoint;
                 player.data.levelPointView[0] = this.data.curLevelPoint;
                 // 设置对方级牌点数展示
-                for (Map.Entry<Integer, Player> entry1 : this.data.result.entrySet()) {
-                    if (!entry1.getValue().getId().equals(player.getId())
-                            && !entry1.getValue().getId().equals(entry.getValue().getId())) {
-                        entry1.getValue().data.levelPointView[1] = this.data.curLevelPoint;
+                temPlayer.data.levelPointView[1] = this.data.curLevelPoint;
+                break;
+            case 4:
+                // 4人房
+                // 头游搭档
+                for (Map.Entry<Integer, Player> entry : this.data.result.entrySet()) {
+                    if (entry.getValue().getId().equals(player.data.teammateId)) {
+                        builder = new StringBuilder();
+                        switch (entry.getKey()) {
+                            case 2:
+                                // 搭档2游升3级
+                                if (this.data.curLevelIndex + 3 >= JDGDUtils.levelPoint.length) {
+                                    this.data.curLevelIndex = JDGDUtils.levelPoint.length;
+                                } else {
+                                    this.data.curLevelIndex += 3;
+                                }
+                                builder.append("头游玩家: ").append(player.data.name)
+                                        .append(", 搭档玩家: ").append(entry.getValue().data.name)
+                                        .append(" 2游升3级, ");
+                                break;
+                            case 3:
+                                // 搭档3游升2级
+                                if (this.data.curLevelIndex + 2 >= JDGDUtils.levelPoint.length) {
+                                    this.data.curLevelIndex = JDGDUtils.levelPoint.length;
+                                } else {
+                                    this.data.curLevelIndex += 2;
+                                }
+                                builder.append("头游玩家: ").append(player.data.name)
+                                        .append(", 搭档玩家: ").append(entry.getValue().data.name)
+                                        .append(" 3游升2级, ");
+                                break;
+                            case 4:
+                                // 搭档末游升1级
+                                if (this.data.curLevelIndex + 1 >= JDGDUtils.levelPoint.length) {
+                                    this.data.curLevelIndex = JDGDUtils.levelPoint.length;
+                                } else {
+                                    this.data.curLevelIndex += 1;
+                                }
+                                builder.append("头游玩家: ").append(player.data.name)
+                                        .append(", 搭档玩家: ").append(entry.getValue().data.name)
+                                        .append(" 末游升1级, ");
+                                break;
+                        }
+                        // 设置当前级牌点数
+                        int _index = Math.min(this.data.curLevelIndex + 3, JDGDUtils.levelPoint.length - 1);
+                        this.data.curLevelPoint = JDGDUtils.levelPoint[_index];
+                        // 设置我方玩家级牌点数展示
+                        entry.getValue().data.levelPointView[0] = this.data.curLevelPoint;
+                        player.data.levelPointView[0] = this.data.curLevelPoint;
+                        // 设置对方级牌点数展示
+                        for (Map.Entry<Integer, Player> entry1 : this.data.result.entrySet()) {
+                            if (!entry1.getValue().getId().equals(player.getId())
+                                    && !entry1.getValue().getId().equals(entry.getValue().getId())) {
+                                entry1.getValue().data.levelPointView[1] = this.data.curLevelPoint;
+                            }
+                        }
+                        break;
                     }
                 }
                 break;
-            }
         }
+        logger.info("{}原级牌点数: {}, 当前级牌点数: {}", builder != null ? builder : "", oldLevelPoint, this.data.curLevelPoint);
     }
 
     /**
@@ -492,11 +517,17 @@ public class JDGDRoom extends Room implements GRoomInterface {
      */
     private void settlement() {
         logger.debug("牌局结算...roomId : {}", this.data.roomId);
+        // 结算信息
+        Map<String, Object> settlementData = new HashMap<>();
+        for (Map.Entry<Integer, Player> entry : this.data.result.entrySet()) {
+            settlementData.put(entry.getKey().toString(), ProtoUtil.playerRoomToMessage(this, entry.getValue(), true));
+        }
         // 广播结算
         for (Player tmPlayer : this.data.playerMap.values()) {
             if (tmPlayer != null) {
                 // 结算信息
                 Map<String, Object> data = ProtoUtil.roomToMessage(this, tmPlayer, this.data.currentPlayer);
+                data.put("settlementInfo", settlementData);
                 tmPlayer.receive(CommonProto.Cmd.GameStateChange_VALUE, data);
             }
         }

+ 1 - 1
incubator-game/src/main/java/com/incubator/game/util/ProtoUtil.java

@@ -20,6 +20,7 @@ public final class ProtoUtil {
         Map<String, Object> data = new HashMap<>();
         data.put("id", player.getId());
         data.put("name", player.data.name);
+        data.put("avatar", "https://img95.699pic.com/element/40109/0194.png_300.png");
         data.put("sex", player.data.sex);
         data.put("exp", player.data.exp);
         data.put("level", player.data.level);
@@ -52,7 +53,6 @@ public final class ProtoUtil {
         data.put("curDisCardType", room.data.curDisCardType);
         data.put("curDiscardPlayer", room.data.disCardPlayer != null ? room.data.disCardPlayer.getId() : "");
         data.put("curDiscardSex", room.data.disCardPlayer != null ? room.data.disCardPlayer.data.sex : 0);
-        data.put("settlementInfo", room.data.result);
         data.put("myInfo", playerRoomToMessage(room, player, true));
         List<Map<String, Object>> otherInfo = new ArrayList<>();
         for (Player tmPlayer : room.data.playerMap.values()) {