diff --git a/libs/game_common/src/main/java/com/game/data/Room.java b/libs/game_common/src/main/java/com/game/data/Room.java index 7227295..b479e1f 100644 --- a/libs/game_common/src/main/java/com/game/data/Room.java +++ b/libs/game_common/src/main/java/com/game/data/Room.java @@ -193,6 +193,7 @@ public class Room implements Runnable { * 1.固定抽水 : 2.浮动抽水(百分比) 倍数 times */ public ITObject hpData; + /** * 是否打开托管 */ @@ -623,7 +624,6 @@ public class Room implements Runnable { this.saveMilitaryTotal(true); } else { roomResult(); - } Global.logger.info("total: "+total); for (Entry entry : this.playerMapById.entrySet()) { @@ -640,7 +640,6 @@ public class Room implements Runnable { } Global.logger.info("total: "+total); if (total) { - this.stateMachine.changeState(Global.getState(RoomDestoryGameState.class)); } else { this.stateMachine.changeState(Global.getState(RoomEndState.class)); diff --git a/libs/game_common/src/main/java/com/game/data/RoomDismiss.java b/libs/game_common/src/main/java/com/game/data/RoomDismiss.java index e91368a..d558370 100644 --- a/libs/game_common/src/main/java/com/game/data/RoomDismiss.java +++ b/libs/game_common/src/main/java/com/game/data/RoomDismiss.java @@ -102,8 +102,6 @@ public void responseDismiss(Player player, boolean agree) { // 如果所有玩家都同意,解散房间 if (agree) { -// // 结束房间内的游戏 -// player.room.saveMilitaryTotal(true); interruptTimer(); } else { // 如果有玩家不同意,通知游戏控制器解散房间失败 diff --git a/libs/game_common/target/classes/com/game/data/Room.class b/libs/game_common/target/classes/com/game/data/Room.class index e6fe76c..056c76e 100644 Binary files a/libs/game_common/target/classes/com/game/data/Room.class and b/libs/game_common/target/classes/com/game/data/Room.class differ diff --git a/libs/game_common/target/classes/com/game/data/RoomDismiss$1.class b/libs/game_common/target/classes/com/game/data/RoomDismiss$1.class index 868ec10..dac50d0 100644 Binary files a/libs/game_common/target/classes/com/game/data/RoomDismiss$1.class and b/libs/game_common/target/classes/com/game/data/RoomDismiss$1.class differ diff --git a/libs/game_common/target/classes/com/game/data/RoomDismiss.class b/libs/game_common/target/classes/com/game/data/RoomDismiss.class index 4d8be25..490c47a 100644 Binary files a/libs/game_common/target/classes/com/game/data/RoomDismiss.class and b/libs/game_common/target/classes/com/game/data/RoomDismiss.class differ diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXGameController.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXGameController.java index 4ada2d7..c17085d 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXGameController.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXGameController.java @@ -119,15 +119,22 @@ public void RouterAction(Session sender, ITObject params, int gid, Player owner) EXPlayer player = (EXPlayer) entry.getValue(); // 如果当前玩家是胜利者,则将其总得分加上房间的边注 if (owner.win.playerid == player.playerid) { - player.score.total_score += owner.sidePot; - } + player.score.total_score +=player.totalLostScore; + if (owner.nextRound!=owner.maxRound){ + player.lostScore=player.totalLostScore; + } + }else { + if (owner.nextRound!=owner.maxRound){ + player.lostScore=0-player.totalLostScore; + } + } // 创建一个新的对象,用于存储当前玩家的信息 ITObject obj = TObject.newInstance(); // 存储玩家的座位号 obj.putInt("seat", player.seat); // 计算玩家的总得分,减去丢失的分数 player.score.total_score -= player.lostScore; - player.score.total_score -= player.lostScore; +// player.score.total_score -= player.lostScore; // 存储玩家的总得分和本轮得分 obj.putInt("score", player.score.total_score); obj.putInt("winscore", player.score.round_score); @@ -165,6 +172,7 @@ public void RouterAction(Session sender, ITObject params, int gid, Player owner) // 存储洗牌得分 mp.putInt("xipai_score", owner.xi_pai_score); // 返回包含房间结果数据的对象 + return mp; } @@ -173,6 +181,7 @@ public void RouterAction(Session sender, ITObject params, int gid, Player owner) ITObject result = getRoomResultData(owner, false); result.putInt("type", 0); owner.nextRound++; + owner.broadCastToClient(0, Config.GAME_EVT_RESULT1, result); } diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXRoom.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXRoom.java index e428b9a..af4e35d 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXRoom.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/EXRoom.java @@ -84,6 +84,8 @@ public class EXRoom extends Room { + + public EXPlayer win; public EXRoom(String roomid, Map redis_room_map) { @@ -119,15 +121,6 @@ public class EXRoom extends Room { this.config.putInt(Config.ROOM_CONFIG_BASE_SCORE, 0); } - if (this.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){ - this.sidePot = 1; - } - if (this.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==1){ - this.sidePot = 2; - } - if (this.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==2) { - this.sidePot = 5; - } // System.out.println("底注"+this.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)); // int num = this.config.getInt(Config.ROOM_CONFIG_BASE_SCORE); @@ -234,28 +227,46 @@ public class EXRoom extends Room { EXMainServer.gameCtr.roomTotalResult(this, dissmiss); } - @Override - public void endGame() { - addAllScore(win); - Global.logger.error("EXRoom: endGame"); + /** + * 结束游戏处理 + * + * 此方法在游戏结束时被调用,负责计算分数、记录日志、以及更新播放数据 + * 它还负责生成游戏结束后的回放信息,供玩家回顾游戏过程 + */ +@Override +public void endGame() { + // 累加所有玩家的分数 + addAllScore(win); + // 记录游戏结束的日志 + Global.logger.error("EXRoom: endGame"); - EXPlayBack pb = (EXPlayBack) this.playBackData; + // 将当前的播放数据转换为EXPlayBack对象 + EXPlayBack pb = (EXPlayBack) this.playBackData; - ITObject pbResult = TObject.newInstance(); + // 创建一个新的对象来存储游戏结束后的回放结果 + ITObject pbResult = TObject.newInstance(); - ITArray info = new TArray(); - for (Entry entry : playerMapByPlaying.entrySet()) { - EXPlayer player = (EXPlayer) entry.getValue(); - ITObject obj = TObject.newInstance(); - obj.putInt("seat", player.seat); - obj.putInt("score", player.score.round_score); - info.addTObject(obj); - } - pbResult.putTArray("result", info); - Global.logger.error("pbResult:" + pbResult); - pb.addResultCommand(win.seat, pbResult); + // 创建一个数组来存储每个玩家的游戏信息 + ITArray info = new TArray(); + // 遍历所有正在玩的玩家,收集他们的座位号和分数 + for (Entry entry : playerMapByPlaying.entrySet()) { + EXPlayer player = (EXPlayer) entry.getValue(); + ITObject obj = TObject.newInstance(); + obj.putInt("seat", player.seat); + obj.putInt("score", player.score.round_score); + info.addTObject(obj); + } + // 将收集到的玩家信息添加到回放结果中 + pbResult.putTArray("result", info); + // 记录回放结果的日志 + Global.logger.error("pbResult:" + pbResult); + // 在回放中添加结果命令,包括胜利者的座位号和游戏结果 + pb.addResultCommand(win.seat, pbResult); + + // 在回放中添加开始新轮游戏的命令 + pb.addNewRoundCommand(); + // 调用父类的结束游戏方法 + super.endGame(); +} - pb.addNewRoundCommand(); - super.endGame(); - } } diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerAllInState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerAllInState.java index f3d1a0b..93fa2fb 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerAllInState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerAllInState.java @@ -152,8 +152,12 @@ public class EXPlayerAllInState extends StateBase { System.out.println("all in 下注分数1:"+owner.betScore); + + owner.totalLostScore = owner.totalLostScore - 1; + owner.totalLostScore += owner.lostScore; // 扣除下注分数 - owner.lostScore = 0 - owner.betScore; + owner.lostScore = owner.betScore; + // room.callScore = 0; System.out.println("底池分数:"+room.sidePot); room.sidePot += owner.betScore; diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerBetState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerBetState.java index d27a39e..902c90f 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerBetState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerBetState.java @@ -116,6 +116,7 @@ public class EXPlayerBetState extends StateBase { */ public void addSidePot(EXPlayer owner) { EXRoom room = owner.getRoom(); + // 初始化每轮打出的总分数 // for (Entry entry : room.playerMapBySeat.entrySet()) { // EXPlayer player = (EXPlayer) entry.getValue(); @@ -133,9 +134,11 @@ public class EXPlayerBetState extends StateBase { owner.betScore=owner.betScore*2; } + owner.totalLostScore += owner.betScore; // 扣除下注分数 - owner.lostScore = owner.betScore; + owner.lostScore =owner.betScore; + // room.callScore = 0; room.sidePot += owner.betScore; room.raiseRound = 0; diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerCallState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerCallState.java index 2fe6c46..8258c3e 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerCallState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerCallState.java @@ -136,11 +136,11 @@ public class EXPlayerCallState extends StateBase { EXRoom room = owner.getRoom(); System.out.println("当前需跟注分数"+room.callScore); // 扣除下注分数 -// owner.lostScore = room.callScore-owner.needScore; + owner.lostScore = room.callScore; //计算总下注分数 -// owner.totalLostScore += owner.lostScore; + owner.totalLostScore += owner.lostScore; - owner.totalLostScore += room.callScore; +// owner.totalLostScore += room.callScore; System.out.println("当前已下注分数"+room.callScore); System.out.println("加注后需要补加的分数:owner.needScore"+owner.needScore); diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerFoldState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerFoldState.java index 1d52a54..ea4b4ba 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerFoldState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerFoldState.java @@ -40,8 +40,9 @@ public class EXPlayerFoldState extends StateBase { if (player.fold) { foldCount++; } + } - if (foldCount >= room.playerMapById.size() - 1) { + if (foldCount >= room.playerMapById.size()-1) { over(room); return; } diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerRaiseState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerRaiseState.java index 51b2e40..37bc343 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerRaiseState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/player/state/EXPlayerRaiseState.java @@ -120,11 +120,12 @@ public class EXPlayerRaiseState extends StateBase { // 扣除下注分数 // owner.lostScore = room.raiseScore-owner.needScore; + owner.lostScore =room.raiseScore; System.out.println("增加的owner.lostScore"+owner.lostScore); -// owner.totalLostScore += owner.lostScore; - owner.totalLostScore += room.raiseScore; + owner.totalLostScore += owner.lostScore; +// owner.totalLostScore += room.raiseScore; // room.sidePot += Math.abs(owner.lostScore); diff --git a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/room/state/EXRoomStartGameState.java b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/room/state/EXRoomStartGameState.java index 2a7a0a9..5c7c161 100644 --- a/puke/suoha/game_pk_suoha/src/main/java/extend/pk/room/state/EXRoomStartGameState.java +++ b/puke/suoha/game_pk_suoha/src/main/java/extend/pk/room/state/EXRoomStartGameState.java @@ -28,10 +28,39 @@ public void enter(EXRoom owner) { // 遍历房间中所有玩家,清除他们的额外状态 for (Entry entry : owner.playerMapBySeat.entrySet()) { EXPlayer player = (EXPlayer) entry.getValue(); + + if (owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){ + if (owner.nextRound==1 && owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){ + player.totalLostScore=1; + player.lostScore=-1; + } + owner.sidePot = 2; + + }else if (owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==1){ + if (owner.nextRound==1 && owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==1){ + player.totalLostScore=2; + player.lostScore=-2; + } + owner.sidePot = 4; + + }else if (owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==2) { + if (owner.nextRound==1 && owner.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==2){ + player.totalLostScore=5; + player.lostScore=-5; + } + owner.sidePot = 10; + + } + + + player.clearEx(); } // 清除房间的额外状态 owner.clearEx(); + + System.out.println("底池分数:"+owner.sidePot); + // 开始游戏 owner.startGame(); @@ -43,7 +72,7 @@ public void enter(EXRoom owner) { @Override public void toNextState(EXRoom owner) { - owner.stateMachine.changeState(Global.getState(EXRoomDealState.class)); + owner.stateMachine.changeState(Global.getState(EXRoomDealState.class)); } } diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXGameController.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXGameController.class index e5c2d95..dfb8d8e 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXGameController.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXGameController.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXRoom.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXRoom.class index 8417b80..5ee6243 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXRoom.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/EXRoom.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerAllInState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerAllInState.class index ceba6b9..d0fbd27 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerAllInState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerAllInState.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerBetState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerBetState.class index 25392d2..04193c1 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerBetState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerBetState.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerCallState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerCallState.class index a0c5e52..1880fe8 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerCallState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerCallState.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerFoldState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerFoldState.class index 1dd610b..521616f 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerFoldState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerFoldState.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerRaiseState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerRaiseState.class index abc0860..f9ff267 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerRaiseState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/player/state/EXPlayerRaiseState.class differ diff --git a/puke/suoha/game_pk_suoha/target/classes/extend/pk/room/state/EXRoomStartGameState.class b/puke/suoha/game_pk_suoha/target/classes/extend/pk/room/state/EXRoomStartGameState.class index 722db13..e47beb8 100644 Binary files a/puke/suoha/game_pk_suoha/target/classes/extend/pk/room/state/EXRoomStartGameState.class and b/puke/suoha/game_pk_suoha/target/classes/extend/pk/room/state/EXRoomStartGameState.class differ