import random #引入随机
import easygui as g #引入easygui
a_list = lambda x : attract_type[x] #定义攻击类型对应的代码
d_list = lambda x : defeat_type[x] #定义防守类型对应的代码
r_list = lambda x : reason_type[x] #定义攻防对应原因对应的代码
attract_type = ('豪火球之术','急速冷冻','神圣攻击','情花剧毒') #建立攻击类型列表
defeat_type = ('开启‘回忆忍者’','燃烧吧,小宇宙','15秒的大无敌','兑了水的蜂蜜') #建立防守类型列表
reason_type = ('万恶的动画版火影','圣斗士','魔兽争霸','神雕侠侣') #建立攻防对应原因类型列表
a_d_dict = {'豪火球之术':'开启‘回忆忍者’','急速冷冻':'燃烧吧,小宇宙','神圣攻击':'15秒的大无敌','情花剧毒':'兑了水的蜂蜜'}
def duiying(x,y,z): #定义攻、防、原因的表征带文字的函数
return '\'%s\'对应于\'%s\', 出处为-%s' %(x,y,z) + ';' +'\n'
duiying_list = list(map (duiying,attract_type,defeat_type,reason_type)) #建立攻防原因对应文字列表
g.msgbox('这是xxx的原创游戏‘攻击与防御’',title = '攻击与防御',ok_button='开始吧,少年!',image = 'kaishi.gif' ) #名称介绍
g.msgbox('故事背景:···请移步著名独立游戏:“厕所奇遇记”···简单讲,人机互抽对方,看谁先被K.O···',title = '故事背景',ok_button='好吧,刚才是忽悠你,现在正式开始!') #内容简介
temp = g.choicebox(msg = '人类几滴血合适?', title = '站前准备', choices = (('1','2','3','4'))) #输入人类血量
hhp = int(temp) #存储人类血量
temp = g.choicebox(msg = '电脑几滴血合适?', title = '站前准备', choices = (('1','2','3','4'))) #输入电脑血量
mhp = int(temp) #存储电脑血量
temp1 = {'攻击':1,'防御':0} #初始化:‘第一步谁先攻击’
temp = g.choicebox(msg = '你是想先攻击,还是先防御?', title = '站前准备', choices = (('攻击','防御'))) #输入‘第一步谁先攻击’
p = temp1[temp] ##输入‘第一步谁先攻击’
a_d_list = '' #初始化‘攻击-防御对应类型’
for i in range(4): #调出所有攻防类型
a_d_list = a_d_list + duiying_list[i]
g.msgbox('攻击与防守列表如下:\n' + a_d_list) #显示所有攻防类型
while True: #开始游戏循环
A = random.choice(attract_type) #本轮攻击方随机选择结果(如果攻击方为电脑)
B = random.choice(defeat_type) #本轮防御方随机选择结果(如果防御方为电脑)
if p == 1: #攻击方为人类
temp = g.choicebox(msg = '少年,出招吧', title = '人类攻击阶段', choices = (attract_type)) #攻击方选择攻击招数
if B == a_d_dict[temp]: #判定攻击=防御
g.msgbox('不好意思,刚好被防御了,你出招为\'%s\',对方出招为:\'%s\',相生相克啊。'%(temp,B),title = '攻击阶段',ok_button='继续') #输出攻击=防御结果
else:
g.msgbox('攻击成功,你出招为:\'%s\'对方出招为:\'%s\',你给了对方一记老拳。'%(temp,B),title = '攻击阶段',ok_button='继续') #输出攻击>防御结果
mhp = mhp - 1 #防御方降低血量
if (mhp == 0): #检测防御方血量是否=0
g.msgbox('游戏结束,电脑已经没血了···',title = '本轮总结',ok_button='哈哈哈哈哈') #防御方血量=0,游戏结束
break #跳出循环
else:
assert ((hhp >= 0) and (mhp >=0)) #检测机制,防止血量存在负数
g.msgbox('目前人类的血量为:%s;电脑的血量为:%s 战斗还没有结束,攻防转化,人类防御,电脑攻击···' %(str(hhp),str(mhp)),title = '本轮总结',ok_button='开始下一轮') #显示转换攻防
p = p - 1 #攻防判据从人类攻击改为人类防守
if p == 0:
temp = g.choicebox(msg = '少年,防御吧,', title = '人类防御阶段', choices = (defeat_type))
if temp == a_d_dict[A]:
g.msgbox('恭喜,刚好抵挡了此次攻击,你出招为:\'%s\'对方出招为:\'%s\',旗鼓相当啊。'%(temp,A),title = '防御阶段',ok_button='继续')
else:
g.msgbox('防御失败,你出招为:\'%s\',对方出招为:\'%s\',对方黑了你一脸。'%(temp,A),title = '防御阶段',ok_button='继续')
hhp = hhp - 1
if (hhp == 0):
g.msgbox('游戏结束,人类已经没血了···',title = '本轮总结',ok_button='5555555')
break
else:
g.msgbox('目前人类的血量为:%s;电脑的血量为:%s 战斗还没有结束,攻防转化,人类攻击,电脑防御···' %(str(hhp),str(mhp)),title = '本轮总结',ok_button='开始下一轮')
p = p + 1
g.msgbox('游戏版本:0.3版本,请期待下一版',title = '结束啦',ok_button='少年,要努力ing')