Python练习01-对战小游戏
近期在学习Python,其中有一道练习题,写一个对战小游戏,随机人物,随机属性(血量、攻击)、指定我方人物出场顺序,三局两胜,代码如下:
import time, 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, 180)
attack = random.randint(30, 50)
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]))
print('--------------------------------------------')
print('电脑敌人:')
# 展示敌方的3个角色
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
order_dict = {}
for i in range(3):
order = int(input('你想将 %s 放在第几个上场?(输入数字1~3)' % players[i]))
order_dict[order] = players[i]
players = []
for i in range(1, 4):
players.append(order_dict[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()
运行结果如下:
----------------- 角色信息 -----------------
你的人物:
【宁次】 血量:119 攻击:31
【大和】 血量:128 攻击:41
【佐助】 血量:145 攻击:30
--------------------------------------------
电脑敌人:
【角都】 血量:176 攻击:41
【鼬】 血量:129 攻击:45
【飞段】 血量:140 攻击:39
--------------------------------------------
你想将 【宁次】 放在第几个上场?(输入数字1~3)1
你想将 【大和】 放在第几个上场?(输入数字1~3)3
你想将 【佐助】 放在第几个上场?(输入数字1~3)2
我方角色的出场顺序是:【宁次】、【佐助】、【大和】
敌方角色的出场顺序是:【角都】、【鼬】、【飞段】
----------------- 【第1局】 -----------------
玩家角色:【宁次】 vs 敌方角色:【角都】
【宁次】 血量:119 攻击:31
【角都】 血量:176 攻击:41
--------------------------------------------
请按回车键继续。
【宁次】发起了攻击,【角都】剩余血量145
【角都】发起了攻击,【宁次】剩余血量78
--------------------------------------------
【宁次】发起了攻击,【角都】剩余血量114
【角都】发起了攻击,【宁次】剩余血量37
--------------------------------------------
【宁次】发起了攻击,【角都】剩余血量83
【角都】发起了攻击,【宁次】剩余血量-4
--------------------------------------------
悲催,敌人把你干掉了!
----------------- 【第2局】 -----------------
玩家角色:【佐助】 vs 敌方角色:【鼬】
【佐助】 血量:145 攻击:30
【鼬】 血量:129 攻击:45
--------------------------------------------
请按回车键继续。
【佐助】发起了攻击,【鼬】剩余血量99
【鼬】发起了攻击,【佐助】剩余血量100
--------------------------------------------
【佐助】发起了攻击,【鼬】剩余血量69
【鼬】发起了攻击,【佐助】剩余血量55
--------------------------------------------
【佐助】发起了攻击,【鼬】剩余血量39
【鼬】发起了攻击,【佐助】剩余血量10
--------------------------------------------
【佐助】发起了攻击,【鼬】剩余血量9
【鼬】发起了攻击,【佐助】剩余血量-35
--------------------------------------------
悲催,敌人把你干掉了!
----------------- 【第3局】 -----------------
玩家角色:【大和】 vs 敌方角色:【飞段】
【大和】 血量:128 攻击:41
【飞段】 血量:140 攻击:39
--------------------------------------------
请按回车键继续。
【大和】发起了攻击,【飞段】剩余血量99
【飞段】发起了攻击,【大和】剩余血量89
--------------------------------------------
【大和】发起了攻击,【飞段】剩余血量58
【飞段】发起了攻击,【大和】剩余血量50
--------------------------------------------
【大和】发起了攻击,【飞段】剩余血量17
【飞段】发起了攻击,【大和】剩余血量11
--------------------------------------------
【大和】发起了攻击,【飞段】剩余血量-24
【飞段】发起了攻击,【大和】剩余血量-28
--------------------------------------------
哎呀,你和敌人同归于尽了!
点击回车,查看比赛的最终结果
【最终结果:你输了!】
Process finished with exit code 0
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。