python解决三国杀头脑风暴(8人 大乔)

题目:假设整副牌只有“杀”,8名武将全是大乔,而且规定不分主忠反内,且只能杀下家,则几号位的大乔最先死亡?最后胜利的是几号位大乔?


解析:

1. 技能分析:大乔两个技能【国色】和【流离】

国色:出牌阶段,你可以将你的任意方块花色的牌当【乐不思蜀】使用。

流离:当你成为【杀】的目标时,你可以弃一张牌,并将此【杀】转移给你攻击范围内的另一名角色。(该角色不得是【杀】的使用者)


本题中【国色】技能的使用,应该会调整大乔的死亡顺序。这里我们假设不使用【国色】。

2. 根据以上假设,我们可以得出大乔可以摸牌,出牌,发动技能。

于是设计大乔的类为:

class daqiao:
    pai=0;
    xue=3;
    name="";
    def __init__(self,name,pai): #设置名称
        self.name = name+1;
        self.pai = pai;
    def get(self): #摸牌
        self.pai+=2;
        print str(self.name)+": Get 2 codes"
        print str(self.name)+": have code "+str(self.pai);
    def put(self): #出牌
        self.pai-=1;
        print str(self.name)+": Out 1 code"
        print str(self.name)+": have code "+str(self.pai);
    def skill(self): #发动技能
        if self.pai != 0:
            self.pai-=1;
            print str(self.name)+": skill put 1"
            print str(self.name)+": have code "+str(self.pai);
            return 1;
        else:
            self.xue -=1;
            print str(self.name)+": blood-1"
            print str(self.name)+": have blood "+str(self.xue);
            return 0;


3. 设计整个游戏的流程

流程:开局每人手里有4张牌,每人摸牌阶段可摸2张手牌,每人出牌阶段可出一张手牌。上家只能出一张手牌杀下家,下家有手牌即可发动流离。

def Server():
    mylist=[];				#位置
    for i in range(0,8):
        mylist.append(daqiao(i,4));	#加入游戏,初始手牌4张
    mopaiid=0;
    maxid=8;
    attack=0;
    while(1):
        if len(mylist)==1:			#如果仅剩下一名玩家,则跳出循环
            break;
        if mopaiid % maxid == 0:
            mopaiid %= maxid;
        mylist[mopaiid].get();		#上家摸牌
        mylist[mopaiid].put();		#上家出牌杀下家
        attack=mopaiid+1;
        if (attack)%maxid==0:
            attack %= maxid;
	#下家发动流离
        while mylist[attack].skill():		
            attack+=1;
            if (attack)%maxid==0:
                attack %= maxid;
	#手牌数不能大于血量
        if mylist[mopaiid].pai > mylist[mopaiid].xue:	
            mylist[mopaiid].pai=mylist[mopaiid].xue;
	#血量为零,玩家死亡,退出游戏
        if mylist[attack].xue == 0:					
            print str(mylist[attack].name)+":dead"
            mylist.pop(attack);
            maxid -= 1;
        mopaiid += 1;
    print str(mylist[0].name)+":Winer"


最终结果


展开阅读全文

没有更多推荐了,返回首页