def backtrack(empty):
     index = 0
     n = 1
     while True:
         if n == 10:
             all[empty[index][0]] = "V"
             index = index - 1
             n = all[empty[index][0]] + 1
         if n != 10:
             all[empty[index][0]] = n
         line = ligne(all)
         column = colonne(line)
         sq = carre(all)
         verif_all = verif_line(line) or verif_column(
             column) or verif_square(sq)
         if verif_all == True:
             n += 1
             if n == 10:
                 all[empty[index][0]] = "V"
                 index = index - 1
                 n = all[empty[index][0]] + 1
         else:
             index += 1
             n = 1
         tt = all
         if index == len(empty):
             return tt
         show(line)
def chooser(x_or_o, board):

    while True:
        show(board)
        try:
            x_or_o_input = input("Select a spot[%s]> " % x_or_o)
            x_or_o_input = int(x_or_o_input)
            # Subtract 1 to accomodate for indexing vs regular
            # human sensibility
            x_or_o_input -= 1
            if board[x_or_o_input] == 'x' or board[x_or_o_input] == 'o':
                cleanup()
                print "This spot has already been taken:"
                continue
            else:
                board[x_or_o_input] = x_or_o
                break
        except IndexError:
            continue
        except ValueError:
            print("That is not a number on the board.")
            continue
        except TypeError:
            print("That is not a number on the board.")
            continue
        except IndexError:
            print("That is not a number on the board.")
            continue
        except SyntaxError:
            print("That is not a number on the board.")
            continue
        except NameError:
            print("That is not a number on the board.")
            continue
