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()

效果动图:

 

 结束!

 

posted @ 2021-10-11 15:46  申疯疯  阅读(199)  评论(0)    收藏  举报