python_test2(函数)
田忌赛马
第一阶段:将项目1的部分代码,调整后用函数封装并调用。
第二阶段:从角色池里为双方随机选出3个角色,并随机生成血量和攻击力。
第三阶段:询问玩家角色出场顺序,并打印出来。
第四阶段:根据出场顺序和对方进行三轮PK,并输出结果。
第一阶段
将项目1的部分代码,调整后用函数封装并调用。
分析:注意变量的作用域,比方说
这两个变量如果没有套在这里面的话,输出结果会一直是平局。
import time # 展示角色 def show_role(player_life,player_attack,enemy_life,enemy_attack): print('【玩家】\n血量:%s\n攻击:%s'%(player_life,player_attack)) print('----------------------------------------------------' ) time.sleep(1) print('【敌人】\n血量:%s\n攻击:%s'%(enemy_life,enemy_attack)) print('----------------------------------------------------') # 双方PK def pk_role(player_life,player_attack,enemy_life,enemy_attack): while player_life > 0 and enemy_life > 0: player_life = player_life - enemy_attack enemy_life = enemy_life - player_attack time.sleep(1) print('你发起了攻击,【敌人】剩余血量'+str(enemy_life)) print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life)) print('----------------------------------------------------') show_result(player_life,enemy_life) # 打印战果 def show_result(player_life,enemy_life): if player_life > 0 and enemy_life <= 0: print('敌人死翘翘了,这局你赢了') elif player_life <= 0 and enemy_life > 0: print('悲催,这局敌人把你干掉了!') else: print('哎呀,这局你和敌人同归于尽了!') print('----------------------------------------------------') # (主函数)展开战斗全流程 def main(player_life,player_attack,enemy_life,enemy_attack): show_role(player_life,player_attack,enemy_life,enemy_attack) pk_role(player_life,player_attack,enemy_life,enemy_attack) main(100,35,105,33) main(120,36,100,45) main(100,35,100,35)
效果动图:
第二阶段
从角色池里为双方随机选出3个角色,并随机生成血量和攻击力。
分析:因为要随机生成角色,这些角色是我们事先存放在一个列表里的,因此我们要用到从列表随机抽取3个角色的函数,经过搜索,random.sample可以实现这个功能
import time import random player_list = ['【德玛西亚皇子】','【德玛西亚之力】','【无双剑姬】','【光辉女郎】','【暗夜猎手】','【龙血武姬】'] enemy_list = ['【诺克萨斯统领】','【诡术妖姬】','【荣耀行刑官】','【刀锋之影】','【亡灵勇士】','【嗜血猎手】'] players = random.sample(player_list,3) enemies = random.sample(enemy_list,3) player_info = {} enemy_info = {} #随机生成两种属性 def born_role(): life = random.randint(100,166) attack = random.randint(30,66) return life,attack # 给角色随机属性,并展示角色信息 def show_role(): for i in range(3): player_info[players[i]] = born_role() enemy_info[enemies[i]] = born_role() # 展示我方的3个角色 print('----------------- 角色信息 -----------------') print('你的人物:') for i in range(3): print('%s 血量:%d 攻击:%d' %(players[i],player_info[players[i]][0],player_info[players[i]][1])) #展示敌方的3个角色 print('--------------------------------------------') print('电脑敌人:') for i in range(3): print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_info[enemies[i]][0],enemy_info[enemies[i]][1])) show_role()
效果图:
第三阶段
询问玩家角色出场顺序,并打印出来。
分析:我们再建一个字典把用户给出的顺序依次放入新的字典中就可以,然后再封装一下函数(注意把玩家角色定义为全局变量,否则后面的函数无法引用)。
import time import random player_list = ['【德玛西亚皇子】','【德玛西亚之力】','【无双剑姬】','【光辉女郎】','【暗夜猎手】','【龙血武姬】'] enemy_list = ['【诺克萨斯统领】','【诡术妖姬】','【荣耀行刑官】','【刀锋之影】','【亡灵勇士】','【嗜血猎手】'] players = random.sample(player_list,3) enemies = random.sample(enemy_list,3) player_info = {} enemy_info = {} #随机生成两种属性 def born_role(): life = random.randint(100,166) attack = random.randint(30,66) return life,attack # 给角色随机属性,并展示角色信息 def show_role(): for i in range(3): player_info[players[i]] = born_role() enemy_info[enemies[i]] = born_role() # 展示我方的3个角色 print('----------------- 角色信息 -----------------') print('你的人物:') for i in range(3): print('%s 血量:%d 攻击:%d' %(players[i],player_info[players[i]][0],player_info[players[i]][1])) #展示敌方的3个角色 print('--------------------------------------------') print('电脑敌人:') for i in range(3): print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_info[enemies[i]][0],enemy_info[enemies[i]][1])) print('--------------------------------------------') input('请按回车键继续。\n') # 为了让玩家更有控制感,可以插入类似的代码来切分游戏进程。 #询问玩家我方角色的出场顺序。 def order_role(): global players test1 = {} for i in range(3): order = int(input('请选择'+ players[i] +'的出场次序')) test1[order] = players[i] players = [] for i in range(1,4): players.append(test1[i]) print('\n我方角色的出场顺序是:%s、%s、%s' % (players[0],players[1],players[2])) print('敌方角色的出场顺序是:%s、%s、%s' % (enemies[0],enemies[1],enemies[2])) def main(): show_role() order_role() main()
效果动图:
第四阶段
根据出场顺序和对方进行三轮PK,并输出结果。
分析:要定义pk的函数,以及输出结果的函数,以及对上面三个阶段的融合。
import time import random player_list = ['【德玛西亚皇子】','【德玛西亚之力】','【无双剑姬】','【光辉女郎】','【暗夜猎手】','【龙血武姬】'] enemy_list = ['【诺克萨斯统领】','【诡术妖姬】','【荣耀行刑官】','【刀锋之影】','【亡灵勇士】','【嗜血猎手】'] players = random.sample(player_list,3) enemies = random.sample(enemy_list,3) player_info = {} enemy_info = {} #随机生成两种属性 def born_role(): life = random.randint(100,166) attack = random.randint(30,66) return life,attack # 给角色随机属性,并展示角色信息 def show_role(): for i in range(3): player_info[players[i]] = born_role() enemy_info[enemies[i]] = born_role() # 展示我方的3个角色 print('----------------- 角色信息 -----------------') print('你的人物:') for i in range(3): print('%s 血量:%d 攻击:%d' %(players[i],player_info[players[i]][0],player_info[players[i]][1])) #展示敌方的3个角色 print('--------------------------------------------') print('电脑敌人:') for i in range(3): print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_info[enemies[i]][0],enemy_info[enemies[i]][1])) print('--------------------------------------------') input('请按回车键继续。\n') # 为了让玩家更有控制感,可以插入类似的代码来切分游戏进程。 #询问玩家我方角色的出场顺序。 def order_role(): global players test1 = {} for i in range(3): order = int(input('请选择'+ players[i] +'的出场次序')) test1[order] = players[i] players = [] for i in range(1,4): players.append(test1[i]) print('\n我方角色的出场顺序是:%s、%s、%s' % (players[0],players[1],players[2])) print('敌方角色的出场顺序是:%s、%s、%s' % (enemies[0],enemies[1],enemies[2])) # 角色PK def pk_role(): round = 1 score = 0 for i in range(3): # 一共要打三局 player_name = players[i] enemy_name = enemies[i] player_life = player_info[players[i]][0] player_attack = player_info[players[i]][1] enemy_life = enemy_info[enemies[i]][0] enemy_attack = enemy_info[enemies[i]][1] # 每一局开战前展示战斗信息 print('\n----------------- 【第%d局】 -----------------' % round) print('玩家角色:%s vs 敌方角色:%s ' %(player_name,enemy_name)) print('%s 血量:%d 攻击:%d' %(player_name,player_life,player_attack)) print('%s 血量:%d 攻击:%d' %(enemy_name,enemy_life,enemy_attack)) print('--------------------------------------------') input('请按回车键继续。\n') # 开始判断血量是否都大于零,然后互扣血量。 while player_life > 0 and enemy_life > 0: enemy_life = enemy_life - player_attack player_life = player_life - enemy_attack print('%s发起了攻击,%s剩余血量%d' % (player_name,enemy_name,enemy_life)) print('%s发起了攻击,%s剩余血量%d' % (enemy_name,player_name,player_life)) print('--------------------------------------------') time.sleep(1) else: # 每局的战果展示,以及分数score和局数的变化。 # 调用show_result()函数,打印返回元组中的result。 print(show_result(player_life,enemy_life)[1]) # 调用show_result()函数,完成计分变动。 score += int(show_result(player_life,enemy_life)[0]) round += 1 input('\n点击回车,查看比赛的最终结果\n') if score > 0: print('【最终结果:你赢了!】\n') elif score < 0: print('【最终结果:你输了!】\n') else: print('【最终结果:平局!】\n') # 返回单局战果和计分法所加分数。 def show_result(player_life,enemy_life): # 注意:该函数要设定参数,才能判断单局战果。 if player_life > 0 and enemy_life <= 0: result = '\n小胜一局,加把劲冲冲冲!' return 1,result # 返回元组(1,'\n敌人死翘翘了,你赢了!'),类似角色属性的传递。 elif player_life <= 0 and enemy_life > 0: result = '\n别慌,争取下把拿下!' return -1,result else : result = '\n平局了,可惜!' return 0,result # (主函数)展开战斗流程 def main(): show_role() order_role() pk_role() # 启动程序(调用主函数) main()
效果动图:
结束!

浙公网安备 33010602011771号