目录

八、人机小游戏

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,randomplayer_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,randomplayer_victory = 0
enemy_victory = 0for 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)# 双方PKwhile player_life > 0 and enemy_life > 0:player_life = player_life - enemy_attackenemy_life = enemy_life - player_attackprint('你发起了攻击,【玩家】剩余血量'+str(player_life))print('敌人向你发起了攻击,【敌人】剩余血量'+str(enemy_life))print('-----------------------')time.sleep(1.5)#打印最终战果if player_life > 0 and enemy_life <= 0:player_victory += 1print('敌人死翘翘了,你赢了!')elif player_life <= 0 and enemy_life > 0:enemy_victory += 1print('悲催,敌人把你干掉了!')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=0while 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)#双方PKwhile (player_life>0) and (enemy_life>0):player_life-=enemy_attackenemy_life-=player_attackprint ('你发起了攻击,【敌人】剩余血量{}'.format(enemy_life))print ('敌人向你发起了攻击,【玩家】剩余血量{}'.format(player_life))print ('--------------------------------------')time.sleep(1.5)#打印结果if player_life<0 and enemy_life>0:enemy_victory+=1print('哎呀,你没了。')elif player_life>0 and enemy_life<0:player_victory+=1print('恭喜你!取得胜利!')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

风云编程python基础语法(2)相关推荐

  1. 风云编程python基础语法(8)|| 完结

    目录 十八.思维课-用编程能力解决实际问题 流程图​ 产品设计 如何提需求 如何设计解决方案 练习 (1)"不知道吃什么" (2)滚动的广告牌 十九. 目标 ​阶段1.0:输入固定 ...

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

    目录​​​​​​​ 九.编程学习的两大瓶颈 1.知识学完就忘 2.缺乏解题能力 练习:九九乘法表 十.函数 1.函数的定义 2.定义和调用函数 3.参数的类型 4.return语句 5.变量作用域 练 ...

  3. 风云编程python基础语法(1)

    未完待续,持续更新中... 99**2 = 99^2 一.print()函数 二.数据类型 三.条件判断 四.input()函数 五.列表和字典+元组 列表list 1.格式:roommates=[' ...

  4. 风云编程python基础语法(5)

    目录 十四.角色属性克制 目标 版本1.0:类的封装,打包函数 版本2.0:类的继承和实例化,让三种角色属性不同 版本3.0:为类添加克制关系的类方法 版本4.0:角色类型之间的配合 版本5.0:优化 ...

  5. 风云编程python基础语法(6)

    目录 十五.编码与文件 编码 二进制 编码表 encode和decode 文件读写 读取文件 写入文件 小结 练习 统计成绩 默写古诗 十六.模块 什么是模块 使用自己的模块 import语句 fro ...

  6. 风云编程python基础语法(7)

    目录 十七.发邮件 目标 版本1.0:发一封最简单的邮件 smtplib模块 email模块 代码结构 可能出现的错误 版本2.0:给自己发完整的邮件 丰富邮件头 丰富正文内容 版本3.0:群发一封完 ...

  7. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  8. 风变python基础语法_风变编程python (基础语法爬虫精进)

    温馨提示:本信息由[会员:crm010com]搜集整理发布,版权归原作者及发布者所有,您如有异议请 举报 或者 版权申诉. 风变编程python (基础语法爬虫精进) 第1章介绍在计算机中安装Pyth ...

  9. 风变编程python课_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

最新文章

  1. jQuery添加DOM节点常用的5种方法
  2. linux启动自动挂载共享文件,linux中自动挂载windows 共享目录
  3. iis mysql php 附件上传大小_修改上传附件2M大小限制的方法/php+iis上传附件默认大小修改方法...
  4. python中引入sql的优点_SQL Server 2017中的Python:增强的数据库内机器学习
  5. 解决:pycharm中动画函数animation.FuncAnimation不起作用
  6. WebBrowser 控件中屏蔽alert,confirm脚本对话框的方法。
  7. 什么是CPAN(安装NAGIOS使用到)
  8. Codeforces Round #676 (Div. 2) E待补
  9. 【Splay】波动值之和(金牌导航 Splay-1)
  10. 项目:如何快速实现电脑间大文件(lichee.tar.gz)互传?
  11. (良心)世上最全设计模式导读(含难度预警与使用频率完整版)
  12. php 增加数组下标_PHP数组排序更改下标KEY方法
  13. java代码求IP和mac地址
  14. 对于over-posting的防御
  15. must be str,not int
  16. 3dB等波纹低通滤波器设计(HFSS)
  17. 自动化运维工具ansible安装及使用
  18. 忘记电脑开机密码怎么办?六种方法教你解决
  19. mongodb集群 java_Mongodb集群操作的JAVA代码详解
  20. android微信分享走小程序流程,教你怎么把微信小程序分享到朋友圈

热门文章

  1. AC3简介及压制攻略 zz
  2. 弱压力测试以及图形化报告
  3. 深度解析阿里、腾讯、京东等20家企业的技术案例
  4. 滴滴外卖南京单量不及预期,“击鼓传花”何日是头?
  5. map集合嵌套list集合遍历方式
  6. .NET Core 3.0 代码加密工具-Virbox Protector .NET 版
  7. 基于51单片机的DS18B20温度控制加热降温系统设计
  8. fis 产出修改的html,FIS3项目构建
  9. Machine Leaning
  10. hp2548无线服务器地址,无线直连可以这么玩_HP 2548_办公打印应用指南-中关村在线...