Beispiel #3
0
def sort():
    show()
    # 判断文件是否存在
    if os.path.exists(r"E:\p1\student.txt"):
        with open("E:\p1\student.txt","r"):as file:
        # 读取全部内容
        student_old = file.readlins()
        student_new=[]
        for list in student_old:
            d=dict(eval(list))
            student_new.append(d)
        else:
            return
        ascORdesc = input("请选择(0升序;1降序:)")
        if ascORdesc=="0":
            ascORdescBool=False
        elif ascORdesc=="1":
            ascORdescBool = True
        else:
            print("您输入有误,请重新输入!")
            sort()
        mode=input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按c语言成绩排序,0按总成绩排序)")
        if mode =="1":
            student_new.sort(key=lambda x:x["english"],reverse=ascORdesc)
        if mode == "2":
            student_new.sort(key=lambda x: x["python"], reverse=ascORdesc)
        if mode == "3":
            student_new.sort(key=lambda x: x["c"], reverse=ascORdesc)
        if mode == "0":
            student_new.sort(key=lambda x: x["english"]+ x["python"]+ x["c"],reverse=ascORdescBool)
        else:
            print("您的输入有误,请重新输入!")
            sort()
        #     显示排序结果
        show_student(student_new)
 def app_PINDIAN(self,O,T):
     '''
     拼点
     '''
     rank =[]
     for i in range(10):
         rank.append(str(i+1))
     rank+=['J','Q','K']
     available = show(O,self,'选择任意手牌')
     var = API(O, available,'拼点', O.name+'选择拼点牌','self')
     while 1:
         if var.isdigit() and int(var) in available:
             temp1 = self.pop_shoupai(O,int(var)-1)
             self.PD.ZM.append(temp1)
             num1 = rank.index(self.PAI[temp1][0][1])
             print O.name+'拼点使用'+show_pai(self,temp1,'all')
             break
     available = show(T,self,'选择任意手牌')
     var = API(T, available,'拼点', T.name+'选择拼点牌','self')
     while 1:
         if var.isdigit() and int(var) in available:
             temp2 = self.pop_shoupai(T,int(var)-1)
             self.PD.ZM.append(temp2)
             num2 = rank.index(self.PAI[temp2][0][1])
             print T.name+'拼点使用'+show_pai(self,temp2,'all')
             break
     if num1>num2:
         print O.name+'胜'
         return 1
     else:
         print T.name+'胜'
         return 0
 def useGUANSHIFU(self,O):
     var = API(O, ['','1'],'cast', "是否使用贯石斧?")
     valid=0
     if len(var)>0:
         l = len(O.shoupai)+len(O.armor_pai)
         if l>=2:
             available = show(O,self,'选择任意手牌')
             if len(O.armor_pai)>0:
                 print 'q   防具   '+O.armor()
                 available['q']=''
             while 1:
                 var1 = API(O, available,'QIPAI','选择弃制牌1')
                 if var1.isdigit() and int(var1) in available:
                     self.PD.QP.append(O.shoupai[int(var1)-1])
                     break
                 elif var1=='q' and len(O.armor_pai)>0:
                     self.PD.QP.append(O.armor_pai.pop(0))
                     break
                 
             available = show(O,self,'选择任意手牌')
             if len(O.armor_pai)>0:
                 print 'q   防具   '+O.armor()
                 available['q']=''
             while 1:
                 var2 = API(O, available,'QIPAI', '选择弃制牌2')
                 if var2.isdigit() and int(var2) in available:
                     self.PD.QP.append(O.shoupai[int(var2)-1])
                     break
                 elif var2=='q' and len(O.armor_pai)>0:
                     self.PD.QP.append(O.armor_pai.pop(0))
                     break
             valid=1
         else:
             print '牌不够'
     return valid
 def QIPAI(self):
     '''
     执行弃牌阶段
     '''
     num1= len(self.shoupai)-self.hp            
     while num1>0: #弃牌循环
         available = show(self,self.PAI,'选择任意手牌')
         print '你还需要弃'+str(num1)+'张牌'
         var = API(self, available,'QIPAI', "你放弃哪一张: ")#比如1
         if var=='':
             continue
         if var.isdigit() and int(var) in available:
             card_indx = self.shoupai.pop(int(var)-1)# 比如0 /48
             #从手中移除
             if self.adv.name=='孙尚香' and self.PAI.LEIXING[self.PAI.PAI[card_indx][1]] in {'wuqi','fangju'}:
                 self.adv.shoupai.append(card_indx)
             else:
                 self.PD.QP.append(card_indx)
             self.PD.QP+=self.PD.ZM           #桌面入弃牌堆
             self.PD.ZM=[]
             num1-=1
             show(self,self.PAI,'选择任意手牌')
     if self.name =='貂蝉':
         self.shoupai.append(self.PD.MOPAI())
         print '貂蝉:失礼了'
         print '貂蝉获得了'+self.PAI.PAI[self.shoupai[-1]][1]
     elif self.name=='曹仁':
         var = API(self, ['','1'],'cast', '是否发动据守?')
         if var=='':
             pass
         else:
             for i in range(3):
                 self.shoupai.append(self.PD.MOPAI())
             self.special_fanmian = 1
             print '曹仁: 我先休息一会'
    def P(self,O,T,panding_indx):
        '''
        判定技能
        '''
        if O.name in self.P_char:
            if O.name == '司马懿':
                available = show(O,self.PAI,'选择任意手牌')
                while 1:
                    var = API(O, available,'天命', "司马懿,请出一张判定牌")
                    if var =='':
                        return 0,panding_indx #放弃,没有改
                    if int(var) not in available:
                        continue
                    if int(var) in available:
                        changed = 1 #改了
                        break
                card_indx = O.shoupai[int(var)-1]# 比如0 /48
                O.shoupai.pop(int(var)-1)                    #从手中移除
                self.PD.QP.append(card_indx)                         #放到
                print O.name+': 天命'
                print '司马懿将判定牌"'+panding_indx+'"替换成了'+card_indx
                return changed, card_indx

            elif O.name == '张角':
                available = show(O,self.PAI,'出示黑牌')
                while 1:
                    var = API(O, available,'鬼道', "张角,请出一张判定牌")
                    if var =='':
                        return 0,panding_indx#放弃,没有改
                    if int(var) not in available:
                        continue
                    if int(var) in available:
                        changed = 1 #改了
                        break
                card_indx = O.shoupai[int(var)-1]# 比如0 /48
                self.PD.ZM.append(O.shoupai.pop(int(var)-1))       #从手中移除放到桌面
                O.shoupai.append(self.PD.ZM.pop(-2))        #获得判定牌
                
                self.PD.ZM.append(card_indx)                         #放到桌面
                print O.name+': 苍天已死,黄天当立'
                print '张角将判定牌"'+self.PAI.PAI[panding_indx][1]+'"替换成了'+self.PAI.PAI[card_indx][1]
                return changed, card_indx
        else: #没有司马和张角
            return 0, panding_indx
