Search in sources :

Example 16 with ResponseVo

use of com.code.server.constant.response.ResponseVo in project summer by foxsugar.

the class RoomGuessCar method createRoom.

public static int createRoom(long userId, int chip, String gameType, String roomType) {
    // 身上的钱够不够
    if (RedisManager.getUserRedisService().getUserMoney(userId) < chip) {
        return ErrorCode.NOT_HAVE_MORE_MONEY;
    }
    RoomGuessCar roomGuessCar = new RoomGuessCar();
    roomGuessCar.personNumber = PERSONNUM;
    roomGuessCar.roomId = getRoomIdStr(genRoomId());
    roomGuessCar.createUser = userId;
    roomGuessCar.gameType = gameType;
    roomGuessCar.roomType = roomType;
    roomGuessCar.bankerId = userId;
    ServerConfig serverConfig = SpringUtil.getBean(ServerConfig.class);
    RoomManager.addRoom(roomGuessCar.roomId, "" + serverConfig.getServerId(), roomGuessCar);
    // 扣掉
    RedisManager.getUserRedisService().addUserMoney(userId, -chip);
    roomGuessCar.bankerScore = chip;
    roomGuessCar.chip = chip;
    IdWorker idWorker = new IdWorker(serverConfig.getServerId(), 0);
    roomGuessCar.setUuid(idWorker.nextId());
    MsgSender.sendMsg2Player(new ResponseVo("pokerRoomService", "createGuessRoom", roomGuessCar.toVo(userId)), userId);
    roomGuessCar.joinRoom(userId, true);
    return 0;
}
Also used : ServerConfig(com.code.server.game.poker.config.ServerConfig) IdWorker(com.code.server.util.IdWorker) ResponseVo(com.code.server.constant.response.ResponseVo)

Example 17 with ResponseVo

use of com.code.server.constant.response.ResponseVo in project summer by foxsugar.

the class GameInfoNZZ method gang.

/**
 * 杠
 *
 * @param userId
 */
public int gang(long userId, String card) {
    if (isAlreadyHu) {
        return ErrorCode.CAN_NOT_GANG;
    }
    PlayerCardsInfoNZZ playerCardsInfo = (PlayerCardsInfoNZZ) playerCardsInfos.get(userId);
    if (playerCardsInfo == null) {
        return ErrorCode.USER_ERROR;
    }
    OperateReqResp operateReqResp = new OperateReqResp();
    operateReqResp.setOperateType(OperateReqResp.type_gang);
    ResponseVo vo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OTHER_OPERATE, operateReqResp);
    if (lastOperateUserId == userId) {
        // 杠手里的牌
        if ("".equals(card)) {
            System.err.println("=======================杠牌时 没传数据========");
        }
        if (!playerCardsInfo.isCanGangThisCard(card)) {
            return ErrorCode.CAN_NOT_GANG;
        }
        int gangType = CardTypeUtil.getTypeByCard(card);
        boolean isMing = playerCardsInfo.getPengType().containsKey(gangType);
        // 自摸不吃牌
        operateReqResp.setFromUserId(userId);
        operateReqResp.setUserId(userId);
        operateReqResp.setCard(card);
        operateReqResp.setIsMing(isMing);
        // 通知所有人有杠
        MsgSender.sendMsg2Player(vo, users);
        if (isMing) {
            for (Map.Entry<Long, PlayerCardsInfoMj> entry : playerCardsInfos.entrySet()) {
                OperateResp operateResp = new OperateResp();
                // 其他玩家的处理 碰杠等 如果有加入等待列表(要等待这些玩家"过")
                if (userId != entry.getKey()) {
                    // 通知其他玩家出了什么牌 自己能有什么操作
                    PlayerCardsInfoNZZ playerOther = (PlayerCardsInfoNZZ) entry.getValue();
                    boolean isCanHu = playerOther.isCanHu_dianpao(card);
                    // 设置返回结果
                    operateResp.setCanBeOperate(false, false, false, false, isCanHu, false, false);
                    // 设置自己能做的操作
                    playerOther.setCanBeOperate(false, false, false, false, isCanHu, false, false);
                    boolean isWait = isCanHu;
                    if (isWait) {
                        add2WaitingList(entry.getKey(), isCanHu, false, false, false, false, false);
                    }
                }
                // 可能的操作
                ResponseVo OperateVo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OPERATE, operateResp);
                MsgSender.sendMsg2Player(OperateVo, entry.getKey());
            }
        }
        if (this.waitingforList.size() == 0) {
            doGang_hand(playerCardsInfo, userId, card);
        } else {
            // 排序
            compare(waitingforList);
            // 出现截杠胡
            this.beJieGangUser = userId;
            this.jieGangHuCard = card;
        }
    } else {
        if (disCard == null) {
            return ErrorCode.CAN_NOT_GANG;
        }
        boolean isCanGang = playerCardsInfo.isCanGangAddThisCard(disCard);
        if (!isCanGang) {
            return ErrorCode.CAN_NOT_GANG;
        }
        handleWait(userId, WaitDetail.gangPoint);
        lastOperateUserId = userId;
    }
    return 0;
}
Also used : ResponseVo(com.code.server.constant.response.ResponseVo)

