需求:狙击手xxx使用xx枪,射击敌人xxx,敌人生命值归0,应声倒下
分析设计类:

  1. 封装狙击手类 属性: 名字 行为:捡枪   装弹   射击
  2. 封装枪类 属性: 型号 行为:射击
  3. 封装弹夹类 属性:弹夹容量   存储子弹的列表
  4. 封装子弹类 属性:伤害值    移动速度 行为:移动
  5. 封装敌人类 属性:名称    生命值
 #狙击手类
class Sniper:def __init__(self,name):self.name = name# self.gun = None#捡枪def pickupGun(self):gun = Gun('AWM')#给对象添加一个gun的属性self.gun = gun#装弹def loading(self):#创建一个弹容量为10的弹夹clip = Clip(10)for i in range(clip.capacity):bullet = Bullet()#循环装子弹clip.bullet_list.append(bullet)#给你拥有的枪添加一个属性self.gun.clip = clip#射击敌人def shoot(self,enemy):print('{}瞄准{}进行射击'.format(self.name,enemy.name))self.gun.shoot(enemy)
#枪类
class Gun:def __init__(self,type):self.type = type#枪的射击功能def shoot(self,enemy):while enemy.hp > 0:# 将子弹从弹夹中移除bullet = self.clip.bullet_list.pop()enemy.hp -=  bullet.damageif enemy.hp <= 0:bullet.move()print('敌人{}应声倒下'.format(enemy.name))
#弹夹类
class Clip:def __init__(self,capacity):#弹夹容量self.capacity = capacity#用来存储子弹的列表self.bullet_list = []
#子弹类
class Bullet:def __init__(self):self.damage = 100self.speed = 1000def move(self):print('子弹以{}m/s向敌人'.format(self.speed))
#敌人类
class Enemy:def __init__(self,name,hp):self.name = nameself.hp = hp#创建狙击手对象
sniper = Sniper('海豹突击1号')
#狙击手捡枪
sniper.pickupGun()
# print(dir(sniper))
# print(dir(sniper.gun))
#装弹
sniper.loading()
# print(dir(sniper.gun))
# #打印狙击手的枪的弹夹的子弹列表中的子弹
# print(sniper.gun.clip.bullet_list)
# #创建敌人对象
enemy = Enemy('小日本1',100)
#射击
sniper.shoot(enemy)
print('枪中剩余子弹{}发'.format(len(sniper.gun.clip.bullet_list)))

转载于:https://www.cnblogs.com/ilovepython/p/11068889.html

面向对象思想封装狙击手狙击敌人相关推荐

  1. js面向对象思想封装拖拽功能,兼容pc和移动端

    我们在开发项目过程中,很可能会碰到页面上某块需要可以拖拽移动的功能需求,网上已经有不少前辈分享了相关功能的案例,插件或者代码,但是考虑到项目功能需求,我们可能仅需要实现拖拽移动功能就可以,不需要其他功 ...

  2. java封装插件,基于面向对象思想封装一个水球插件

    1 2 3 4 5 test 6 7 body{ 8 display:flex; 9 flex-flow:column wrap; 10 justify-content:center; 11 alig ...

  3. 面向对象思想的三种通俗解释

    1. 假如你去洗澡,你可能是这么考虑的,首先进入浴室,然后打开水龙头冲洗, 最后用浴巾擦干身子,等等一系列过程,叫做面向过程.你用面向过程解决了洗澡这个问题. 那么看面向对象是如何思考的,你是一个对象 ...

  4. 学习面向对象思想,开始考虑通过封装、 继承、多态把程序的耦合度降低

    学习面向对象思想,开始考虑通过封装. 继承.多态把程序的耦合度降低 转载于:https://www.cnblogs.com/Andys/archive/2013/04/05/3001175.html

  5. 【Java设计模式 面向对象设计思想】一 再谈面向对象和封装、抽象、继承、多态四大特性

    回看最初的目标:[Java设计模式 学习目标及大纲]高质量代码的标准及实现路径在这篇Blog里我们明确了什么是高质量的代码:易维护.易读.易扩展.灵活.简洁.可复用.可测试,也知道高质量代码的达成路径 ...

  6. Java面向对象思想、类的定义、对象的使用、对象内存图、成员变量和局部变量的区别、封装、private关键字、this关键字、构造方法、JavaBean-day06

    目录 第1节 面向对象思想 1.1 面向对象思想概述 概述 举例 特点 1.2 类和对象 什么是对象 类与对象的关系 1.3 类的定义 事物与类的对比 类的定义格式 1.4 对象的使用 对象的使用格式 ...

  7. 阶段1 语言基础+高级_1-2 -面向对象和封装_1面向对象思想的概述

    面向对象思想的概述 面向谁就更加关注谁. 程序里面有面向过程 写一个打印数组的功能代码 在面向对象出现之前,有个叫做面向过程. 面向对象可以理解为偷懒 打印数组用两种思想分别来实现. 最后一个元素后面 ...

  8. 【python面向对象】封装(面试题常考)

    本章节的内容常常在面试题中出现,大家根据本文的思路可以很好的掌握. 文章目录 封装浅层次 一.使用方法,封装变量 二.使用property (读取方法,写入方法),封装变量 三.使用property ...

  9. 四大发明之活字印刷——面向对象思想的胜利

    四大发明之活字印刷--面向对象思想的胜利 话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟 ...

最新文章

  1. 利用动态加载模板,配合ajax实现无刷新操作
  2. C#调用Win32 的API函数--User32.dll
  3. 【bzoj2223】[Coci 2009]PATULJCI 主席树
  4. 【职场经验】算法同学从学校到实习,需要改变什么
  5. 怎样实现登录用户管理_如何编写程序实现图书管理系统里面的用户管理功能
  6. WinCE内核裁减(中文字体)及字库和内核的分离
  7. vue (可读写)全局变量的 定义、任意调用、值的修改
  8. 【Python】Python3.7.3 - memoization 结果缓存记忆程序设计优化技术
  9. Solr如何管理索引库
  10. [原创]使用python对视频/音频文件进行详细信息采集,并进行去重操作
  11. 吴恩达悄然发布AI维基,另外他的技术岗已经招满了
  12. android 使用so库,Android 使用SO库
  13. JAVA中的异常及两种异常处理的方法
  14. Vue项目中国际化的语言切换
  15. html表格 超链接无效,excel表格超链接失效怎么处理
  16. php实现推箱子游戏,C语言实现推箱子游戏的代码示例
  17. 网易云音乐外链(PHP的curl函数)
  18. c++正则表达式regex
  19. brpc源码解析(四)—— Bthread机制
  20. java多线程并发之旅-34-性能与可伸缩性

热门文章

  1. 深度学习之基于卷积神经网络(VGG16)实现性别判别
  2. Squared Permutation(线段树)
  3. 电脑屏幕保护怎么取消_STEP考试安排再更新!今年到底要怎么考试?
  4. 废旧光盘手工小制作_废旧光盘没有用,只能扔?这些光盘改造的小手工就很惊艳,附教程...
  5. 如何破解Synplify Pro 9.6.2? (SOC) (Synplify)
  6. 图像bayer格式介绍以及bayer插值原理CFA
  7. 【OpenPose-Windows】OpenPose+VS2015+Windows+CUDA8+cuDNN5.1 官方配置教程
  8. 关于 时钟抖动 Jitter 和 偏移 Skew
  9. HTTP2协议的发展与使用
  10. 【git】git 入门使用手册