Beispiel #8
0
class Main:
    m_Download_Data = Download_Data()

    m_Fromat_Data = Fromat_Data()

    m_Control = Control()

    m_Save_Biodata = Save_Biodata()

    m_show = show()
 def Kaiju(self):
     '''
     执行开局阶段
     '''
     if self.name=='甄姬':
         while 1:
             print '甄姬:仿佛兮若轻云之蔽月,飘飖兮若流风之回雪'
             temp = self.PD.MOPAI()
             if self.PAI.PAI[temp][0][0] in {'B','C'}:
                 self.shoupai.append(temp)
                 print '洛神得到:'+self.PAI.PAI[temp][1]+'  '+show_hua(self.PAI.PAI[temp][0])+self.PAI.PAI[temp][0][1]
             else:
                 print show_hua(self.PAI.PAI[temp][0])+self.PAI.PAI[temp][0][1]+',  洛神失败'
                 break
     elif self.name=='诸葛亮':
         show(self,self.PAI,'选择任意手牌')
         print '诸葛亮: 知天易,逆天难'
         print '诸葛亮发动了观星,展示两张牌\n'
         X=[]
         X.append(self.PD.MOPAI())
         X.append(self.PD.MOPAI())
         print show_pai(self.PAI,X[0],'all')
         print show_pai(self.PAI,X[1],'all')
         print '选项: 1.不放 2.放第一张 3.放第二张 4.全放 5.交换位置'
         while 1:
             var = API(self, {''},'观星','请选择')
             if var.isdigit() and int(var) in {1,2,3,4,5}:
                 if var=='1':
                     self.PD.MP.insert(0,X[1])
                     self.PD.MP.insert(0,X[0])
                 elif var=='2':
                     self.PD.MP.append(X[0])
                     self.PD.MP.insert(0,X[1])
                 elif var=='3':
                     self.PD.MP.append(X[1])
                     self.PD.MP.insert(0,X[0])
                 elif var=='4':
                     self.PD.MP.append(X[0])
                     self.PD.MP.append(X[1])
                 elif var=='5':
                     self.PD.MP.insert(0,X[0])
                     self.PD.MP.insert(0,X[1])
                 break       
 def askforShan(self,O,T):
     '''
     求闪
     '''
     out=0
     available = show(T,self,'求闪')
     print available
     if T.armor() == '八卦阵' and O.weapon()!='青钢剑':  #八卦阶段
         var = API(T, ['','1'],'cast', '是否使用八卦阵?')
         if len(var)>0:
             temp = self.PD.MOPAI()
             print '八卦阵判定为'+show_pai(self,temp,'all')
             if T.name=='郭嘉':
                 T.shoupai.append(temp)
             else:
                 self.PD.QP.append(temp)
             if self.PAI[temp][0][0] in {'B','C'} or (T.name=='小乔' and self.PAI[temp][0][0] in {'C'}):
                 print '判定失败'
                 out=0
             else:
                 print '判定成功'
                 out=1
                 return out
                                 # 非八卦阶段
     if T.name=='甄姬': #甄姬有装备时
         if len(T.weapon())>0:
             var = API(T, ['','1'],'cast', '是否放弃武器牌当作闪使用?')
             if len(var)>0:
                 self.PD.ZM.append(T.weapon_pai.pop(0))
                 return 1
         if len(T.armor())>0:
             var = API(T, ['','1'],'cast', '是否放弃装备牌当作闪使用?')
             if len(var)>0:
                 self.PD.ZM.append(T.armor_pai.pop(0))
                 return 1
     while 1:
         var = API(T, available,'askforShan', "请出一张闪")
         if var =='':
             return 0
         elif var.isdigit() and int(var) in available:
             out = 1
             break
     card_indx = T.shoupai[int(var)-1]# 比如0 /48
     self.pop_shoupai(T,int(var)-1)
     self.PD.QP.append(card_indx)                         #放到桌面
     print T.name+': 闪'
     if O.weapon()=='贯石斧':
         if self.useGUANSHIFU(O):
             out=0
         else:
             out=1
     return out
 def moveCHAI(self,O,T):
     '''
     过河拆桥
     '''
     if int(self.askforWuxie(O,'moveCHAI')):
         return 1
     elif int(self.askforWuxie(T,'moveCHAI')):
         return 1
     else:
         if len(T.weapon_pai)>0 or len(T.armor_pai)>0 or len(T.shoupai)>0:
             while 1:
                 var1 = API(O, ['1','2'],'moveCHAI', '要拆手牌还是装备? 1.装备 2.手牌')
                 if var1.isdigit() and int(var1) in {1,2}:
                     if var1=='1' and len(T.weapon_pai)+len(T.armor_pai)>0:
                         available = show(T,self,'装备')
                         while 1:
                             var2 =API(O, available,'app_QIPAI', '选择要拆的装备')
                             if var2=='w' and len(T.weapon_pai)>0:
                                 card_indx = T.weapon_pai.pop(0)
                                 self.PD.QP.append(card_indx)
                                 print T.name+'的武器'+show_pai(self,card_indx,'all')+'被拆掉了'
                                 return 1
                             elif var2=='q' and len(T.armor_pai)>0:    
                                 card_indx = T.armor_pai.pop(0)
                                 self.PD.QP.append(card_indx)
                                 print T.name+'的防具'+show_pai(self,card_indx,'all')+'被拆掉了'
                                 return 1
                     elif var1=='2' and len(T.shoupai)>0:
                         available = show(T,self,'选择任意手牌')
                         while 1:
                             var2 = API(O, available,'app_QIPAI', '选择要拆的手牌')   
                             if var2.isdigit() and int(var2) in available:
                                 card_indx = self.pop_shoupai(T,int(var2)-1)
                                 self.PD.QP.append(card_indx)
                                 print T.name+'的一张'+self.PAI[card_indx][1]+'被拆掉了'
                                 return 1
         else:
             return 0#失败
    def askforSha(self,T):
        available = show(T,self,'求杀')
        print available
        while 1:
            var = API(T, available,'askforSha',"请出一张杀")
            if var =='':
                return 0
            elif var.isdigit() and int(var) in available:
                out = 1
                card_indx = T.shoupai[int(var)-1]# 比如0 /48
                self.pop_shoupai(T,int(var)-1)                #从手中移除
                self.PD.ZM.append(card_indx)                         #放到桌面
                break
            elif var=='w' and T.weapon()=='丈八蛇矛':
                out = self.useZHANGBA(T,T.adv)
            elif var=='e' and T.name=='关羽':
                available = show(T,self,'求红')
                if len(T.weapon_pai)>0 and self.PAI[T.weapon_pai[0]][0] in {'R','F'}:
                    print 'w   武器'
                var = API(T, available,'QIPAI', '选张红')
                while 1:
                    if var=='':
                        valid=0
                        break
                    elif var=='w':
                        if self.PAI[T.weapon_pai[0]][0] in {'R','F'}:
                            self.PD.ZM.append(T.weapon_pai.pop(0))
                            return 1
                        else:
                            print T.name+'无效的出牌'
                    elif var.isdigit() and int(var) in available:
                        self.PD.ZM.append(T.shoupai.pop(int(var)-1))
                        return 1
                    else:
                        print T.name+'无效的出牌'

        print T.name+': 杀'
        return out
 def askforTAO(self,T,target):
     available = show(T,self,'求桃')
     print available
     while 1:
         var = API(T, available,'askforTAO', "请出一张桃",target)
         if var =='':
             return 0
         if var.isdigit() and int(var) in available:
             out = 1
             break
     card_indx = T.shoupai[int(var)-1]# 比如0 /48
     self.pop_shoupai(T,(int(var)-1))                    #从手中移除
     self.PD.QP.append(card_indx)                         #放到桌面
     print T.name+': 桃'
     return out
 def askforWuxie(self,T,ENV):
     available = show(T,self,'求无懈')
     print available
     if len(available)==0:
         print T.name+'没有无懈可击'
         return 0
     while 1:
         var = API(T, available,'askforWuxie', "请出一张无懈可击",ENV)
         if var =='':
             return 0
         if var.isdigit() and int(var) in available:
             out = 1
             break
     card_indx = T.shoupai[int(var)-1]# 比如0 /48
     self.pop_shoupai(T,(int(var)-1))                    #从手中移除
     self.PD.QP.append(card_indx)                         #放到桌面
     print T.name+': 无懈可击'
     if T.name=='黄月英':
         T.shoupai.append(self.PD.MOPAI())
         print T.name +': 哼!'
     return out
 def Chupai(self):
     '''
     执行出牌阶段
     '''
     if self.record ==1:
         self.tobewritten.append(self.information())
     lived =1
     self.killed = 0
     self.magiced= 0
     while lived:
         available = show(self,self.PAI,'出牌阶段')
         #var = raw_input("你要出哪一张: ")#比如1
         var = API(self,available,'CHUPAI','你要出哪一张: ')
         if var=='':
             break
         elif var in {'w','e','r'}:#武器或技能
             if var=='w':
                 move='使用丈八蛇矛'
                 validmove, lived = self.PAI.move(move,self,self.adv)#move('使用丈八蛇矛',O,T)
             if var=='e':
                 validmove,lived = self.JINENG.C(self,self.adv)
                 if validmove ==1 and self.name not in {'黄盖','赵云','关羽','甘宁'}:
                     self.magiced=1
         elif var.isdigit() and int(var) in available:
             card_indx = self.shoupai[int(var)-1]# 比如0 /48
             self.PAI.pop_shoupai(self,(int(var)-1))                    #从手中移除
             self.PD.ZM.append(card_indx)                         #放到桌面
             move = self.PAI.PAI[card_indx][1]#'决斗'
             print colored(move,'green')#print 决斗
             validmove, lived = self.PAI.move(move,self,self.adv)#move('决斗',O,T)
             if not validmove:
                 print '无效的出牌'
                 self.shoupai.append(self.PD.ZM.pop(-1))
             else:
                 self.PD.QP+=self.PD.ZM
                 self.PD.ZM=[]#桌面入弃牌堆
         else:
             print '错误的选项'
         self.step+=1
     return lived