Example 18 with ResponseVo

use of com.code.server.constant.response.ResponseVo in project summer by foxsugar.

the class GameInfoNZZ method doPeng.

protected void doPeng(PlayerCardsInfoMj playerCardsInfo, long userId) {
    playerCardsInfo.peng(disCard, lastPlayUserId);
    lastOperateUserId = userId;
    // 删除弃牌
    deleteDisCard(lastPlayUserId, disCard);
    // 通知其他玩家
    OperateReqResp operateReqResp = new OperateReqResp();
    operateReqResp.setOperateType(OperateReqResp.type_peng);
    operateReqResp.setCard(disCard);
    operateReqResp.setFromUserId(lastPlayUserId);
    operateReqResp.setUserId(userId);
    // 通知其他人
    ResponseVo vo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OTHER_OPERATE, operateReqResp);
    MsgSender.sendMsg2Player(vo, users);
    // 碰完能听,杠,不能胡
    // 多一张牌
    boolean isCanTing = playerCardsInfo.isCanTing(playerCardsInfo.cards);
    boolean isCanGang = playerCardsInfo.isHasGang();
    turnId = userId;
    // 通知客户端 操作
    OperateResp operateResp = new OperateResp();
    operateResp.setIsCanTing(isCanTing);
    operateResp.setIsCanGang(isCanGang);
    ResponseVo operateVo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OPERATE, operateResp);
    MsgSender.sendMsg2Player(operateVo, userId);
    this.disCard = null;
    // 自己将能做的处理
    playerCardsInfo.canBePeng = false;
    playerCardsInfo.canBeTing = isCanTing;
    playerCardsInfo.canBeGang = isCanGang;
    playerCardsInfo.canBeHu = false;
    resetOtherOperate(userId);
}
Also used : ResponseVo(com.code.server.constant.response.ResponseVo)

Example 19 with ResponseVo

use of com.code.server.constant.response.ResponseVo in project summer by foxsugar.

the class GameInfoNZZ method mopai.

/**
 * 摸牌
 *
 * @param userId
 */
protected void mopai(long userId, String... wz) {
    // 清楚胡牌和碰牌的限制
    noCanHuList.remove(userId);
    noCanPengList.remove(userId);
    System.err.println("摸牌===============================userId : " + userId);
    PlayerCardsInfoNZZ playerCardsInfo = (PlayerCardsInfoNZZ) playerCardsInfos.get(userId);
    if (isHuangzhuang(playerCardsInfo)) {
        handleHuangzhuang(userId);
        return;
    }
    if (playerCardsInfo.isMoreOneCard()) {
        if (wz.length > 0) {
            logger.info("======1操作后的摸牌 : " + wz[0]);
        }
        logger.info("userId : " + userId + " ===1 more one card 抓牌时多一张牌");
        logger.info("操作列表: " + playerCardsInfo.operateList.toString());
        logger.info("所有操作: " + userOperateList.toString());
    }
    // 拿出一张
    String card = getMoPaiCard(playerCardsInfo);
    // 有换牌需求
    // if (isTest && playerCardsInfo.nextNeedCard != -1) {
    // String needCard = getCardByTypeFromRemainCards(playerCardsInfo.nextNeedCard);
    // playerCardsInfo.nextNeedCard = -1;
    // if (needCard != null) {
    // card = needCard;
    // remainCards.remove(needCard);
    // } else {
    // card = remainCards.remove(0);
    // }
    // } else {
    // card = remainCards.remove(0);
    // }
    playerCardsInfo.mopai(card);
    // 
    turnId = userId;
    this.lastMoPaiUserId = userId;
    lastOperateUserId = userId;
    this.catchCard = card;
    // 把摸到的牌 推给摸牌的玩家
    int remainSize = remainCards.size();
    for (long user : users) {
        GetCardResp getCardResp = new GetCardResp();
        getCardResp.setRemainNum(remainSize);
        getCardResp.setUserId(userId);
        if (user == userId) {
            getCardResp.setCard(card);
        }
        ResponseVo responseVo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_GET_CARD, getCardResp);
        MsgSender.sendMsg2Player(responseVo, user);
        // 能做的操作全置成不能
        PlayerCardsInfoNZZ other = (PlayerCardsInfoNZZ) playerCardsInfos.get(user);
        resetCanBeOperate(other);
    }
    boolean isCanGang = playerCardsInfo.isHasGang();
    // 多一张
    boolean isCanTing = playerCardsInfo.isCanTing(playerCardsInfo.cards);
    boolean isCanHu = false;
    if (room.isHaveTing()) {
        if (playerCardsInfo.isTing) {
            isCanHu = playerCardsInfo.isCanHu_zimo(catchCard);
        }
    } else {
        isCanHu = playerCardsInfo.isCanHu_zimo(catchCard);
    }
    // 能做的操作
    playerCardsInfo.setCanBeGang(isCanGang);
    playerCardsInfo.setCanBePeng(false);
    playerCardsInfo.setCanBeHu(isCanHu);
    playerCardsInfo.setCanBeTing(isCanTing);
    OperateResp resp = new OperateResp();
    resp.setIsCanGang(isCanGang);
    resp.setIsCanHu(isCanHu);
    resp.setIsCanTing(isCanTing);
    // 回放 抓牌
    OperateReqResp operateReqResp = new OperateReqResp();
    operateReqResp.setCard(card);
    operateReqResp.setUserId(userId);
    operateReqResp.setOperateType(OperateReqResp.type_mopai);
    replay.getOperate().add(operateReqResp);
    // 可能的操作
    ResponseVo OperateResponseVo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OPERATE, resp);
    MsgSender.sendMsg2Player(OperateResponseVo, userId);
}
Also used : ResponseVo(com.code.server.constant.response.ResponseVo)

