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
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 #玩家出牌结束返回变量
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)