def victory_evaluator(board, x_or_o):

    if board[0] == x_or_o and board[1] == x_or_o and board[2] == x_or_o or \
        board[3] == x_or_o and board[4] == x_or_o and board[5] == x_or_o or \
        board[6] == x_or_o and board[7] == x_or_o and board[8] == x_or_o:
        show(board)
        return True
    elif board[0] == x_or_o and board[3] == x_or_o and board[6] == x_or_o or \
        board[1] == x_or_o and board[4] == x_or_o and board[7] == x_or_o or \
        board[2] == x_or_o and board[5] == x_or_o and board[8] == x_or_o:
        show(board)
        return True
    elif board[0] == x_or_o and board[4] == x_or_o and board[8] == x_or_o or \
        board[2] == x_or_o and board[4] == x_or_o and board[6] == x_or_o:
        show(board)
        return True
 def useZHANGBA(self,O,T):
     out = 0        
     temp = []
     for i in [1,2]:
         available = show(O,self,'选择任意手牌')
         while 1:
             var = API(O, available,'QIPAI', "选择丈八蛇矛弃牌"+str(i))
             if var =='':
                 return 0
             if int(var) not in available:
                 continue
             if int(var) in available:
                 out = 1
                 break
         card_indx = O.shoupai[int(var)-1]# 比如0 /48
         self.pop_shoupai(O,int(var)-1)                #从手中移除
         temp.append(card_indx)#移动到temp
     if out == 0: #没有执行
         O.shoupai +=temp
     else :#执行了
         self.PD.ZM+=temp                        #放到桌面
     return out
 elif O.name=='周瑜' and len(O.shoupai)>0:
     print O.name+'对'+T.name+'使用反间'
     print '1 黑桃\n2 红桃\n3 草花\n4 方片'
     var = API(T, {''},'花色', '请选择花色')
     L = ['B','R','C','F']
     temp = O.shoupai.pop(random.randint(0,len(O.shoupai)-1))#随机弃一张
     print T.name+'抽到了'+show_pai(self.PAI,temp,'all')
     T.shoupai.append(temp)
     while 1:
         if var.isdigit() and int(var) in [1,2,3,4]:
             if L[int(var)-1]!=self.PAI.PAI[temp][0][0]:#抽错了
                 self.PAI.app_damage(O,T,'')
             break
     valid=1
 elif O.name=='大乔':
     available = show(O,self.PAI,'选择方片')
     var = API(O, available,'国色', '选择方片当作乐不思蜀使用')
     while 1:
         if var.isdigit():
             if int(var) in available:
                 if len(T.LE_pai)==0:
                     T.LE_pai.append(O.shoupai.pop(int(var)-1))
                     valid=1
                     break
                 else:
                     '已经有乐'
                     valid=0
                     break
             elif int(var) not in available:
                 continue
         else:
 def askforAI(self,available,state,*args,**kwargs):
     '''
     state in {'CHUPAI','askforSha','askforShan'}
     available in {'1','2','3'...,'e','w','q'}
     mode in {1,2}
     '''
     out=''
     D={}
     if len(available)>0:
         if state=='CHUPAI' or state=='askforSha':
             for i in available:
                 D[i]=self.app_rank_CHUPAI(available,i)
                 if D[i]>=100:
                     D.pop(i)
             if len(D)>0:
                 out = min(D,key=D.get) # get the key with the least value
                 if out=='w' and len(self.player.weapon_pai)>0:
                     out=''
         elif state=='QIPAI':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)                        
             out = min(D,key=D.get)
         elif state=='askforWuxie':
             if self.player.myround==1:
                 out=''
                 if len(self.player.LE_pai)>0 and len(self.player.shoupai)>=self.player.hp-1:
                     out=available.keys()[0]
                 if len(self.player.LE_pai)>0:
                     out=available.keys()[0]
             else:
                 out=available.keys()[0]
                 if len(args)>0:
                     ENV = args[0]
                     if ENV == 'moveJUEDOU':
                         if len(self.player.shoupai)>len(self.adv.shoupai):
                             out=''
                         else:
                             out=available.keys()[0]
                     elif ENV == 'moveNANMAN':
                         out=available.keys()[0]
                         for i in self.player.shoupai:
                             if show_pai(self.PAI,i,'pai')=='杀':
                                 out=''
                                 break
         elif state=='cast':
             out='1'
             if len(args)>0:
                 ENV = args[0]
                 if ENV=='moveSHUI' and len(self.player.armor_pai)>0 and self.player.hp>=2:
                     out='0'
             if self.player.name=='孟获' and self.player.hp_top-self.player.hp<=1:
                 out='0'
             elif self.player.name=='典韦' and len(show(self.player,self.PAI,'强袭'))==0 and self.player.hp<self.player.adv.hp:
                 out='0'
             elif self.player.name=='许褚':
                 if len(self.player.shoupai)>=len(self.player.adv.shoupai):
                     out='0'
                     for i in self.player.shoupai:
                         if show_pai(self.PAI,i,'pai')=='杀':
                             out='1'
                             break                    
                 else:
                     out='0'
             elif self.player.name=='夏侯惇' and self.player.adv.name=='小乔' and self.player.myround ==1:
                 out='0'
         elif state=='askforShan':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = max(D,key=D.get)
         elif state=='app_NAPAI':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = max(D,key=D.get) # get the key with the least value
         elif state=='moveCHAI':
             out='1'
             if len(self.player.adv.armor_pai)>0:
                 out = '1'
             elif len(self.player.adv.shoupai)>0:
                 out = '2'
         elif state=='app_QIPAI':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = max(D,key=D.get) # get the key with the least value
         elif state=='useHANBING':
             if self.player.adv.name in {'郭嘉','夏侯惇'} and len(self.player.adv.shoupai)>=2:
                 out='1'
             else:
                 out='0'
         elif state=='花色':
             out='4'
             print out
         elif state=='askforBlack':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = min(D,key=D.get)
         elif state=='天命':
             out=''
         elif state=='askforTAO':
             target = args[0]
             if target=='self' and len(available)>0:
                 out = available.keys()[0]
             else:
                 out=''
         elif state=='国色':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = min(D,key=D.get) # get the key with the least value
         elif state=='观星':
             out='1'
         elif state=='拼点':
             for i in available:
                 D[i]=self.app_rank_QIPAI(available,i)
             out = min(D,key=D.get)
         elif state=='强袭':
             if len(available)>0:
                 for i in available:
                     D[i]=self.app_rank_QIPAI(available,i)
                 out = min(D,key=D.get)
     if self.player.step>len(self.player.shoupai)+5 and state=='CHUPAI':
         out=''
     print out
     return str(out)
    ("(x,y)", "($x, $y)"),
])

