题目:假设整副牌只有“杀”,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"
最终结果