1. 明确项目目标
2. 分析过程,拆解项目
3. 逐步执行,代码实现
V1.0:封装函数,自定属性
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
print('你发起了攻击,【敌人】剩余血量%s'%(enemy_life))
print('敌人向你发起了攻击,【玩家】的血量剩余%s'%(player_life))
print('-----------------------')
time.sleep(1.2)
show_result(player_life, enemy_life) #把show_result函数放在这里,就可以
#打印战果
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)
>>>
【玩家】
血量:100
攻击:35
------------------------
【敌人】
血量:105
攻击:33
-----------------------
你发起了攻击,【敌人】剩余血量70
敌人向你发起了攻击,【玩家】的血量剩余67
-----------------------
哎呀,这局你和敌人同归于尽了!
-----------------------
你发起了攻击,【敌人】剩余血量35
敌人向你发起了攻击,【玩家】的血量剩余34
-----------------------
哎呀,这局你和敌人同归于尽了!
-----------------------
你发起了攻击,【敌人】剩余血量0
敌人向你发起了攻击,【玩家】的血量剩余1
-----------------------
敌人死翘翘了,这局你赢了
-----------------------
V2.0:随机角色,随机属性
s='abcdefg'
print(random.choice(s))#随机选择一个,只能选择一个
print(random.sample(s,3))#随机选择几个值,返回的是一个list
print(random.uniform(1,10))#指定一个范围,然后选择一个小数,指定范围是整数
print(random.uniform(1.3,10.3))#指定一个范围,然后选择一个小数,指定范围是小数
>>>
f
['c', 'b', 'e']
6.7009287572155145
5.0556089679964415
角色展示信息
import random
# 生成角色名称,建立空列表存储玩家信息
player_list = ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemy_list = ['【暗黑战士】','【黑暗弩手】','【暗夜骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players = random.sample(player_list,3) # 从列表里随机选取三个元素
enemies = random.sample(enemy_list,3) # 从列表里随机选取三个元素
player_information = {} # 建立空字典,存放我方角色的信息。
enemy_information = {} # 建立空字典,存放我方角色的信息。
# 生成角色的属性
def born_role():
life = random.randint(100,180) # 从100-180随机生成整数,赋值给变量life
attack = random.randint(30,50) # 从30-50随机生成整数,赋值给变量attack
return life,attack
##生成完整角色信息
for i in range(0,3):
player_information[players[i]] = born_role()
enemy_information[enemies[i]] = born_role()
def show_role():
# 展示我方的3个角色
print('----------------- 角色信息 -----------------')
print('你的人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(players[i],player_information[players[i]][0],player_information[players[i]][1]))
print('--------------------------------------------')
#展示对手的3个角色
print('电脑人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_information[enemies[i]][0],enemy_information[enemies[i]][1]))
print('--------------------------------------------')
show_role()
V3.0:询问玩家出场顺序
增加新功能:
1.分别询问玩家每个角色的出场顺序,根据玩家的排序来战斗
2. 开始3轮战斗,并输出单轮和最终结果。
补充:列表元素调整
list1 = ['A','B','C']
item = list1.pop(2) #pop()函数,把元素弹出来存储在中间变量
list1.insert(0,item) #insert()函数,再次插入到列表中
print(list1)
>>>
['C', 'A', 'B']
补充:字典键值对的输入
dict1={}
for i in range(3):
value=input('输入键值:')
dict1[i]=value
print(dict1)
>>>
输入键值:熊熊
输入键值:能能
输入键值:豆豆
{0: '熊熊', 1: '能能', 2: '豆豆'}
import random
# 生成角色名称,建立空列表存储玩家信息
player_list = ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemy_list = ['【暗黑战士】','【黑暗弩手】','【暗夜骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players = random.sample(player_list,3) # 从列表里随机选取三个元素
enemies = random.sample(enemy_list,3) # 从列表里随机选取三个元素
player_information = {} # 建立空字典,存放我方角色的信息。
enemy_information = {} # 建立空字典,存放我方角色的信息。
# 生成角色的属性
def born_role():
life = random.randint(100,180) # 从100-180随机生成整数,赋值给变量life
attack = random.randint(30,50) # 从30-50随机生成整数,赋值给变量attack
return life,attack
##生成完整角色信息
for i in range(0,3):
player_information[players[i]] = born_role()
enemy_information[enemies[i]] = born_role()
def show_role():
# 展示我方的3个角色
print('----------------- 角色信息 -----------------')
print('你的人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(players[i],player_information[players[i]][0],player_information[players[i]][1]))
print('--------------------------------------------')
#展示对手的3个角色
print('电脑人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_information[enemies[i]][0],enemy_information[enemies[i]][1]))
print('--------------------------------------------')
input('请按回车键继续。\n') # 为了让玩家更有控制感,可以插入类似的代码来切分游戏进程。
#我方角色出场次序
def order_role():
order_dict = {}# 新建字典,存储顺序
global players
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]))
show_role()
order_role()
>>>
----------------- 角色信息 -----------------
你的人物:
【森林箭手】 血量:165 攻击:31
【光明骑士】 血量:123 攻击:31
【独行剑客】 血量:128 攻击:41
--------------------------------------------
电脑人物:
【嗜血刀客】 血量:135 攻击:45
【暗黑战士】 血量:180 攻击:43
【暗夜骑士】 血量:102 攻击:46
--------------------------------------------
请按回车键继续。
你想将 【森林箭手】 放在第几个上场?(输入数字1~3)3
你想将 【光明骑士】 放在第几个上场?(输入数字1~3)2
你想将 【独行剑客】 放在第几个上场?(输入数字1~3)1
我方角色的出场顺序是:【独行剑客】、【光明骑士】、【森林箭手】
V4.0:3V3战斗,输出战果
字典提取元素
a={1:[1,2,3,4],2:[5,6,7,8]}
print(a)
b=a[2][1]
print(b)
>>>
{1: [1, 2, 3, 4], 2: [5, 6, 7, 8]}
6
完整代码
import random
import time
# 生成角色名称,建立空列表存储玩家信息
player_list = ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemy_list = ['【暗黑战士】','【黑暗弩手】','【暗夜骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players = random.sample(player_list,3) # 从列表里随机选取三个元素
enemies = random.sample(enemy_list,3) # 从列表里随机选取三个元素
player_information = {} # 建立空字典,存放我方角色的信息。
enemy_information = {} # 建立空字典,存放我方角色的信息。
# 生成角色的属性
def born_role():
life = random.randint(100,180) # 从100-180随机生成整数,赋值给变量life
attack = random.randint(30,50) # 从30-50随机生成整数,赋值给变量attack
return life,attack
##生成完整角色信息
for i in range(0,3):
player_information[players[i]] = born_role()
enemy_information[enemies[i]] = born_role()
def show_role():
# 展示我方的3个角色
print('----------------- 角色信息 -----------------')
print('你的人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(players[i],player_information[players[i]][0],player_information[players[i]][1]))
print('--------------------------------------------')
#展示对手的3个角色
print('电脑人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_information[enemies[i]][0],enemy_information[enemies[i]][1]))
print('--------------------------------------------')
input('请按回车键继续。\n') # 为了让玩家更有控制感,可以插入类似的代码来切分游戏进程。
#我方角色出场次序
def order_role():
order_dict = {}# 新建字典,存储顺序
global players
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]))
# 注意代码的缩进、循环和判断条件的设定。
#PK过程,还是有暂停效果比较好!
# 角色PK
def pk_role():
round = 1 # 注:round表示局数。
score = 0
for i in range(3): # 一共要打三局 i依次为0,1,2
player_name = players[i] # 统一将下面会用到的数据先赋值给变量会更清晰更好管理,提取玩家和电脑角色名称
enemy_name = enemies[i]
player_life = player_information[players[i]][0]#玩家血量是字典里的值(元组)的第0个元素,以下同理,提取攻击值
player_attack = player_information[players[i]][1]
enemy_life = enemy_information[enemies[i]][0]
enemy_attack = enemy_information[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' % (enemy_name,player_name,player_life))
print('%s发起了攻击,%s剩余血量%d'% (player_name,enemy_name,enemy_life))
print('--------------------------------------------')
time.sleep(1)
#else:
if player_life > 0 and enemy_life <= 0:
print('\n敌人死翘翘了,你赢了!')
score += 1 # 分数变化(1)
elif player_life <= 0 and enemy_life > 0:
print('\n悲催,敌人把你干掉了!')
score += -1 # 分数变化(2)
# 等价于score = score - 1
else :
print('\n哎呀,你和敌人同归于尽了!')
score += 0 # 分数变化(3)
#这行不写也不影响
round += 1 # 局数+1,直到循环完3局。
input('\n点击回车,查看比赛的最终结果\n')
if score > 0:
print('【最终结果:你赢了!】\n')
elif score < 0:
print('【最终结果:你输了!】\n')
else:
print('【最终结果:平局!】\n')
def main():
show_role()
order_role()
pk_role()
main()
>>>
----------------- 角色信息 -----------------
你的人物:
【森林箭手】 血量:129 攻击:42
【光明骑士】 血量:157 攻击:34
【独行剑客】 血量:173 攻击:43
--------------------------------------------
电脑人物:
【首席刺客】 血量:141 攻击:30
【嗜血刀客】 血量:136 攻击:50
【暗黑战士】 血量:112 攻击:33
--------------------------------------------
请按回车键继续。
你想将 【森林箭手】 放在第几个上场?(输入数字1~3)1
你想将 【光明骑士】 放在第几个上场?(输入数字1~3)3
你想将 【独行剑客】 放在第几个上场?(输入数字1~3)2
我方角色的出场顺序是:【森林箭手】、【独行剑客】、【光明骑士】
----------------- 【第1局】 -----------------
玩家角色:【森林箭手】 vs 敌方角色:【首席刺客】
【森林箭手】 血量:129 攻击:42
【首席刺客】 血量:141 攻击:30
--------------------------------------------
请按回车键开始战斗。
【首席刺客】发起了攻击,【森林箭手】剩余血量99
【森林箭手】发起了攻击,【首席刺客】剩余血量99
--------------------------------------------
【首席刺客】发起了攻击,【森林箭手】剩余血量69
【森林箭手】发起了攻击,【首席刺客】剩余血量57
--------------------------------------------
【首席刺客】发起了攻击,【森林箭手】剩余血量39
【森林箭手】发起了攻击,【首席刺客】剩余血量15
--------------------------------------------
【首席刺客】发起了攻击,【森林箭手】剩余血量9
【森林箭手】发起了攻击,【首席刺客】剩余血量-27
--------------------------------------------
敌人死翘翘了,你赢了!
----------------- 【第2局】 -----------------
玩家角色:【独行剑客】 vs 敌方角色:【嗜血刀客】
【独行剑客】 血量:173 攻击:43
【嗜血刀客】 血量:136 攻击:50
--------------------------------------------
请按回车键开始战斗。
【嗜血刀客】发起了攻击,【独行剑客】剩余血量123
【独行剑客】发起了攻击,【嗜血刀客】剩余血量93
--------------------------------------------
【嗜血刀客】发起了攻击,【独行剑客】剩余血量73
【独行剑客】发起了攻击,【嗜血刀客】剩余血量50
--------------------------------------------
【嗜血刀客】发起了攻击,【独行剑客】剩余血量23
【独行剑客】发起了攻击,【嗜血刀客】剩余血量7
--------------------------------------------
【嗜血刀客】发起了攻击,【独行剑客】剩余血量-27
【独行剑客】发起了攻击,【嗜血刀客】剩余血量-36
--------------------------------------------
哎呀,你和敌人同归于尽了!
----------------- 【第3局】 -----------------
玩家角色:【光明骑士】 vs 敌方角色:【暗黑战士】
【光明骑士】 血量:157 攻击:34
【暗黑战士】 血量:112 攻击:33
--------------------------------------------
请按回车键开始战斗。
【暗黑战士】发起了攻击,【光明骑士】剩余血量124
【光明骑士】发起了攻击,【暗黑战士】剩余血量78
--------------------------------------------
【暗黑战士】发起了攻击,【光明骑士】剩余血量91
【光明骑士】发起了攻击,【暗黑战士】剩余血量44
--------------------------------------------
【暗黑战士】发起了攻击,【光明骑士】剩余血量58
【光明骑士】发起了攻击,【暗黑战士】剩余血量10
--------------------------------------------
【暗黑战士】发起了攻击,【光明骑士】剩余血量25
【光明骑士】发起了攻击,【暗黑战士】剩余血量-24
--------------------------------------------
敌人死翘翘了,你赢了!
点击回车,查看比赛的最终结果
【最终结果:你赢了!】
最终完整注释版代码
import random
import time
# 生成角色名称,建立空列表存储玩家信息
player_list = ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
enemy_list = ['【暗黑战士】','【黑暗弩手】','【暗夜骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
players = random.sample(player_list,3) # 从列表里随机选取三个元素
enemies = random.sample(enemy_list,3) # 从列表里随机选取三个元素
player_information = {} # 建立空字典,存放我方角色的信息。
enemy_information = {} # 建立空字典,存放我方角色的信息。
#生成角色的属性
def born_role():
life = random.randint(100,180) # 从100-180随机生成整数,赋值给变量life
attack = random.randint(30,50) # 从30-50随机生成整数,赋值给变量attack
return life,attack
#生成完整角色信息
for i in range(0,3):
player_information[players[i]] = born_role()
enemy_information[enemies[i]] = born_role()
def show_role():
# 展示我方的3个角色
print('----------------- 角色信息 -----------------')
print('你的人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(players[i],player_information[players[i]][0],player_information[players[i]][1]))
print('--------------------------------------------')
#展示对手的3个角色
print('电脑人物:')
for i in range(3):
print('%s 血量:%d 攻击:%d' %(enemies[i],enemy_information[enemies[i]][0],enemy_information[enemies[i]][1]))
print('--------------------------------------------')
input('请按回车键继续。\n') # 为了让玩家更有控制感,可以插入类似的代码来切分游戏进程。
#我方角色出场次序
def order_role():
order_dict = {}# 新建字典,存储顺序
global players #使用全局变量的players
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]))
#单局游戏结果和计分
def show_result(player_life,enemy_life): #注意这里需要设定参数
if player_life > 0 and enemy_life <= 0:
result='\n敌人死翘翘了,你赢了!'
return 1, result #返回值是元组,再后面利用返回值的时候,记得序号调用
elif player_life <= 0 and enemy_life > 0:
result='\n悲催,敌人把你干掉了!'
return -1, result
else :
result='\n哎呀,你和敌人同归于尽了!'
return 0, result
# 注意代码的缩进、循环和判断条件的设定。PK过程,有暂停效果比较有代入感!
# 角色PK函数
def pk_role():
round = 1 #round表示局数。
score = 0
for i in range(3): # 一共要打三局 i依次为0,1,2
# 统一将下面会用到的数据先赋值给变量会更清晰更好管理
player_name = players[i] #提取玩家角色名称
enemy_name = enemies[i] #提取电脑角色名称
#利用字典的键来提取值,此处的字典名和键比较长,需要注意
player_life = player_information[players[i]][0] #player_information是字典名,[players[i]]是键,因为键对应的值是元组,所以用[0]来提取
player_attack = player_information[players[i]][1] #同上操作
enemy_life = enemy_information[enemies[i]][0] #同上操作
enemy_attack = enemy_information[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' % (enemy_name,player_name,player_life))
print('%s发起了攻击,%s剩余血量%d'% (player_name,enemy_name,enemy_life))
print('--------------------------------------------')
time.sleep(1)
show_result(player_life,enemy_life) #调用show_result函数
score = score + int(show_result(player_life,enemy_life)[0]) #调用show_result的返回值,因为是元组,所以需要使用[0]
print(show_result(player_life,enemy_life)[1])
round += 1 # 局数+1,直到循环完3局。
input('\n点击回车,查看比赛的最终结果\n')
if score > 0:
print('【最终结果:你赢了!】\n')
elif score < 0:
print('【最终结果:你输了!】\n')
else:
print('【最终结果:平局!】\n')
#定义一个主函数,包含上面程序的主体函数
def main():
show_role()
order_role()
pk_role()
main()
>>>
----------------- 角色信息 -----------------
你的人物:
【格斗大师】 血量:101 攻击:36
【光明骑士】 血量:169 攻击:37
【狂血战士】 血量:129 攻击:45
--------------------------------------------
电脑人物:
【暗黑战士】 血量:107 攻击:47
【嗜血刀客】 血量:171 攻击:35
【暗夜骑士】 血量:101 攻击:32
--------------------------------------------
请按回车键继续。
你想将 【格斗大师】 放在第几个上场?(输入数字1~3)1
你想将 【光明骑士】 放在第几个上场?(输入数字1~3)2
你想将 【狂血战士】 放在第几个上场?(输入数字1~3)3
我方角色的出场顺序是:【格斗大师】、【光明骑士】、【狂血战士】
----------------- 【第1局】 -----------------
玩家角色:【格斗大师】 vs 敌方角色:【暗黑战士】
【格斗大师】 血量:101 攻击:36
【暗黑战士】 血量:107 攻击:47
--------------------------------------------
请按回车键开始战斗。
【暗黑战士】发起了攻击,【格斗大师】剩余血量54
【格斗大师】发起了攻击,【暗黑战士】剩余血量71
--------------------------------------------
【暗黑战士】发起了攻击,【格斗大师】剩余血量7
【格斗大师】发起了攻击,【暗黑战士】剩余血量35
--------------------------------------------
【暗黑战士】发起了攻击,【格斗大师】剩余血量-40
【格斗大师】发起了攻击,【暗黑战士】剩余血量-1
--------------------------------------------
哎呀,你和敌人同归于尽了!
----------------- 【第2局】 -----------------
玩家角色:【光明骑士】 vs 敌方角色:【嗜血刀客】
【光明骑士】 血量:169 攻击:37
【嗜血刀客】 血量:171 攻击:35
--------------------------------------------
请按回车键开始战斗。
【嗜血刀客】发起了攻击,【光明骑士】剩余血量134
【光明骑士】发起了攻击,【嗜血刀客】剩余血量134
--------------------------------------------
【嗜血刀客】发起了攻击,【光明骑士】剩余血量99
【光明骑士】发起了攻击,【嗜血刀客】剩余血量97
--------------------------------------------
【嗜血刀客】发起了攻击,【光明骑士】剩余血量64
【光明骑士】发起了攻击,【嗜血刀客】剩余血量60
--------------------------------------------
【嗜血刀客】发起了攻击,【光明骑士】剩余血量29
【光明骑士】发起了攻击,【嗜血刀客】剩余血量23
--------------------------------------------
【嗜血刀客】发起了攻击,【光明骑士】剩余血量-6
【光明骑士】发起了攻击,【嗜血刀客】剩余血量-14
--------------------------------------------
哎呀,你和敌人同归于尽了!
----------------- 【第3局】 -----------------
玩家角色:【狂血战士】 vs 敌方角色:【暗夜骑士】
【狂血战士】 血量:129 攻击:45
【暗夜骑士】 血量:101 攻击:32
--------------------------------------------
请按回车键开始战斗。
【暗夜骑士】发起了攻击,【狂血战士】剩余血量97
【狂血战士】发起了攻击,【暗夜骑士】剩余血量56
--------------------------------------------
【暗夜骑士】发起了攻击,【狂血战士】剩余血量65
【狂血战士】发起了攻击,【暗夜骑士】剩余血量11
--------------------------------------------
【暗夜骑士】发起了攻击,【狂血战士】剩余血量33
【狂血战士】发起了攻击,【暗夜骑士】剩余血量-34
--------------------------------------------
敌人死翘翘了,你赢了!
点击回车,查看比赛的最终结果
【最终结果:你赢了!】