风云编程python基础语法(2)

目录

八、人机小游戏

1、明确项目目标

2、分解过程,拆解项目

3、逐步执行,代码实现

1.0 版本+计时器time.sleep(sec)

2.0版本+随机生成random.randint(a,b)

3.0版本

4、简化字符串的连接

1)格式符%+类型码

2)format()函数

5、新增功能:3局过后,是否再来一盘


八、人机小游戏

项目实操:学会用封装函数编写程序,考察函数、列表、字典。

1、明确项目目标

1)随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零。

2)这样的战斗会持续三局,采取三局两胜制,最后输出战斗结果,公布获胜方。

2、分解过程,拆解项目

1.0:自定属性,人工PK

2.0:随机属性,自动PK

3.0:打印战果,三局两胜

3、逐步执行,代码实现

1.0 版本+计时器time.sleep(sec)

显示玩家和敌人属性→PK过程展示,双方血量变化→显示pk结果

print('【玩家】\n血量:100\n攻击:50')  # 自定义玩家角色的血量和攻击,用换行符'\n'来优化视觉
print('------------------------')  # 辅助功能,起到视觉分割的作用,让代码的运行结果更清晰

print('【敌人】\n血量:100\n攻击:30')
print('------------------------')

print('你发起了攻击,【敌人】剩余血量50')  # 人工计算敌人血量:100-50=50
print('敌人向你发起了攻击,【玩家】剩余血量70')  # 人工计算玩家血量:100-30=70
print('------------------------')

print('你发起了攻击,【敌人】剩余血量0')  # 双方同时攻击,若血量出现小于等于0,游戏结束
print('敌人向你发起了攻击,【玩家】剩余血量40')
print('-----------------------')

print('敌人死翘翘了,你赢了!') # 打印结果

计时器time.sleep(sec)

time.sleep(1.5)就表示停留1.5秒再运行后续代码

import time  #通常import语句会写到代码的开头

print('【玩家】\n血量:100\n攻击:50')  
print('------------------------')  
time.sleep(1.5)
#暂停1.5秒,再继续运行后面的代码

print('【敌人】\n血量:100\n攻击:30')
print('------------------------')
time.sleep(1.5)
#同上

print('你发起了攻击,【敌人】剩余血量50')  
print('敌人向你发起了攻击,【玩家】剩余血量70') 
print('------------------------')
time.sleep(1.5)

print('你发起了攻击,【敌人】剩余血量0')  
print('敌人向你发起了攻击,【玩家】剩余血量40')
print('-----------------------')
time.sleep(1.5)

print('敌人死翘翘了,你赢了!') 

2.0版本+随机生成random.randint(a,b)

随机生成玩家和敌人属性→显示属性→PK过程展示,自动攻击扣血

随机生成[a,b]范围内的整数,random.randint(a,b)

import time,random

player_life = random.randint(100,150) 
player_attack = random.randint(30,50) 
enemy_life = random.randint(100,150) 
enemy_attack = random.randint(30,50) 

print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
print('------------------------')
time.sleep(1)
print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))
print('------------------------')
time.sleep(1)

while (player_life >0) and (enemy_life > 0):
    player_life = player_life - enemy_attack 
    enemy_life = enemy_life - player_attack 
    print('你发起了攻击,【玩家】剩余血量'+str(player_life))
    #player_life是整数,所以拼接时要先用str()转换
    print('敌人向你发起了攻击,【敌人】剩余血量'+str(enemy_life))
    print('------------------------')
    time.sleep(1.5)
    # 为了体现出战斗回合,这里停顿1.5秒 

3.0版本

游戏开始→随机生成属性→显示属性→PK过程展示→输出单局结果(循环3次)→输出三局两胜结果→游戏结束

import time,random

player_victory = 0
enemy_victory = 0

for i in range(1,4):
    time.sleep(2)  # 让局与局之间有较明显的有时间间隔
    print(' \n——————现在是第'+str(i)+'局——————')  # 作为局的标记
 
    player_life = random.randint(100,150)
    player_attack = random.randint(30,50)
    enemy_life = random.randint(100,150)
    enemy_attack = random.randint(30,50)

    # 展示双方角色的属性
    print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
    print('------------------------')
    time.sleep(1)
    print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))
    print('------------------------')
    time.sleep(1)

    # 双方PK
    while player_life > 0 and enemy_life > 0:
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        print('你发起了攻击,【玩家】剩余血量'+str(player_life))
        print('敌人向你发起了攻击,【敌人】剩余血量'+str(enemy_life))
        print('-----------------------')
        time.sleep(1.5)

    #打印最终战果
    if player_life > 0 and enemy_life <= 0:
        player_victory += 1
        print('敌人死翘翘了,你赢了!')
    elif player_life <= 0 and enemy_life > 0:
        enemy_victory += 1
        print('悲催,敌人把你干掉了!')
    else:
        print('哎呀,你和敌人同归于尽了!')

if player_victory > enemy_victory :
    time.sleep(1)
    print('【最终结果:你赢了!】')
elif enemy_victory > player_victory:
    print('【最终结果:你输了!】')
else: 
    print('【最终结果:平局!】')

4、简化字符串的连接

1)格式符%+类型码

%s字符串,%f浮点数,%d整数

2)format()函数

format()函数用大括号{}占位,不用区分类型码

 对比

print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))
print('【玩家】\n血量:%s \n攻击:%s' % (player_life,player_attack))
print('【玩家】\n血量:{}\n攻击:{}'.format(player_life,player_attack))

5、新增功能:3局过后,是否再来一盘

import time,random
#随机生成属性
player_victory=0
enemy_victory=0

while True:
    for i in range(1,4):
        print('\n-------现在是第'+str(i)+'局-------')
        player_life=random.randint(100,150)
        player_attack=random.randint(30,50)
        enemy_life=random.randint(100,150)
        enemy_attack=random.randint(30,50)

        print('【玩家】\n血量:{}\n攻击:{}'.format(player_life,player_attack))
        print('--------------------------------------')
        time.sleep(1)
        print('【敌人】\n血量:{}\n攻击:{}'.format(enemy_life,enemy_attack))
        print('--------------------------------------')
        time.sleep(1)

    #双方PK
        while (player_life>0) and (enemy_life>0):
            player_life-=enemy_attack
            enemy_life-=player_attack
            print ('你发起了攻击,【敌人】剩余血量{}'.format(enemy_life))
            print ('敌人向你发起了攻击,【玩家】剩余血量{}'.format(player_life))
            print ('--------------------------------------')
            time.sleep(1.5)

    #打印结果
        if player_life<0 and enemy_life>0:
            enemy_victory+=1
            print('哎呀,你没了。')
        elif player_life>0 and enemy_life<0:
            player_victory+=1
            print('恭喜你!取得胜利!')
        else:
            print('哦豁,你和敌人同归于尽了。')
        time.sleep(1)

    if player_victory>enemy_victory:
        print('\n【最终结果:你赢了】')
    elif player_victory<enemy_victory:
        print('\n【最终结果:你输了】')
    else:
        print('\n【最终结果:平局】')
    time.sleep(1)
    a=input('你想再来一局吗?请按n键离开游戏,按其他任意键继续游戏。')

    if a=='n':
        break

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值