From eb91b92b58dcaa6f081808ea7cbec84324e5dd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B4=9D=E5=AF=86=E6=B8=B8=E6=88=8F?= Date: Fri, 29 Dec 2017 13:22:56 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E8=83=A1=E7=89=8C?= =?UTF-8?q?=E7=9A=84=E5=A4=84=E7=90=86=E6=96=B9=E5=BC=8F=202=E3=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=83=A1=E7=89=8C=E7=9A=84=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E9=80=BB=E8=BE=91=203=E3=80=81=E5=A2=9E=E5=8A=A0=E8=83=A1?= =?UTF-8?q?=E7=89=8C=E7=9A=84=E9=85=8D=E7=BD=AE=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/beimi/core/BMDataContext.java | 11 ++++ .../beimi/core/engine/game/GameEngine.java | 52 ++++++++++++------- .../com/beimi/util/rules/model/Player.java | 19 +++++++ 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/beimi/core/BMDataContext.java b/src/main/java/com/beimi/core/BMDataContext.java index 4be6669..967f9f8 100644 --- a/src/main/java/com/beimi/core/BMDataContext.java +++ b/src/main/java/com/beimi/core/BMDataContext.java @@ -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, diff --git a/src/main/java/com/beimi/core/engine/game/GameEngine.java b/src/main/java/com/beimi/core/engine/game/GameEngine.java index d95f5c7..533a408 100644 --- a/src/main/java/com/beimi/core/engine/game/GameEngine.java +++ b/src/main/java/com/beimi/core/engine/game/GameEngine.java @@ -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()); + } } } } diff --git a/src/main/java/com/beimi/util/rules/model/Player.java b/src/main/java/com/beimi/util/rules/model/Player.java index a64bf74..a1350a1 100644 --- a/src/main/java/com/beimi/util/rules/model/Player.java +++ b/src/main/java/com/beimi/util/rules/model/Player.java @@ -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; + } }