python面向对象游戏练习:好人坏人手枪手榴弹

主要是多态的练习,对象作为参数传给方法使用

 1 #!/usr/bin/env python
2 # -*- coding:utf-8 -*-
3
4 class Bulletbox(object):
5 def __init__(self,bulletcount):
6 self.bulletcount = bulletcount
7
8

9 class Gun(object):
10 def __init__(self,bulletbox):
11 self.bulletbox = bulletbox
12
13 def shoot(self):
14 if self.bulletbox.bulletcount == 0:
15 print('没子弹了')
16 else:
17 self.bulletbox.bulletcount -= 1
18 print(str(self) + '开一枪,还剩%d颗子弹' % (self.bulletbox.bulletcount))
19
20

21 class Grenade(object):
22 def __init__(self,grenadecount):
23 self.grenadecount = grenadecount
24
25 def damage(self):
26 if self.grenadecount == 0:
27 print('手雷没有了')
28 else:
29 self.grenadecount -= 1
30 print(str(self) + "轰他一炮,手雷还剩%d颗" % (self.grenadecount))
31
32

33 class Person(object):
34 def __init__(self, gun, grenade, blood):
35 self.gun = gun
36 self.grenade = grenade
37 self.blood = blood
38
39 def fire(self, person):
40 person.blood -= 5
41 self.gun.shoot()
42 print(str(person) + "血量减少5,剩余" + str(person.blood) )
43
44 def fire2(self, person):
45 person.blood -= 10
46 self.grenade.damage()
47 print(str(person) + "血量减少10,剩余" + str(person.blood) )
48
49 def fillbullet(self):
50 self.gun.bulletbox.bulletcount += 10
51
52 def fillblood(self,num):
53 self.blood += num
54 if self.blood > 100:
55 self.blood = 100
56 print(str(self) + "补血后血量:" + str(self.blood))
57
58

59 class Profector(Person):
60 def __init__(self, gun, grenade, blood = 100):
61 super(Profector,self).__init__(gun, grenade, blood)
62
63

64 class Gengster(Person):
65 def __init__(self, gun, grenade, blood=100):
66 super(Gengster, self).__init__(gun, grenade, blood)
67
68

69 bulletbox = Bulletbox(10)
70 gun = Gun(bulletbox)
71 grenade = Grenade(20)
72
73 good1 = Profector(gun,grenade)
74 good2 = Profector(gun,grenade)
75 bad1 = Gengster(gun,grenade)
76 bad2 = Gengster(gun,grenade)
77
78 print("好人1开枪打坏人1和2")
79 good1.fire(bad1)
80 good1.fire(bad2)
81 print("好人2开枪打坏人1和2")
82 good2.fire(bad1)
83 good2.fire(bad2)
84 print("坏人1炸好人1和2")
85 bad1.fire2(good1)
86 bad1.fire2(good2)
87 print("坏人2炸好人1和2")
88 bad2.fire2(good1)
89 bad2.fire2(good2)
90 print("坏人1补血3个")
91 bad1.fillblood(3)

运行结果如下:

python面向对象游戏练习:好人坏人手枪手榴弹的更多相关文章

  1. python面向对象(封装、继承、多态)+ 面向对象小栗子

    大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...

  2. python 面向对象初级篇

    Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...

  3. Python 面向对象 基础

    编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...

  4. Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)

    Python 面向对象(初级篇)   51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

  5. Python面向对象编程指南

    Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...

  6. 【转】Python 面向对象(初级篇)

    [转]Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...

  7. Python面向对象-day07

    写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...

  8. Python 面向对象编程基础

    Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...

  9. Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法

    一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...

  10. Python面向对象初始(三大特征,多态,继承,封装)

    Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...

随机推荐

  1. 【论文笔记】AlexNet

    [深度学习]总目录 由于受到计算机性能的影响,虽然LeNet在图像分类中取得了较好的成绩,但是并没有引起很多的关注. 直到2012年,Alex等人提出的AlexNet网络在ImageNet大赛上以远超 ...

  2. js 求任意两数之间的和

    知识点:函数的传参,函数的返回值 函数的传参 函数的参数包括以下两种类型: 1.形参:在定义函数时,声明的参数变量仅在函数内部可见: 2.实参:在调用函数时,实际传入的值. 示例 我们在定义函数的时候 ...

  3. 多项分布模拟及 Seaborn 可视化教程

    多项分布 简介 多项分布是二项分布的推广,它描述了在 n 次独立试验中,k 种不同事件分别出现次数的离散概率分布.与二项分布只能有两种结果(例如成功/失败)不同,多项分布可以有 k 种(k ≥ 2)及 ...

  4. 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项

    为什么会突然想到写这么一个大杂烩的博文呢,必须要从笔者几年前的一次面试说起 当时的我年轻气盛,在简历上放了自己的博客地址,而面试官应该是翻了我的博客,好几道面试题都是围绕着我的博文来提问 其中一个问题 ...

  5. elementUI slider组件,带范围选择实现双向绑定

    网上查过很多相关文章都没有一章是写element ui滑块带范围实现双向绑定 二个滑块二头的数据怎么得到 我的需求是做个时间轴要滑动选择不同的时间 开始很难做最后一点一点摸索得出的结论 好在写出来了先 ...

  6. CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转

    CompatTelRunner CPU 占用 22% win10 笔记本常常无故风扇狂转 CompatTelRunner.exe is also known as Windows Compatibil ...

  7. 夜莺项目发布 v6.4.0 版本,新增全局宏变量功能

    大家好,夜莺项目发布 v6.4.0 版本,新增全局宏变量功能,本文为大家简要介绍一下相关更新内容. 全局宏变量功能 像 SMTP 的配置中密码类型的信息,之前都是以明文的方式在页面展示,夜莺支持全局宏 ...

  8. 项目管理--PMBOK 读书笔记(10)【项目沟通管理】

      1.沟通技术 1)交互式沟通:双方多方之间的多项信息沟通,确保全体参与者对特定话题达成共识,回馈. 2)推式沟通:将信息发送给接收方,不确保受众理解. 3)拉式沟通:自主自行反问信息   2.沟通 ...

  9. Java中PDF的转换(图片)与展示

    解决的问题 有些时候我们需要在项目中展示PDF,但是直接在浏览器中加入PDF展示的插件,存在兼容性问题,某些浏览器显示效果不理想,所以我们可以将PDF转为图片,然后已图片的方式展示,效果很好. 那么怎 ...

  10. 异步任务处理注解方法@Async实现异步多线程

    异步任务处理注解方法@Async实现异步多线程 1.定义配置类,设置参数2.定义任务执行类3.执行Spring 中的ThreadPoolExecutor是借助JDK并发包中的java.util.con ...