#Create figure
p = figure(plot_width=1300, plot_height=400, x_axis_type='datetime',
           title="Approval vs. Number of Victims")

#Add labels
p.xaxis.axis_label="Time"
p.yaxis.axis_label="No. of Victims"

#Add an extra y axis
p.extra_y_ranges = {"Approval": Range1d(start=0, end=1)}

#Add to the figure and name it  
p.add_layout(LinearAxis(y_range_name="Approval",axis_label="Approval %"), 'right')

#Add data
p.line(x=dates, y=app,alpha=1,y_range_name="Approval", legend="Approval Rating")
p.line(x=dates,y=victims,color="Red",legend="Number of Victims")


#Add Hover Tool
p.add_tools(hover)

#Move the legend
p.legend.location="top_left"

show(p)

    def app_damage(self,O,T,damage_type):
        '''
        一切O对T造成伤害经过此函数
        '''
        
        if damage_type =='杀':
            if T.armor() == '仁王盾' and O.weapon()!='青钢剑':
                if self.PAI[self.PD.ZM[-1]][0][0] in {'B','C'} or (T.name == '小乔' and self.PAI[self.PD.ZM[-1]][0][0] in {'C'}):
                    return
            elif O.weapon() == '寒冰剑' and len(T.shoupai)>0:
                var = API(O, {''},'useHANBING', O.name+'是否使用寒冰剑','self')
                if len(var)>0:
                    self.useHANBING(O,T)
                    return
            if O.name=='祝融' and len(O.shoupai)>0 and len(T.shoupai)>0:
                var = API(O, {''},'cast', '是否发动技能')
                if len(var)>0:
                    print '祝融: 尝尝我飞刀的厉害'
                    if self.app_PINDIAN(O,T): # 如果拼点赢了
                        self.app_NAPAI(O,T)
            if O.name=='许褚' and O.special==1:
                T.hp-=1
                print T.name+'受到1点伤害,伤害来源:'+O.name
        elif damage_type=='决斗':
            if O.name=='许褚' and O.special==1:
                T.hp-=1
                print T.name+'受到1点伤害,伤害来源:'+O.name
                
        if T.name =='小乔':
            var = API(T,['','1'],'cast', '是否使用天香?')
            if len(var)>0:
                available = show(T,self,'天香')
                while 1:
                    var = API(T,available,'QIPAI',"请选择天香牌")
                    if var =='':
                        break
                    elif var.isdigit() and int(var) in available:
                        self.PD.QP.append(self.pop_shoupai(T,int(var)-1))
                        self.app_damage(O,O,'')
                        for i in range(O.hp_top-O.hp):
                            O.shoupai.append(self.PD.MOPAI())
                        return        
        T.hp-=1
        print T.name+'受到1点伤害,伤害来源:'+O.name
        print T.name+'当前生命值:'+str(T.hp)
        lived = self.hp_check(T)
        if lived == 0:
            return
        if T.name=='郭嘉' and T.hp>0:
            T.shoupai.append(self.PD.MOPAI())
            T.shoupai.append(self.PD.MOPAI())
        elif T.name=='曹操' and T.hp>0:
            var = API(T, ['','1'],'cast', '是否发动奸雄?')
            if len(var)>0:
                print '曹操:宁教我负天下人,休叫天下人负我'
                T.shoupai+=self.PD.ZM
                self.PD.ZM=[]
        elif T.name=='司马懿' and T.hp>0:
            self.app_NAPAI(T,O)
            print '下次注意点'
        elif T.name=='夏侯惇' and T.hp>0:
            var = API(T, ['','1'],'cast', '是否使用刚烈?')
            if len(var)>0:
                self.PD.QP+=self.PD.ZM
                self.PD.ZM=[]
                print '以彼之道,还施彼身'
                temp=self.PD.MOPAI()
                self.PD.QP.append(temp)
                print '判定为'+show_pai(self,temp,'all')
                if self.PAI[temp][0][0]!='R':
                    if len(O.shoupai)>=2:
                        var = API(O, ['','1'],'cast', '是否弃两张手牌免除伤害?')
                        if len(var)>0:
                            while 1:
                                available = show(O,self,'选择任意手牌')
                                var = API(O, available,'QIPAI', "请出第一张牌")
                                if var =='':
                                    self.app_damage(T,O,'')
                                    break
                                elif var.isdigit() and int(var) in available:
                                    self.PD.QP.append(self.pop_shoupai(O,int(var)-1))
                                    break
                            while 1:
                                available = show(O,self,'选择任意手牌')
                                var = API(O, available,'QIPAI', "请出第二张牌")
                                if var =='':
                                    self.app_damage(T,O,'')
                                    O.shoupai.append(self.PD.QP.pop(-1))
                                    break
                                elif var.isdigit() and int(var) in available:
                                    self.PD.QP.append(self.pop_shoupai(O,int(var)-1))
                                    break
                        else:
                            self.app_damage(T,O,'')
                    else:
                        self.app_damage(T,O,'')

        if O.name == '魏延' and O.hp<O.hp_top:
            temp=self.PD.MOPAI()
            self.PD.QP.append(temp)
            print '判定为'+show_pai(self,temp,'all')
            if self.PAI[temp][0][0] in {'B','C'}:
                print '魏延:真是美味啊'
                O.hp+=1
                n = all[empty[index][0]] + 1
            if n != 10:
                all[empty[index][0]] = n
            line = ligne(all)
            column = colonne(line)
            sq = carre(all)
            verif_all = verif_line(line) or verif_column(
                column) or verif_square(sq)
            if verif_all == True:
                n += 1
                if n == 10:
                    all[empty[index][0]] = "V"
                    index = index - 1
                    n = all[empty[index][0]] + 1
            else:
                index += 1
                n = 1
            tt = all
            if index == len(empty):
                return tt
            show(line)

    if len(empty) != 0:
        final = backtrack(empty)
    line = ligne(all)
    show(line)
