def calculate(self, request, context): """ :计算 :param request: :param context: :return: """ calculate = CalculateResult() san = MahjongUtils.get_san(request.player.handlist) if not request.player.baojiao: calculate.dui.extend(MahjongUtils.get_dui(request.player.handlist)) calculate.san.extend(san) calculate.si.extend(MahjongUtils.get_si(request.player.handlist)) else: gang = list() for s in san: temp = list() temp.extend(request.player.handlist) temp.remove(s) temp.remove(s) temp.remove(s) if 0 < len(MahjongUtils.get_hu(temp, 0)): gang.append(s) temp.append(s) temp.append(s) temp.append(s) calculate.san.extend(gang) if 1 == request.allocid: zimo = MahjongUtils.get_hu(request.player.handlist, request.rogue) calculate.zimo.extend(zimo) hu = list() for z in zimo: handlist = list() handlist.extend(request.player.handlist) handlist.append(z) if 10 != wanzhou_mahjong.getCardType( handlist, request.player.peng, request.player.gang, request.rogue): hu.append(z) calculate.hu.extend(hu) if 2 == request.allocid or 3 == request.allocid: zimo = MahjongUtils.get_hu(request.player.handlist, request.rogue) calculate.zimo.extend(zimo) calculate.hu.extend(zimo) return calculate
def baojiaoGang(self, request, context): """ :报叫杠 :param request: :param context: :return: """ gangs = Cards() si = MahjongUtils.get_si(request.player.handlist) for s in si: temp = list() temp.extend(request.player.handlist) temp.remove(s) temp.remove(s) temp.remove(s) temp.remove(s) if 0 < len(MahjongUtils.get_hu(temp, 0)): gangs.cards.append(s) temp.append(s) temp.append(s) temp.append(s) temp.append(s) for p in request.player.peng: temp = request.player.handlist if p in temp: temp.remove(p) if 0 < len(MahjongUtils.get_hu(temp, 0)): gangs.cards.append(p) temp.append(p) if 0 == len(gangs.cards) and len(request.player.handlist) % 3 == 1: san = MahjongUtils.get_san(request.player.handlist) for s in san: temp = list() temp.extend(request.player.handlist) temp.remove(s) temp.remove(s) temp.remove(s) if 0 < len(MahjongUtils.get_hu(temp, 0)): gangs.cards.append(s) temp.append(s) temp.append(s) temp.append(s) return gangs
def calculate(self, request, context): """ :计算 :param request: :param context: :return: """ calculate = CalculateResult() san = MahjongUtils.get_san(request.player.handlist) calculate.dui.extend(MahjongUtils.get_dui(request.player.handlist)) calculate.san.extend(san) calculate.si.extend(MahjongUtils.get_si(request.player.handlist)) zimo = MahjongUtils.get_hu(request.player.handlist, request.rogue) calculate.zimo.extend(zimo) calculate.hu.extend(zimo) return calculate
def settle(self, request, context): """ :结算 :param request: :param context: :return: """ logging.info("封顶") logging.info(request.fengding) logging.info("赔叫") logging.info(request.peijiao) settle = SettleResult() user_settles = {} users = {} cannothu_user = [] for user in request.player: user_settle = settle.userSettleResule.add() user_settle.userId = user.player_id user_settles.setdefault(user.player_id, user_settle) users.setdefault(user.player_id, user) cannothu_user.append(user.player_id) # 胡牌计算 for hudata in request.hudata: if hudata.huUser in cannothu_user: cannothu_user.remove(hudata.huUser) tempcard = list() tempcard.extend(users[hudata.huUser].handlist) tempcard.append(hudata.majong) # 获取牌型 ct = chengdu_mahjong.getCardType(tempcard, users[hudata.huUser].peng, users[hudata.huUser].gang, 0) ct.extend(hudata.settle) user_settles[hudata.huUser].settlePatterns.extend(ct) score = chengdu_mahjong.getScore(ct) # 带跟翻倍 allcard = [] allcard.extend(tempcard) for p in users[hudata.huUser].peng: allcard.append(p) allcard.append(p) allcard.append(p) for g in users[hudata.huUser].gang: allcard.append(g.gangvalue) allcard.append(g.gangvalue) allcard.append(g.gangvalue) allcard.append(g.gangvalue) for i in range(0, len(MahjongUtils.get_si(allcard))): score *= 2 if 0 in ct and request.zimojiafan: score *= 2 if score > request.fengding: score = request.fengding if 0 in ct and not request.zimojiafan: score += 1 for u in hudata.loseUsers: user_settles[u].cardScore -= score user_settles[hudata.huUser].cardScore += score if request.peijiao: peijiao_users = list() user_score = {} if 1 < len(cannothu_user): for c in cannothu_user: huTemp = MahjongUtils.get_hu(users[c].handlist, request.rogue) # 有叫 if 0 < len(huTemp): score = 0 for h in huTemp: tempcard = list() tempcard.extend(users[c].handlist) tempcard.append(h) # 获取牌型 cardtype = chengdu_mahjong.getCardType( tempcard, users[c].peng, users[c].gang, request.rogue) cardscore = chengdu_mahjong.getScore(cardtype) # 带跟翻倍 allcard = [] allcard.extend(tempcard) for p in users[c].peng: allcard.append(p) allcard.append(p) allcard.append(p) for g in users[c].gang: allcard.append(g.gangvalue) allcard.append(g.gangvalue) allcard.append(g.gangvalue) allcard.append(g.gangvalue) for i in range(0, len(MahjongUtils.get_si(allcard))): cardscore *= 2 if cardscore > score: score = cardscore if score > request.fengding: score = request.fengding if score > 0: user_score.setdefault(c, score) else: peijiao_users.append(c) if 0 < len(user_score) and 0 < len(peijiao_users): for key, value in user_score.items(): for p in peijiao_users: user_settles[p].cardScore -= value user_settles[key].cardScore += value # 杠分计算 for user in request.player: for g in user.gang: winuser = user.player_id if 0 != g.zhuanyi: winuser = g.zhuanyi if winuser not in peijiao_users: if g.type == BGANG: user_settles[winuser].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[winuser].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[winuser].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 else: for user in request.player: for g in user.gang: winuser = user.player_id if 0 != g.zhuanyi: winuser = g.zhuanyi if g.type == BGANG: user_settles[winuser].gangScore += len(g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[winuser].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[winuser].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 for sett in settle.userSettleResule: logging.info("userid") logging.info(sett.userId) logging.info("cardScore") logging.info(sett.cardScore) logging.info("gangScore") logging.info(sett.gangScore) logging.info("settlePatterns") logging.info(sett.settlePatterns) return settle
def settle(self, request, context): """ :结算 :param request: :param context: :return: """ settle = SettleResult() user_settles = {} users = {} cannothu_user = [] for user in request.player: user_settle = settle.userSettleResule.add() user_settle.userId = user.player_id user_settles.setdefault(user.player_id, user_settle) users.setdefault(user.player_id, user) cannothu_user.append(user.player_id) if 1 == request.alloc_id: for user in request.player: for g in user.gang: if g.type == BGANG: user_settles[user.player_id].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[user.player_id].gangScore += 3 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 3 if g.type == AGANG: user_settles[user.player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 for hudata in request.hudata: if hudata.huUser in cannothu_user: cannothu_user.remove(hudata.huUser) tempcard = list() tempcard.extend(users[hudata.huUser].handlist) tempcard.append(hudata.majong) cardtype = wanzhou_mahjong.getCardType( tempcard, users[hudata.huUser].peng, users[hudata.huUser].gang, request.rogue) score = wanzhou_mahjong.getScore(cardtype) if score < 48 and request.rogue != 0 and 21 in CardUtils.get_si( tempcard): cardtype = 25 score = 48 for s in hudata.settle: if s != 0: if 1 == score: score = 12 else: score *= 2 if 0 in hudata.settle and score == 1: score += 1 if score > request.fengding: score = request.fengding user_settles[hudata.huUser].settlePatterns.append(cardtype) user_settles[hudata.huUser].settlePatterns.extend( hudata.settle) for u in hudata.loseUsers: if users[u].baojiao: if 2 == score or 1 == score: user_settles[u].cardScore -= 12 user_settles[hudata.huUser].cardScore += 12 else: user_settles[u].cardScore -= score * 2 user_settles[hudata.huUser].cardScore += score * 2 else: user_settles[u].cardScore -= score user_settles[hudata.huUser].cardScore += score if request.peijiao: peijiao_users = list() user_score = {} if 1 < len(cannothu_user): for c in cannothu_user: hucards = MahjongUtils.get_hu(users[c].handlist, request.rogue) # 有叫 if 0 < len(hucards): score = 0 for h in hucards: tempcard = list() tempcard.extend(users[c].handlist) tempcard.append(h) cardtype = wanzhou_mahjong.getCardType( tempcard, users[c].peng, users[c].gang, request.rogue) cardscore = wanzhou_mahjong.getScore(cardtype) if cardscore < 48 and request.rogue != 0 and 21 in CardUtils.get_si( tempcard): cardtype = 25 cardscore = 48 if 1 == cardscore: cardscore = 12 else: cardscore *= 2 if cardscore > score: score = cardscore if score > 0: user_score.setdefault(c, score) else: peijiao_users.append(c) if 0 < len(user_score) and 0 < len(peijiao_users): for key, value in user_score.items(): for p in peijiao_users: user_settles[p].cardScore -= value user_settles[key].cardScore += value if 2 == request.alloc_id: for user in request.player: for g in user.gang: if g.type == BGANG: user_settles[user.player_id].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[user.player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[user.player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 for hudata in request.hudata: if hudata.huUser in cannothu_user: cannothu_user.remove(hudata.huUser) tempcard = list() tempcard.extend(users[hudata.huUser].handlist) tempcard.append(hudata.majong) cardtype = wanzhou_mahjong.getCardType( tempcard, users[hudata.huUser].peng, users[hudata.huUser].gang, request.rogue) user_settles[hudata.huUser].settlePatterns.append(cardtype) score = wanzhou_mahjong.getScore(cardtype) for s in hudata.settle: if s != 0: if 1 == score: score = 12 else: score *= 2 if 0 in hudata.settle and score == 1: score += 1 if score > request.fengding: score = request.fengding for u in hudata.loseUsers: if users[u].baojiao: if 2 == score or 1 == score: user_settles[u].cardScore -= 12 user_settles[hudata.huUser].cardScore += 12 else: user_settles[u].cardScore -= score * 2 user_settles[hudata.huUser].cardScore += score * 2 else: user_settles[u].cardScore -= score user_settles[hudata.huUser].cardScore += score peijiao_users = list() user_score = {} if 4 == len(cannothu_user): for c in cannothu_user: hucards = MahjongUtils.get_hu(users[c].handlist, request.rogue) # 有叫 if 0 < len(hucards): score = 0 for h in hucards: tempcard = list() tempcard.extend(users[c].handlist) tempcard.append(h) cardtype = wanzhou_mahjong.getCardType( tempcard, users[c].peng, users[c].gang, request.rogue) cardscore = wanzhou_mahjong.getScore(cardtype) if cardscore > score: score = cardscore if score > request.fengding: score = request.fengding if score > 0: user_score.setdefault(c, score) else: peijiao_users.append(c) if 0 < len(user_score) and 0 < len(peijiao_users): for key, value in user_score.items(): for p in peijiao_users: user_settles[p].cardScore -= value user_settles[key].cardScore += value if 3 == request.alloc_id: for hudata in request.hudata: if hudata.huUser in cannothu_user: cannothu_user.remove(hudata.huUser) tempcard = list() tempcard.extend(users[hudata.huUser].handlist) tempcard.append(hudata.majong) ct = rongchang_mahjong.getCardType(tempcard, users[hudata.huUser].peng, users[hudata.huUser].gang, 0, hudata.majong) ct.extend(hudata.settle) if 3 in ct and 10 in ct: ct.remove(3) if 3 in ct and 7 in ct: ct.remove(3) ct.remove(7) ct.append(10) if 0 == len(ct): ct.append(0) user_settles[hudata.huUser].settlePatterns.extend(ct) score = rongchang_mahjong.getScore(ct) if 1 == score and 1 in ct: score += 1 for u in hudata.loseUsers: if users[u].baojiao: if 1 == score or 2 == score: user_settles[u].cardScore -= score + 5 user_settles[hudata.huUser].cardScore += score + 5 else: user_settles[u].cardScore -= score + 6 user_settles[hudata.huUser].cardScore += score + 6 else: user_settles[u].cardScore -= score user_settles[hudata.huUser].cardScore += score for user in request.player: if user.player_id == hudata.huUser: for g in user.gang: if g.type == BGANG: user_settles[user.player_id].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[ user.player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[ user.player_id].gangScore += 3 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 3 break peijiao_users = list() user_score = {} if 1 < len(cannothu_user): for c in cannothu_user: hasCard = set() for u in request.player: if u.player_id != c: hasCard = hasCard.union(u.handlist) for g in u.gang: if g.type == AGANG: hasCard.add(g.gangvalue) hucards = set() huTemp = MahjongUtils.get_hu(users[c].handlist, request.rogue) for h in huTemp: if h in hasCard: hucards.add(h) # 有叫 if 0 < len(hucards): score = 0 for h in hucards: tempcard = list() tempcard.extend(users[c].handlist) tempcard.append(h) cardtype = rongchang_mahjong.getCardType( tempcard, users[c].peng, users[c].gang, request.rogue, h) if 0 == len(cardtype): cardtype.append(0) if 4 == MahjongUtils.containSize( tempcard, h) and 10 not in cardtype: cardtype.append(3) cardscore = rongchang_mahjong.getScore(cardtype) if cardscore > score: score = cardscore if score > 0: if users[c].baojiao: if 1 == score: score = 6 else: score += 6 user_score.setdefault(c, score) for user in request.player: if user.player_id == c: for g in user.gang: if g.type == BGANG: user_settles[ user.player_id].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[ user. player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[ user. player_id].gangScore += 3 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 3 break else: peijiao_users.append(c) if 0 < len(user_score) and 0 < len(peijiao_users): for key, value in user_score.items(): for p in peijiao_users: if users[p].baojiao: user_settles[ p].cardScore -= 6 if value == 1 else value + 6 user_settles[ key].cardScore += 6 if value == 1 else value + 6 else: user_settles[p].cardScore -= value user_settles[key].cardScore += value else: for c in cannothu_user: for user in request.player: if user.player_id == c: for g in user.gang: if g.type == BGANG: user_settles[ user.player_id].gangScore += len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 1 if g.type == MGANG: user_settles[ user.player_id].gangScore += 2 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 2 if g.type == AGANG: user_settles[ user.player_id].gangScore += 3 * len( g.fighter) for f in g.fighter: user_settles[f].gangScore -= 3 break for sett in settle.userSettleResule: logging.info("userid") logging.info(sett.userId) logging.info("cardScore") logging.info(sett.cardScore) logging.info("gangScore") logging.info(sett.gangScore) logging.info("settlePatterns") logging.info(sett.settlePatterns) return settle