1. 程式人生 > 其它 >python_test2(函式)

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

效果動圖:

結束!