fix(game): 修复游戏结束逻辑并优化分数计算
- 修改了游戏结束时的分数计算逻辑,确保正确处理玩家的输赢- 优化了回放功能,增加了游戏结束后的详细结果信息- 调整了底池分数的计算方式,根据房间配置动态设置 - 修复了玩家在游戏中的总失分计算错误master
parent
83bca334ac
commit
e4e3e22a1e
|
|
@ -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<Integer, Player> 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));
|
||||
|
|
|
|||
|
|
@ -102,8 +102,6 @@ public void responseDismiss(Player player, boolean agree) {
|
|||
|
||||
// 如果所有玩家都同意,解散房间
|
||||
if (agree) {
|
||||
// // 结束房间内的游戏
|
||||
// player.room.saveMilitaryTotal(true);
|
||||
interruptTimer();
|
||||
} else {
|
||||
// 如果有玩家不同意,通知游戏控制器解散房间失败
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -119,7 +119,14 @@ 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();
|
||||
|
|
@ -127,7 +134,7 @@ public void RouterAction(Session sender, ITObject params, int gid, Player owner)
|
|||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,6 +84,8 @@ public class EXRoom extends Room {
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
public EXPlayer win;
|
||||
|
||||
public EXRoom(String roomid, Map<String, String> 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,16 +227,28 @@ public class EXRoom extends Room {
|
|||
EXMainServer.gameCtr.roomTotalResult(this, dissmiss);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endGame() {
|
||||
/**
|
||||
* 结束游戏处理
|
||||
*
|
||||
* 此方法在游戏结束时被调用,负责计算分数、记录日志、以及更新播放数据
|
||||
* 它还负责生成游戏结束后的回放信息,供玩家回顾游戏过程
|
||||
*/
|
||||
@Override
|
||||
public void endGame() {
|
||||
// 累加所有玩家的分数
|
||||
addAllScore(win);
|
||||
// 记录游戏结束的日志
|
||||
Global.logger.error("EXRoom: endGame");
|
||||
|
||||
// 将当前的播放数据转换为EXPlayBack对象
|
||||
EXPlayBack pb = (EXPlayBack) this.playBackData;
|
||||
|
||||
// 创建一个新的对象来存储游戏结束后的回放结果
|
||||
ITObject pbResult = TObject.newInstance();
|
||||
|
||||
// 创建一个数组来存储每个玩家的游戏信息
|
||||
ITArray info = new TArray();
|
||||
// 遍历所有正在玩的玩家,收集他们的座位号和分数
|
||||
for (Entry<Integer, Player> entry : playerMapByPlaying.entrySet()) {
|
||||
EXPlayer player = (EXPlayer) entry.getValue();
|
||||
ITObject obj = TObject.newInstance();
|
||||
|
|
@ -251,11 +256,17 @@ public class EXRoom extends Room {
|
|||
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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -152,8 +152,12 @@ public class EXPlayerAllInState extends StateBase<EXPlayer> {
|
|||
|
||||
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;
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ public class EXPlayerBetState extends StateBase<EXPlayer> {
|
|||
*/
|
||||
public void addSidePot(EXPlayer owner) {
|
||||
EXRoom room = owner.getRoom();
|
||||
|
||||
// 初始化每轮打出的总分数
|
||||
// for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
|
||||
// EXPlayer player = (EXPlayer) entry.getValue();
|
||||
|
|
@ -133,9 +134,11 @@ public class EXPlayerBetState extends StateBase<EXPlayer> {
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -136,11 +136,11 @@ public class EXPlayerCallState extends StateBase<EXPlayer> {
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -40,8 +40,9 @@ public class EXPlayerFoldState extends StateBase<EXPlayer> {
|
|||
if (player.fold) {
|
||||
foldCount++;
|
||||
}
|
||||
|
||||
}
|
||||
if (foldCount >= room.playerMapById.size() - 1) {
|
||||
if (foldCount >= room.playerMapById.size()-1) {
|
||||
over(room);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,11 +120,12 @@ public class EXPlayerRaiseState extends StateBase<EXPlayer> {
|
|||
// 扣除下注分数
|
||||
// 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);
|
||||
|
|
|
|||
|
|
@ -28,10 +28,39 @@ public void enter(EXRoom owner) {
|
|||
// 遍历房间中所有玩家,清除他们的额外状态
|
||||
for (Entry<Integer, Player> 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();
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue