Exemple #1
0
 def jiaodizhu(dipai,users):  # 叫地主
     #随机生成先叫地主的人,生成叫地主顺序列表
     three = random.choice([1, 2, 3])
     if three == 1:
         lis = [1, 2, 3, 1]
         dizhu = 1
     elif three == 2:
         lis = [2, 3, 1, 2]
         dizhu = 2
     elif three == 3:
         lis = [3, 1, 2, 3]
         dizhu = 3
     #根据顺序由每位玩家叫地主
     title = 'xszf_jdz' #显示字符
     for x in lis:
         if x == 1:
             a = C.dz_p1('Be a king?',title,users[0])
             if a == 'y':
                 dizhu = 1
                 C.send_msg_all('play1 say yes','msg',users)
             else:
                 C.send_msg_all('play1 say no','msg',users)
         elif x == 2:
             a = C.dz_p2('Be a king?',title,users[1])
             if a == 'y':
                 dizhu = 2
                 C.send_msg_all('play2 say yes','msg',users)
             else:
                 C.send_msg_all('play2 say no','msg',users)
         elif x == 3:
             a = C.dz_p3('Be a king?',title,users[2])
             if a == 'y':
                 dizhu = 3
                 C.send_msg_all('play3 say yes','msg',users)
             else:
                 C.send_msg_all('play3 say no','msg',users)
     #根据地主位置生成出牌顺序
     if dizhu == 1:
         lt = [1, 2, 3]
     elif dizhu == 2:
         lt = [2, 3, 1]
     elif dizhu == 3:
         lt = [3, 1, 2]
     
     #给所有玩家发送地主玩家为谁
     title1 = 'xszf_num'
     C.send_msg_all("The king is %d" % dizhu,title1,users)
     return dizhu, lt
Exemple #2
0
    def gai_1_le(pass_num, up, out_up, down, p1, p2, p3, users, dipai):
        while True:
            R.up_date(p1, p2, p3, users, dipai, out_up)  # 看手牌
            title = 'start'
            s = 'Turn to 1'
            time.sleep(0.3)
            C.send_to_one(s, title, users[0])
            sy = C.sr_p1(p1, users[0])  # 得到玩家的出牌序列
            sy_fh = sorted(sy, reverse=True)  # 排序
            lis = []
            lis_copy = []
            out_copy_up = []
            for x in sy:
                s = p1[x]
                lis.append(s)
                out_copy_up.append(s)
                lis_copy.append(s)
            # 备份
            lis = R.dibanchu(lis)  # 转换为实际大小
            lis = R.many_first(lis)  # 排序数量多牌在前数量少的牌在后
            lis_outparper = R.chupaifanyi(lis, lis_copy)
            daxiao_lis = R.fanhui_xulie(lis)  # 拿到相应牌值编号
            if daxiao_lis[0] == 100:
                C.send_to_one('not This', 'no', users[0])
                lis_outparper = []
                continue  # 不符合规则,重新出牌
            if daxiao_lis[0] == 4:
                if pass_num == 0:
                    # 此时必须出牌不能PASS,可以随意出
                    C.send_to_one('not This', 'no', users[0])
                    lis_outparper = []
                    continue
                title3 = 'xszf_pass'
                C.send_msg_all("pass", title3, users)  #玩家没有出牌,表示PASS
                pass_num -= 1
                if pass_num == 0:
                    up = []
                    out_copy_up = []
                return pass_num, up, out_copy_up, down, p1  # pass
            else:
                if pass_num == 0:  #随意出牌的情况
                    up = daxiao_lis
                    for x in sy_fh:
                        del p1[x]  #success,删除手中打出的牌

                    #给所有玩家展示打出的牌
                    C.send_to_one('success', 'ok', users[0])
                    R.up_date(p1, p2, p3, users, dipai, out_copy_up)
                    pass_num = 2
                    return pass_num, up, out_copy_up, down, p1

                elif pass_num == 1:  #必须大于上家才能出的情况
                    down = daxiao_lis
                    up, down = R.bidaxiao(up, down)
                    if down[-1] == 50:
                        pass_num == 1
                        C.send_to_one('not This', 'no', users[0])
                        lis_outparper = []
                        continue
                    if down[0] == 4:
                        pass_num = 0
                        return pass_num, up, out_up, down, p1
                    for x in sy_fh:
                        del p1[x]  #success,删除手中打出的牌
                    C.send_to_one('success', 'ok', users[0])
                    R.up_date(p1, p2, p3, users, dipai, out_copy_up)
                    pass_num = 2
                    return pass_num, up, out_copy_up, down, p1

                elif pass_num == 2:  #须大于上家才能出的情况
                    down = daxiao_lis
                    up, down = R.bidaxiao(up, down)
                    if down[-1] == 50:
                        pass_num == 2
                        C.send_to_one('not This', 'no', users[0])
                        lis_outparper = []
                        continue
                    if down[0] == 4:
                        pass_num = 1
                        return pass_num, up, out_up, down, p1
                    for x in sy_fh:
                        del p1[x]  #success,删除手中打出的牌
                    C.send_to_one('success', 'ok', users[0])
                    R.up_date(p1, p2, p3, users, dipai, out_copy_up)

                    return pass_num, up, out_copy_up, down, p1  #玩家出牌结束返回变量
Exemple #3
0
    def end_result(king_num, win_num,users):
        if king_num == win_num:

            C.send_msg_all("King Win",'xszf_end',users)
        else:
            C.send_msg_all("People Win",'xszf_end',users)