fix(game): 修复游戏输赢逻辑

- 修改了玩家下注、跟注、加注等操作的逻辑
- 优化了胜利者和失败者的分数计算方法- 调整了底池分数的分配方式
- 修复了一些潜在的bug和性能问题
master
苗庆帅 2025-06-20 20:06:13 +08:00
parent 31f994343b
commit 0274f58a32
19 changed files with 132 additions and 61 deletions

View File

@ -37,6 +37,7 @@ public class RoomReloadState extends StateBase<Room>{
case ActionEvent.EVENT_START_GAME: case ActionEvent.EVENT_START_GAME:
owner.stateMachine.changeState(Global.getState(RoomStartGameState.class)); owner.stateMachine.changeState(Global.getState(RoomStartGameState.class));
break; break;
} }
} }
} }

View File

@ -24,6 +24,7 @@ public class RoomWaitState extends StateBase<Room> {
} }
owner.stateMachine.changeState(Global.getState(RoomStartGameState.class)); owner.stateMachine.changeState(Global.getState(RoomStartGameState.class));
break; break;
} }
} }

View File

@ -1,5 +1,5 @@
#Generated by Maven #Generated by Maven
#Thu Jun 19 21:25:43 CST 2025 #Fri Jun 20 16:08:37 CST 2025
version=1.0.0 version=1.0.0
groupId=com.game groupId=com.game
artifactId=game_common artifactId=game_common

View File

@ -1,37 +1,37 @@
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\GroupPublisherService.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\EventController.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomWaitState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\Global.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\Hp.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\state\StateBase.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerInitState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerReadyState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\Room.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\GPSUtil.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\BasePlayBack.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerPauseState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerEndState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomInitState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerPopupState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\JoinRoomData.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\Player.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomDestoryGameState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\GameController.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\GameInterceptor.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\manager\SessionManager.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\MainServer.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\Timer.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\manager\SessionManager.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\manager\RoomManager.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\GroupPublisherService.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomDestoryGameState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\BasePlayBack.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\Router.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomEndState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerWaitState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\Util.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\GPSUtil.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerWaitState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerSpectatorState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\Router.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\state\StateMachine.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerSpectatorState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\RoomDismiss.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\Player.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomEndState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerPopupState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\ActionEvent.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerReloadState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\Util.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\GameController.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\Constant.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\Constant.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\JoinRoomData.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\state\StateMachine.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\state\StateBase.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomWaitState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\EventController.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\ActionEvent.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerReloadState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerEndState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\Global.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\Hp.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomReloadState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomReloadState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\GameInterceptor.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\Timer.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\MainServer.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\manager\RoomManager.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomInitState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomStartGameState.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerReadyState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\Room.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerPauseState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\RoomDismiss.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\data\Score.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\data\Score.java
D:\aga\suoha_6.19\suoha_server\libs\game_common\src\main\java\com\game\room\state\RoomStartGameState.java D:\aga\suoha_6.20\suoha_server\libs\game_common\src\main\java\com\game\player\state\PlayerInitState.java

View File