Example 20 with ResponseVo

use of com.code.server.constant.response.ResponseVo in project summer by foxsugar.

the class GameInfoNZZ method chuPai_ting.

// =====================================================
private int chuPai_ting(long userId, String card) {
    // 出牌的玩家
    PlayerCardsInfoNZZ chupaiPlayerCardsInfo = (PlayerCardsInfoNZZ) playerCardsInfos.get(userId);
    if (this.turnId != userId || isAlreadyHu) {
        return ErrorCode.CAN_NOT_PLAYCARD;
    }
    playCards.add(card);
    // 上个出牌的人
    this.lastPlayUserId = userId;
    // 上个操作的人
    lastOperateUserId = userId;
    // 出的牌
    this.disCard = card;
    // chupaiPlayerCardsInfo.chupai(card);
    // 通知其他玩家出牌信息
    PlayCardResp playCardResp = new PlayCardResp();
    playCardResp.setUserId(userId);
    playCardResp.setCard(null);
    ResponseVo vo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_PLAY_CARD, playCardResp);
    MsgSender.sendMsg2Player(vo, users);
    // 其他人的操作 全是false 听牌后什么都不能操作
    for (Map.Entry<Long, PlayerCardsInfoMj> entry : playerCardsInfos.entrySet()) {
        PlayerCardsInfoMj pci = entry.getValue();
        pci.setCanBeGang(false);
        pci.setCanBePeng(false);
        pci.setCanBeHu(false);
        pci.setCanBeTing(false);
        OperateResp operateResp = new OperateResp();
        ResponseVo OperateVo = new ResponseVo(ResponseType.SERVICE_TYPE_GAMELOGIC, ResponseType.METHOD_TYPE_OPERATE, operateResp);
        MsgSender.sendMsg2Player(OperateVo, entry.getKey());
    }
    resetCanBeOperate(chupaiPlayerCardsInfo);
    // 如果等待列表为空 就轮到下个人摸牌
    if (this.waitingforList.size() == 0) {
        pushAllPass();
        long nextId = nextTurnId(turnId);
        mopai(nextId, "听后出牌");
    } else {
        // 比较
        compare(waitingforList);
    }
    return 0;
}
Also used : ResponseVo(com.code.server.constant.response.ResponseVo)

Aggregations

ResponseVo (com.code.server.constant.response.ResponseVo)125 Club (com.code.server.db.model.Club)17 HashMap (java.util.HashMap)15 UserBean (com.code.server.constant.game.UserBean)8 IdWorker (com.code.server.util.IdWorker)8 ServerConfig (com.code.server.game.poker.config.ServerConfig)7 ArrayList (java.util.ArrayList)7 JsonNode (com.fasterxml.jackson.databind.JsonNode)6 ClubMember (com.code.server.constant.club.ClubMember)5 Charge (com.code.server.db.model.Charge)5 User (com.code.server.db.model.User)5 GameOfResult (com.code.server.constant.response.GameOfResult)4 UserOfResult (com.code.server.constant.response.UserOfResult)4 TimerNode (com.code.server.util.timer.TimerNode)4 RoomModel (com.code.server.constant.club.RoomModel)3 KafkaMsgKey (com.code.server.constant.kafka.KafkaMsgKey)3 com.code.server.game.mahjong.response (com.code.server.game.mahjong.response)3 MsgSender (com.code.server.game.room.kafka.MsgSender)3 MsgProducer (com.code.server.kafka.MsgProducer)3 Map (java.util.Map)3