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;
}
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;
}
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);
}
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);
}
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;
}
Aggregations