@ -87,6 +87,9 @@ public class EXRoom extends Room {
public EXPlayer win; public EXPlayer win;
//胜利者id
public int winer_playerid = 0;
public EXRoom(String roomid, Map<String, String> redis_room_map) { public EXRoom(String roomid, Map<String, String> redis_room_map) {
super(roomid, redis_room_map); super(roomid, redis_room_map);
@ -135,7 +138,7 @@ public class EXRoom extends Room {
// this.callScore = 0; // this.callScore = 0;
this.callCount = 0; this.callCount = 0;
this.sidePot = 0; this.sidePot = 0;
this.win = null; // this.win = null;
this.card = new RoomCard(this, 2, maxPlayers); this.card = new RoomCard(this, 2, maxPlayers);
super.clear(); super.clear();
@ -143,7 +146,8 @@ public class EXRoom extends Room {
public void clearEx() { public void clearEx() {
this.activeSeat = 0; this.activeSeat = 0;
this.win = null; System.out.println(this.win);
// this.win = null;
} }
public ITObject getReloadInfo(Player player) { public ITObject getReloadInfo(Player player) {

View File

@ -52,6 +52,7 @@ public class EXPlayerBetState extends StateBase<EXPlayer> {
room.callScore = owner.betScore; room.callScore = owner.betScore;
// 追加操作,广播给客户端 // 追加操作,广播给客户端
TObject param = new TObject(); TObject param = new TObject();
System.out.println("111:"+param);
if (owner.seat >= room.playerMapByPlaying.size()) { if (owner.seat >= room.playerMapByPlaying.size()) {
param.putInt("seat", 1); param.putInt("seat", 1);
// 发牌 // 发牌
@ -137,10 +138,27 @@ public class EXPlayerBetState extends StateBase<EXPlayer> {
System.out.println("当前用户 "+owner.playerid); System.out.println("当前用户 "+owner.playerid);
System.out.println("当前用户的总下注分数:"+owner.totalLostScore); System.out.println("当前用户的总下注分数:"+owner.totalLostScore);
if (room.win!=null){
if (room.win.playerid==owner.playerid){
owner.totalLostScore =owner.totalLostScore- owner.betScore;
// 扣除下注分数
owner.lostScore =owner.totalLostScore;
}else {
owner.totalLostScore += owner.betScore;
// 扣除下注分数
owner.lostScore =owner.betScore;
}
}else {
owner.totalLostScore += owner.betScore;
// 扣除下注分数
owner.lostScore =owner.betScore;
}
owner.totalLostScore += owner.betScore;
// 扣除下注分数
owner.lostScore =owner.betScore;
// room.callScore = 0; // room.callScore = 0;
room.sidePot += owner.betScore; room.sidePot += owner.betScore;
@ -154,7 +172,16 @@ public class EXPlayerBetState extends StateBase<EXPlayer> {
for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) { for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
System.out.println("基础分数:"+player.baseScore); System.out.println("基础分数:"+player.baseScore);
param.putInt("seat_" + player.seat, player.baseScore - player.totalLostScore); if (room.win!=null){
if (room.win.playerid==player.playerid){
param.putInt("seat_" + player.seat, player.totalLostScore);
}else {
param.putInt("seat_" + player.seat, 0- player.totalLostScore);
}
}else {
param.putInt("seat_" + player.seat, 0- player.totalLostScore);
}
} }
room.broadCastToClient(0, Config.GAME_EVT_RESULT, param); room.broadCastToClient(0, Config.GAME_EVT_RESULT, param);

View File

@ -135,10 +135,24 @@ public class EXPlayerCallState extends StateBase<EXPlayer> {
public void addSidePot(EXPlayer owner) { public void addSidePot(EXPlayer owner) {
EXRoom room = owner.getRoom(); EXRoom room = owner.getRoom();
System.out.println("当前需跟注分数"+room.callScore); System.out.println("当前需跟注分数"+room.callScore);
// 扣除下注分数 if (room.win!=null){
owner.lostScore = room.callScore; if (room.win.playerid==owner.playerid){
//计算总下注分数 // 扣除下注分数
owner.totalLostScore += owner.lostScore; owner.lostScore = room.callScore;
owner.totalLostScore =owner.totalLostScore- room.callScore;
}else {
// 扣除下注分数
owner.lostScore = room.callScore;
//计算总下注分数
owner.totalLostScore += owner.lostScore;
}
}else {
// 扣除下注分数
owner.lostScore = room.callScore;
//计算总下注分数
owner.totalLostScore += owner.lostScore;
}
// owner.totalLostScore += room.callScore; // owner.totalLostScore += room.callScore;
@ -152,7 +166,15 @@ public class EXPlayerCallState extends StateBase<EXPlayer> {
param.putInt("sidePot", room.sidePot); param.putInt("sidePot", room.sidePot);
for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) { for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
param.putInt("seat_" + player.seat, player.baseScore - player.totalLostScore); if (room.win!=null){
if (room.win.playerid==player.playerid){
param.putInt("seat_" + player.seat, player.totalLostScore);
}else {
param.putInt("seat_" + player.seat, 0- player.totalLostScore);
}
}else {
param.putInt("seat_" + player.seat, 0- player.totalLostScore);
}
} }
room.broadCastToClient(0, Config.GAME_EVT_RESULT, param); room.broadCastToClient(0, Config.GAME_EVT_RESULT, param);
} }

View File

@ -119,13 +119,22 @@ public class EXPlayerRaiseState extends StateBase<EXPlayer> {
// 扣除下注分数 // 扣除下注分数
// owner.lostScore = room.raiseScore-owner.needScore; // owner.lostScore = room.raiseScore-owner.needScore;
if (room.win!=null){
if (room.win.playerid==owner.playerid){
owner.lostScore = room.raiseScore;
owner.totalLostScore =owner.totalLostScore- owner.lostScore;
owner.lostScore =room.raiseScore; }else {
owner.lostScore =room.raiseScore;
System.out.println("增加的owner.lostScore"+owner.lostScore);
owner.totalLostScore += owner.lostScore;
}
}else {
owner.lostScore =room.raiseScore;
System.out.println("增加的owner.lostScore"+owner.lostScore);
owner.totalLostScore += owner.lostScore;
}
System.out.println("增加的owner.lostScore"+owner.lostScore);
owner.totalLostScore += owner.lostScore;
// owner.totalLostScore += room.raiseScore;
// room.sidePot += Math.abs(owner.lostScore); // room.sidePot += Math.abs(owner.lostScore);
@ -157,7 +166,16 @@ public class EXPlayerRaiseState extends StateBase<EXPlayer> {
for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) { for (Entry<Integer, Player> entry : room.playerMapBySeat.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
param.putInt("seat_" + player.seat, player.baseScore - player.totalLostScore); if (room.win!=null){
if (room.win.playerid==player.playerid){
param.putInt("seat_" + player.seat, player.totalLostScore);
}else {
param.putInt("seat_" + player.seat, player.baseScore - player.totalLostScore);
}
}else {
param.putInt("seat_" + player.seat, player.baseScore - player.totalLostScore);
}
} }
room.broadCastToClient(0, Config.GAME_EVT_RESULT, param); room.broadCastToClient(0, Config.GAME_EVT_RESULT, param);
} }

View File

@ -76,7 +76,7 @@ public class EXRoomDealState extends StateBase<EXRoom> {
List<Integer> actions = new ArrayList<Integer>(); List<Integer> actions = new ArrayList<Integer>();
actions.add(Integer.parseInt(Config.GAME_BET)); actions.add(Integer.parseInt(Config.GAME_BET));
actions.add(Integer.parseInt(Config.GAME_FOLD)); actions.add(Integer.parseInt(Config.GAME_FOLD));
// actions.add(Integer.parseInt(Config.GAME_CHECK)); actions.add(Integer.parseInt(Config.GAME_CHECK));
if (room.config.getInt(Config.ROOM_CONFIG_ALLIN)==1 && room.counts==2){ if (room.config.getInt(Config.ROOM_CONFIG_ALLIN)==1 && room.counts==2){
actions.add(Integer.parseInt(Config.GAME_ALL_IN)); actions.add(Integer.parseInt(Config.GAME_ALL_IN));
@ -100,8 +100,6 @@ public class EXRoomDealState extends StateBase<EXRoom> {
// 扣除底分 // 扣除底分
for (Entry<Integer, Player> entry : room.playerMapByPlaying.entrySet()) { for (Entry<Integer, Player> entry : room.playerMapByPlaying.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
// player.lostScore -= room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE);
// room.sidePot += room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE);
if (room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){ if (room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){
if (room.nextRound==1 && room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){ if (room.nextRound==1 && room.config.getInt(Config.ROOM_CONFIG_BASE_SCORE)==0){
player.totalLostScore=1; player.totalLostScore=1;

View File

@ -28,15 +28,15 @@ public void enter(EXRoom owner) {
// 遍历房间中所有玩家,清除他们的额外状态 // 遍历房间中所有玩家,清除他们的额外状态
for (Entry<Integer, Player> entry : owner.playerMapBySeat.entrySet()) { for (Entry<Integer, Player> entry : owner.playerMapBySeat.entrySet()) {
EXPlayer player = (EXPlayer) entry.getValue(); EXPlayer player = (EXPlayer) entry.getValue();
// if (owner.nextRound == owner.maxRound){
player.clearEx();
// }
player.clearEx();
} }
// 清除房间的额外状态 // 清除房间的额外状态
owner.clearEx(); owner.clearEx();
System.out.println("底池分数:"+owner.sidePot); System.out.println("底池分数:"+owner.sidePot);
//根据用户id拿用户信息
// EXPlayer player = (EXPlayer) owner.playerMapById.get(owner.owner_id);
// 开始游戏 // 开始游戏