else:
    print("base puzzle contains an error")
end = time.time()
print(end - start)
Beispiel #23
0
def main():
    # 发女朋友
    send()
    # 秀恩爱
    show()
    def C(self,O,T):
        if O.name=='黄盖':
            O.hp-=1
            self.PAI.hp_check(O)
            O.shoupai.append(self.PD.MOPAI())
            O.shoupai.append(self.PD.MOPAI())
            valid=1
        elif O.name=='典韦':
            available = show(O,self.PAI,'强袭')
            var = API(O, available,'强袭','强袭弃牌')
            while 1:
                if var=='':
                    O.hp-=1
                    self.PAI.hp_check(O)
                    self.PAI.app_damage(O,T,'')
                    self.PAI.hp_check(T)
                    break
                elif var=='w' and len(O.weapon_pai)>0:
                    self.PD.QP.append(O.weapon_pai.pop(0))
                    self.PAI.app_damage(O,T,'')
                    self.PAI.hp_check(T)
                    break
                elif var.isdigit() and int(var) in available:
                    self.PD.QP.append(O.shoupai.pop(int(var)))
                    self.PAI.app_damage(O,T,'')
                    self.PAI.hp_check(T)
                    break            
            valid=1
        elif O.name=='关羽':
            available = show(O,PAI,'求红')
            if len(O.weapon_pai)>0 and self.PAI.PAI[O.weapon_pai[0]][0] in {'R','F'}:
                print 'w   武器'
            var = API(O, available,'askforRed', '选张红')
            while 1:
                if var=='':
                    valid=0
                    break
                elif var=='w':
                    if self.PAI.PAI[O.weapon_pai[0]][0] in {'R','F'}:
                        self.PD.ZM.append(O.weapon_pai.pop(0))
                        return PAI.move(move,self,self.adv)
                    else:
                        print O.name+'无效的出牌'
                elif var.isdigit() and int(var) in available:
                    self.PD.ZM.append(O.shoupai.pop(int(var)-1))
                    return PAI.move(move,self,self.adv)
                else:
                    print O.name+'无效的出牌'
            valid=1
            self.PAI.moveSha(O,T)
        elif O.name=='甘宁':
            available = show(O,PAI,'求黑')
            if len(O.weapon_pai)>0 and self.PAI.PAI[O.weapon_pai[0]][0] in {'B','C'}:
                print 'w   武器'
            if len(O.armor_pai)>0 and self.PAI.PAI[O.armor_pai[0]][0] in {'B','C'}:
                print 'q   防具'
            var = API(O, available,'askforBlack', '选张黑')
            while 1:
                if var=='':
                    valid=0
                    break
                elif var=='w':
                    if self.PAI.PAI[O.weapon_pai[0]][0] in {'B','C'}:
                        self.PD.ZM.append(O.weapon_pai.pop(0))
                        return PAI.move(move,self,self.adv)#move('决斗',O,T)# valid, lived
                    else:
                        print '无效的出牌'
                elif var=='q':
                    if self.PAI.PAI[O.armor_pai[0]][0] in {'B','C'}:
                        self.PD.ZM.append(O.armor_pai.pop(0))
                        return PAI.move(move,self,self.adv)#move('决斗',O,T)# valid, lived
                    else:
                        print '无效的出牌'            
                elif var.isdigit() and int(var) in available:
                    self.PD.ZM.append(O.shoupai.pop(int(var)-1))
                    return PAI.move(move,self,self.adv)#move('决斗',O,T)# valid, lived
                else:
                    print '无效的出牌'

        elif O.name=='孙权':
            l = len(O.shoupai)+len(O.weapon_pai)+len(O.armor_pai)
            mopaitime=0
            if l>0:
                while l>=1 and mopaitime==0:
                    available = show(O,self.PAI,'选择所有牌')
                    var1 = API(O, available,'QIPAI', '选择制衡牌1')
                    if var1=='':
                        return 0,1
                    elif var1.isdigit() and int(var1) in available:
                        temp1 = O.shoupai.pop(int(var1)-1)
                        mopaitime+=1
                        print var1
                        break
                    elif var1=='w' and len(O.weapon_pai)>0:
                        temp1 = O.weapon_pai.pop(0)
                        mopaitime+=1
                        break
                    elif var1=='q' and len(O.armor_pai)>0:
                        temp1 = O.armor_pai.pop(0)
                        mopaitime+=1
                        break
                while l>=2 and mopaitime==1:
                    available = show(O,self.PAI,'选择所有牌')
                    var2 = API(O, available,'QIPAI','选择制衡牌2')
                    if var2=='':
                        break
                    elif var2.isdigit() and int(var2) in available:
                        temp2 = O.shoupai.pop(int(var2)-1)
                        O.shoupai.append(self.PD.MOPAI())
                        break
                    elif var2=='w' and len(O.weapon_pai)>0:
                        temp2 = O.weapon_pai.pop(0)
                        O.shoupai.append(self.PD.MOPAI())
                        break
                    elif var2=='q' and len(O.armor_pai)>0:
                        temp2 = O.armor_pai.pop(0)
                        O.shoupai.append(self.PD.MOPAI())
                        break
                try:
                    if O.adv.name=='孙尚香' and self.PAI.LEIXING[self.PAI.PAI[temp1][1]] in {'wuqi','fangju'}:
                            self.adv.shoupai.append(temp1)
                    else:
                        self.PD.QP.append(temp1)
                except Exception,e:
                    print str(e)
                try:
                    if O.adv.name=='孙尚香' and self.PAI.LEIXING[self.PAI.PAI[temp2][1]] in {'wuqi','fangju'}:
                        self.adv.shoupai.append(temp2)
                    else:
                        self.PD.QP.append(temp2)
                except Exception,e:
                    print str(e)
                if mopaitime==1:
                    O.shoupai.append(self.PD.MOPAI())
                valid=1