1、增加胡牌的处理方式

2、优化胡牌的业务逻辑
3、增加胡牌的配置方式
This commit is contained in:
贝密游戏
2017-12-29 13:22:56 +08:00
parent 717f1f40fa
commit eb91b92b58
3 changed files with 63 additions and 19 deletions

View File

@@ -262,6 +262,17 @@ public class BMDataContext {
}
}
public enum MaJiangWinType{
TUI,
RIVER,
END,
LOST;
public String toString(){
return super.toString().toLowerCase() ;
}
}
public enum PVActionEnum{
INCOME, //
CONSUME,

View File

@@ -525,27 +525,41 @@ public class GameEngine {
}else if(!StringUtils.isBlank(action) && action.equals(BMDataContext.PlayerAction.HU.toString())){ //判断下是不是 真的胡了 ,避免外挂乱发的数据
Action playerAction = new Action(userid , action , card);
player.getActions().add(playerAction) ;
GamePlayway gamePlayway = (GamePlayway) CacheHelper.getSystemCacheBean().getCacheObject(gameRoom.getPlayway(), gameRoom.getOrgi()) ;
/**
* 记录胡牌的相关信息,推倒胡 | 血战 | 血流
* 不同的胡牌方式,处理流程不同,推倒胡,直接进入结束牌局 血战:当前玩家结束牌局,血流:继续进行,下一个玩家
*/
board.setNextplayer(new NextPlayer(userid , false));
actionEvent.setTarget(board.getLast().getUserid());
/**
* 用于客户端播放 胡牌的 动画 点胡 和 自摸 ,播放不同的动画效果
*/
ActionTaskUtils.sendEvent("selectaction", actionEvent , gameRoom);
CacheHelper.getBoardCacheBean().put(gameRoom.getId() , board, gameRoom.getOrgi()); //更新缓存数据
/**
* 胡牌方式 从 Playway 配置中读取 可选的 胡牌方式 有 推倒胡 | 血战 | 血流
* 根据 配置读取 牌局结束的配置规则 如果是推倒胡,则直接进入结算 如果是血战,则胡了以后 继续往下进行
* 如果是 血战到底则继续往下走可以多次胡牌当期Player记录相关的胡牌信息
*/
board.playcards(board, gameRoom, player, orgi);
if(gamePlayway.getWintype().equals(BMDataContext.MaJiangWinType.TUI.toString())){ //推倒胡
GameUtils.getGame(gameRoom.getPlayway() , orgi).change(gameRoom , BeiMiGameEvent.ALLCARDS.toString() , 0); //打完牌了,通知结算
}else{ //血战到底
if(gamePlayway.getWintype().equals(BMDataContext.MaJiangWinType.END.toString())){ //标记当前玩家的状态 是 已结束
player.setEnd(true);
}
player.setHu(true); //标记已经胡了
/**
* 当前 Player打上标记已经胡牌了杠碰吃就不会再有了
*/
/**
* 下一个玩家出牌
*/
player = board.nextPlayer(board.index(player.getPlayuser())) ;
/**
* 记录胡牌的相关信息,推倒胡 | 血战 | 血流
*/
board.setNextplayer(new NextPlayer(player.getPlayuser() , false));
actionEvent.setTarget(board.getLast().getUserid());
/**
* 用于客户端播放 胡牌的 动画 点胡 和 自摸 ,播放不同的动画效果
*/
ActionTaskUtils.sendEvent("selectaction", actionEvent , gameRoom);
CacheHelper.getBoardCacheBean().put(gameRoom.getId() , board, gameRoom.getOrgi()); //更新缓存数据
/**
* 杠了以后, 从 当前 牌的 最后一张开始抓牌
*/
board.dealRequest(gameRoom, board, orgi , true , player.getPlayuser());
}
}
}
}

View File

@@ -27,6 +27,9 @@ public class Player implements Message,java.io.Serializable , Cloneable{
private boolean recatch ; //补抢
private int deskcards ; //剩下多少张牌
private boolean hu ; //已经胡过牌了
private boolean end ; //血战的时候,标记 结束
private String command ;
private boolean selected ; //已经选择 花色
@@ -165,4 +168,20 @@ public class Player implements Message,java.io.Serializable , Cloneable{
public void setCommand(String command) {
this.command = command;
}
public boolean isHu() {
return hu;
}
public void setHu(boolean hu) {
this.hu = hu;
}
public boolean isEnd() {
return end;
}
public void setEnd(boolean end) {
this.end = end;
}
}