def get_card(self): print(self.name, "的摸牌阶段") if (self.max_hp - self.hp <= 1): for i in range(0, 2): self.has_card.append(cd.get_new_card()) else: print("%s发动技能【再起】获得了:" % (self.name)) for i in range(self.max_hp - self.hp): tmp = cd.get_new_card() tmp.show() if (tmp.type == 1): print(" %s回复1点体力" % (self.name), end="") self.hp += 1 else: self.has_card.append(tmp) print()
def __init__(self, name, hp, gender, country, skill=["杀","火杀","雷杀"]): self.name = name #名称 self.hp = hp #体力 self.max_hp = hp #体力上限 self.drink = 0 #有没有使用酒 self.use_kill = 0 #使用了多少杀 self.has_card = [] #手牌 self.gender = gender # 武器,防具,+1,-1,宝物 self.equip=[cd.Card(0,0,0,1)] for i in range(0,4): self.equip.append(cd.Card(0,0,0,0)) self.judge = [] self.get_in = [1,1,1,1,1,1] self.pos = 0 self.seat = 0 self.country = country self.dead = 0 self.skill = skill self.on_card = [] #武将牌上的牌 self.flip = 0 #是否翻面 self.connect = 0 #是否横置 self.attack_dis = 0 #是否有距离-1特性 self.defence_dis = 0 #是否有距离+1特性 self.auto = 0 # 是否为电脑 self.chosen = [0]*120 #手牌是否被选中 self.pl_chosen = [0]*120 #武将是否被选中 self.using_limit = 0 #出牌阶段是否可以打出 for i in range(4): self.has_card.append(cd.get_new_card()) self.skill_init()
def in_judge(self): #print(self.name, "的判定阶段") for i in range(0,len(self.judge)): if(self.need(18,self) != 0): continue item = self.judge[i] tmp = cd.get_new_card() print("%s判定结果:"%(cd.card_nm[item.id]),end=" ") tmp.show() print() if(item.id == 19): self.get_in[3]= (tmp.type == 1) if(self.get_in[3] == 0): print("%s错过了出牌阶段"%(self.name)) elif(item.id == 20): self.get_in[2] = (tmp.type == 2) if (self.get_in[2] == 0): print("%s错过了摸牌阶段" % (self.name)) elif(item.id == 21): if(tmp.type == 0 and tmp.num>1 and tmp.num<10): self.lost_hp(3,self) else: for i in range(self.pos,len(pl.player_in_game)): if(pl.player_in_game[i].dead == 0): self.judge.append(item) break for i in range(self.pos): if(pl.player_in_game[i].dead == 0): self.judge.append(item) break self.judge = []
def __init__(self, situation=default_situation): """situation = (name, hp, gender, country)""" name, hp, gender, country = situation self.name = name # 名称 self.hp = hp # 体力 self.max_hp = hp # 体力上限 self.drink = 0 # 有没有使用酒 self.use_kill = 0 # 使用了多少杀 self.has_card = [] # 手牌 self.gender = gender # 武器,防具,+1,-1,宝物 self.equip = [cd.Card(0, 0, 0, 1)] for i in range(0, 4): self.equip.append(cd.Card(0, 0, 0, 0)) self.judge = [] self.get_in = [1, 1, 1, 1, 1, 1] self.pos = 0 #出牌顺序 self.seat = 0 #显示的座次 self.country = country self.dead = 0 self.skill = ["杀", "火杀", "雷杀"] self.on_card = [] # 武将牌上的牌 self.flip = 0 # 是否翻面 self.connect = 0 #是否横置 self.attack_dis = 0 # 是否有距离-1特性 self.defence_dis = 0 # 是否有距离+1特性 self.auto = 1 # 是否为电脑 self.fire_col = 1000 #集火系数(死亡为0) for i in range(4): self.has_card.append(cd.get_new_card())
def get_card(self): print(self.name, "的摸牌阶段") num = 2 if (len(self.has_card) < self.max_hp + 2): print("%s发动技能【解锁】" % (self.name)) for item in pl.player_in_game: y = item.pos if (self.pos == y or item.dead == 1): continue tmp = cd.get_new_card() print("%s获得了" % (item.name), end="") tmp.show() print() pl.player_in_game[y].has_card.append(tmp) num += 1 for i in range(0, num): self.has_card.append(cd.get_new_card())
def get_card(self): print(self.name, "的摸牌阶段") num = 2 if ((len(self.skill_name) >= 3)): print("%s发动技能【英姿】" % (self.name)) num += 1 for i in range(0, num): self.has_card.append(cd.get_new_card())
def get_card(self): self.has_skill = 0 print(self.name, "的摸牌阶段") if (self.max_hp > 2 * self.hp): print("%s发动了技能【厚颜】并摸了%d张牌" % (self.name, min(4, max(2, int(self.max_hp // self.hp))))) self.has_skill = min(4, max(2, int(self.max_hp // self.hp))) for i in range(0, min(4, max(2, int(self.max_hp // self.hp)))): self.has_card.append(cd.get_new_card())
def end(self): if (self.skill_type == 1): print("%s发动技能%s获得了" % (self.name, self.skill_name[1]), end=" ") self.flip ^= 1 self.hp = self.hp + 1 tmp = cd.get_new_card() tmp.show() print() self.has_card.append(tmp)
def judge_skill(self, now_card): print("%s发动了技能【失聪】" % (self.name)) tmp = cd.get_new_card() now_card.show() print(" 判定结果为:", end=" ") tmp.show() print() if (now_card.type % 2 == tmp.type % 2): print("%s无效" % (cd.card_nm[now_card.id])) return 0 return 1
def used(self, now_card): if (now_card.id < 4): self.use_kill = 1 self.drink = 0 elif (now_card.id > 6 and now_card.id < 17 and self.skill_type == 2): print("%s发动技能%s获得了" % (self.name, self.skill_name[2]), end=" ") tmp = cd.get_new_card() tmp.show() print() self.has_card.append(tmp) return 1
def get_card(self): print("%s发动技能【吟诵】" % (self.name)) used = [] while (len(used) < 4): tmp = cd.get_new_card() print("判定结果为:", end="") tmp.show() print() if (tmp.type in used): break used.append(tmp.type) self.has_card.append(tmp) can_aimed = 0 for item in pl.player_in_game: if (item.dead == 1 or item.pos == self.pos): continue can_aimed += 1 tot = min(len(used), can_aimed) print("%s可指定%d个目标" % (self.name, tot)) for i in range(max(0, 2 - tot)): self.has_card.append(cd.get_new_card())
def response(self, evt): if (evt[0] == 8): print(self.name, ":深表同情") if (evt[0] == 2): now_card = evt[3] if (evt[1].pos == self.pos or evt[2].pos == self.pos): if ((now_card.id in [1, 2, 3] and now_card.type % 2 == 1) or now_card.id == 7): print("%s发动技能【激昂】并获得了" % (self.name)) tmp = cd.get_new_card() tmp.show() print() self.has_card.append(tmp)
def need(self, need_id, user): op.delay(300) pl.cd_score[self.pos] += 0 if (need_id == 4 and self.equip[1].id == 32 and user.equip[0].id != 25): print("%s使用了[%s]" % (self.name, cd.card_nm[self.equip[1].id])) tmp = cd.get_new_card() print("判定结果:", end=" ") tmp.show() print() if (tmp.type == 1 or tmp.type == 3): print("[%s]生效" % (cd.card_nm[self.equip[1].id])) tmp.id = 4 return tmp if (need_id == 5): for i in range(0, len(self.has_card)): if (self.has_card[i].type % 2 == 1): tmp = self.has_card.pop(i) cd.throw_queue.append(tmp) st = cd.card_nm[need_id] print("%s发动了技能【急救】打出了%s" % (self.name, st)) return tmp for i in range(len(self.equip)): item = self.equip[i] if (item.type % 2 == 1): tmp = item cd.throw_queue.append(tmp) self.equip[i] = cd.Card(0, 0, 0, i == 0) st = cd.card_nm[need_id] print("%s发动了技能【急救】打出了%s" % (self.name, st)) return tmp for i in range(0, len(self.has_card)): if (self.has_card[i].id == need_id): if (need_id == 4): tmp = ["向后一躲,避开了这一招", "片刻之间已侧身避过", "忽的跳出,早避开这招"] st = tmp[random.randint(0, 2)] print("%s%s," % (self.name, st)) elif (need_id == 18): st = "早就看出端倪,轻松化开" print("%s%s," % (self.name, st)) elif (need_id in [1, 2, 3]): st = self.skill[need_id] print("%s接了一记“%s”" % (self.name, st)) else: st = cd.card_nm[need_id] print("%s打出了%s" % (self.name, st)) tmp = self.has_card.pop(i) cd.throw_queue.append(tmp) # op.play(self) return tmp pl.cd_score[self.pos] -= 0 return 0
def prepare(self): print(self.name, "的准备阶段") if (len(self.skill_name) < 3): if (self.hp == 1): print("%s发动技能【魂姿】减少1点体力上限并获得了技能【英魂】,【英姿】" % (self.name)) self.skill_name = [("激昂", 1, 0), ("英魂", 1, 0), ("英姿", 1, 0)] self.skill_init() self.max_hp -= 1 self.hp = min(self.hp, self.max_hp) if (len(self.skill_name) >= 3): num = self.max_hp - self.hp if (num < 1): return x = -1 while (x == -1): op.choices_num = [0] * 120 x = op.judge(("是否发动技能【英魂】?"), 360, 30, ["确定", "取消"], 400, 30, 0) if (x == 1): return x = -1 self.pl_can_choose = 1 while (x == -1 or sum(self.pl_chosen) < 1): op.choices_num = [0] * 120 x = op.judge( ("请选择一名其他角色发动【英魂】"), 360, 30, ["摸%d弃1" % (num), "摸1弃%d" % (num)], 400, 30, 0) for i in range(len(pl.player_in_game)): item = pl.player_in_game[i] if (self.pl_chosen[i] != 0): for _ in range(num * (1 - x)): item.has_card.append(cd.get_new_card()) if (x == 0): item.throw(1) else: maxn = len(item.has_card) if (maxn >= num): item.throw(num) else: item.throw(maxn) for i in range(4, -1, -1): #实在不够弃装备 if (maxn <= num): break if (item.equip[i].id != 0): tmp = item.equip[i] cd.throw_queue.append(tmp) item.equip[i] = cd.Card(0, 0, 0, i == 0) maxn -= 1 break
def response(self, evt): if (evt[0] == 8): print(self.name, ":深表同情") if (evt[0] == 4): if (evt[3].country == self.country): for i in range(evt[3].max_hp - evt[3].hp): print("%s发动技能【分身】获得了" % (self.name)) tmp = cd.get_new_card() tmp.show() print() self.has_card.append(tmp) if (evt[0] == 3): if (evt[1].pos == self.pos and evt[3].id in [1, 2, 3, 7]): if (len(self.has_card) > 0): print("%s发动技能【天照】" % (self.name)) pl.player_in_game[evt[2].pos].lost_hp(1, self)
def need(self, need_id, user): # print("需要",self.name,"出",cd.card_nm[need_id]) op.delay(300) if (need_id == 4 and self.equip[1].id == 32 and user.equip[0].id != 25): print("%s使用了[%s]" % (self.name, cd.card_nm[self.equip[1].id])) tmp = cd.get_new_card() print("判定结果:", end=" ") tmp.show() print() if (tmp.type == 1 or tmp.type == 3): print("[%s]生效" % (cd.card_nm[self.equip[1].id])) tmp.id = 4 return tmp if (need_id == 4): change = self.multi_need([1, 2, 3]) if (change != 0): print("%s发动技能【龙胆】" % (self.name)) if (len(user.has_card) > 0): print("%s发动技能【冲阵】并获得%s的一张手牌" % (self.name, user.name)) tmp_card = user.has_card.pop(random.randint(0, len(user.has_card) - 1)) self.has_card.append(tmp_card) return change for i in range(0, len(self.has_card)): if (self.has_card[i].id == need_id): if (need_id == 4): tmp = ["向后一躲,避开了这一招", "片刻之间已侧身避过", "忽的跳出,早避开这招"] st = tmp[random.randint(0, 2)] print("%s%s," % (self.name, st)) elif (need_id == 18): st = "早就看出端倪,轻松化开" print("%s%s," % (self.name, st)) elif (need_id in [1, 2, 3]): st = self.skill[need_id] print("%s接了一记“%s”" % (self.name, st)) else: st = cd.card_nm[need_id] print("%s打出了%s" % (self.name, st)) tmp = self.has_card.pop(i) cd.throw_queue.append(tmp) # op.play(self) return tmp return 0
def get_card(self): print(self.name, "的摸牌阶段") print("%s发动技能【浩劫】" % (self.name)) tot = 0 for item in player_in_game: y = item.pos if (y == self.pos or item.dead == 1 or len(item.has_card) == 0): continue tmp = item.has_card random.shuffle(tmp) tmp_card = tmp[0] print("得到了%s的" % (item.name), end="") tmp_card.show() print() self.has_card.append(tmp_card) player_in_game[y].has_card.remove(tmp_card) tot += 1 print("还可以摸%d张牌" % (2)) for i in range(2): self.has_card.append(cd.get_new_card())
def response(self, evt): if (evt[0] == 8): print(self.name, ":深表同情") if(evt[0] == 4): if(evt[3].country == self.country): x = -1 while (x == -1): op.choices_num = [0] * 120 x = op.judge(("是否发动技能【分身】获得%d张牌" % (evt[3].max_hp - evt[3].hp)), 360, 30, ["确定","取消"], 400, 30, 0) if(x == 0): for i in range(evt[3].max_hp - evt[3].hp): print("%s发动技能【分身】获得了" % (self.name)) tmp = cd.get_new_card() tmp.show() print() self.has_card.append(tmp) if (evt[0] == 3): if (evt[1].pos == self.pos and evt[3].id in [1,2, 3,7,8]): if (len(self.has_card) > 0): print("%s发动技能【天照】" % (self.name)) pl.player_in_game[evt[2].pos].lost_hp(1, self)
def need(self,need_id,user): #print("需要",self.name,"出",cd.card_nm[need_id]) op.delay(1000) if(need_id == 4 and self.equip[1].id == 32 and user.equip[0].id != 25): print("%s使用了[%s]" % (self.name, cd.card_nm[self.equip[1].id])) tmp = cd.get_new_card() print("判定结果:", end=" ") tmp.show() print() if(tmp.type == 1 or tmp.type == 3): print("[%s]生效"%(cd.card_nm[self.equip[1].id])) tmp.id = 4 return tmp for i in range(0,len(self.has_card)): if(self.has_card[i].id == need_id): op.choices_num = [0] * 120 x = op.judge(("是否响应%s打出【%s】?"%(user.name,cd.card_nm[need_id])), 380,30,["确定","取消"],420,30,0) if(x != 0): break if (need_id == 4): tmp = ["向后一躲,避开了这一招","片刻之间已侧身避过","忽的跳出,早避开这招"] st = tmp[random.randint(0,2)] print("%s%s," % (self.name, st)) elif (need_id == 18): st = "早就看出端倪,轻松化开" print("%s%s," % (self.name, st)) elif (need_id in [1, 2, 3]): st = self.skill[need_id] print("%s接了一记“%s”" % (self.name, st)) else: st = cd.card_nm[need_id] print("%s打出了%s"%(self.name,st)) tmp = self.has_card.pop(i) cd.throw_queue.append(tmp) #op.play(self) return tmp return 0
def event(self): print(self.name, "的出牌阶段") for item in self.has_card: item.show() print() print() self.can_choose = 1 self.pl_can_choose = 1 self.using_limit = 1 op.has_end,op.has_confirm,op.has_cancel = 0,0,0 op.task_queue.clear() op.task_queue.append(op.Button("结束出牌",750,400,30,op.end_stage)) op.task_queue.append(op.Button("确定", 460, 400, 30, op.confirm)) op.task_queue.append(op.Button("取消", 590, 400, 30, op.cancel)) while(op.has_end == 0 and len(self.has_card) != 0): if(self.now_card != 0): self.pl_can_choose = 1 + (self.now_card.id == 17) if(len(op.task_queue)<3): op.task_queue.append(op.Button("结束出牌", 750, 400, 30, op.end_stage)) op.task_queue.append(op.Button("确定", 460, 400, 30, op.confirm)) op.task_queue.append(op.Button("取消", 590, 400, 30, op.cancel)) op.has_confirm = 0 if (op.has_cancel == 1): op.has_cancel = 0 self.chosen = [0] * 120 self.pl_chosen = [0]*120 if(sum(self.chosen) == 1): for i in range(len(self.chosen)): if(i >= len(self.has_card)): break if(self.chosen[i] != 0): self.now_card = self.has_card[i] tot = len(pl.player_in_game) can_choose_seat = [0]*120 for item in pl.player_in_game: if(item.dead == 0 and cd.aim(self.now_card,self,item)): can_choose_seat[item.seat] = 1 + (item.auto==0) for i in range(1, tot + 1): tx = (i - (i> pl.gamer_pos)) * 1000 / tot ty = max(130, 0.001 * tx * tx - 1 * tx + 350) tx -= 60 ty -= 80 if (can_choose_seat[i - 1]==1): pygame.draw.rect(op.screen, [255, 0, 0], [tx - 1, ty - 1, 122, 162], 1) elif(can_choose_seat[i - 1]==2): pygame.draw.rect(op.screen, [255, 0, 0], [849, 439, 151, 161], 1) if(self.now_card == 0): continue if(op.has_confirm!= 0): if (sum(self.pl_chosen) != 0): self.has_card.remove(self.now_card) for i in range(tot): item = pl.player_in_game[i] if (self.pl_chosen[i] != 0): # cd.throw_queue.append(self.now_card) if (item.be_aimed(self.now_card, self) != 0): cd.use(self.now_card, self, item) self.used(self.now_card) else: print("无效~") self.pl_chosen = [0] * 120 self.chosen = [0] * 120 self.now_card = 0 elif(self.now_card.id in [5,6,11,12,13,14,15,17] or self.now_card.id > 20): #cd.throw_queue.append(self.now_card) self.has_card.remove(self.now_card) if(self.now_card.id == 17): self.has_card.append(cd.get_new_card()) print("%s重铸了"%(self.name)) self.now_card.show() print() else: cd.use(self.now_card, self,self) self.used(self.now_card) self.pl_chosen = [0] * 120 self.chosen = [0] * 120 self.now_card = 0 if(pl.game_over() == 1):break op.task_queue.clear() self.using_limit = 0
def get_card(self): print(self.name, "的摸牌阶段") for i in range(0, 2): self.has_card.append(cd.get_new_card())
def skill_0(self): print("%s发动技能【作弊】" % (self.name)) self.has_card.append(cd.get_new_card()) self.skill_name = [("分身",1,0),("天照",1,0)] self.skill_init()
def get_card(self): print(self.name, "的摸牌阶段") if (self.hp < self.max_hp): print("%s发动技能【绝境】并摸了%d张牌" % (self.name, 2 + self.max_hp - self.hp)) for i in range(0, 2 + self.max_hp - self.hp): self.has_card.append(cd.get_new_card())