python面向对象游戏练习:好人坏人手枪手榴弹
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面向对象游戏练习:好人坏人手枪手榴弹的更多相关文章
- python面向对象(封装、继承、多态)+ 面向对象小栗子
大家好,下面我说一下我对面向对象的理解,不会讲的很详细,因为有很多人的博客都把他写的很详细了,所以,我尽可能简单的通过一些代码让初学者可以理解面向对象及他的三个要素. 摘要:1.首先介绍一下面向对象 ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- Python开发【第七篇】:面向对象 和 python面向对象(初级篇)(上)
Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...
- Python面向对象编程指南
Python面向对象编程指南(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1SbD4gum4yGcUruH9icTPCQ 提取码:fzk5 复制这段内容后打开百度网 ...
- 【转】Python 面向对象(初级篇)
[转]Python 面向对象(初级篇) 51CTO同步发布地址:http://3060674.blog.51cto.com/3050674/1689163 概述 面向过程:根据业务逻辑从上到下写垒代码 ...
- Python面向对象-day07
写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心 ...
- Python 面向对象编程基础
Python 面向对象编程基础 虽然Pthon是解释性语言,但是Pthon可以进行面向对象开发,小到 脚本程序,大到3D游戏,Python都可以做到. 一类: 语法: class 类名: 类属性,方法 ...
- Python面向对象 --- 新旧式类、私有方法、类属性和类方法、静态方法
一.Python面向对象中的新旧式类 1)新式类(推荐使用):在定义类时,类后边括号里要继承基类(object).在python3.x中若没有指定父类,会默认使用的是object作为基类:在pytho ...
- Python面向对象初始(三大特征,多态,继承,封装)
Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...
随机推荐
- Win11安装VMware Workstation Pro,Centos,Xshell,Xftp(Linux学习需要)
注意:1.win11不能安装太低版本的VMware Workstation Pro,否则启动linux会出现蓝屏 2.win11是默认没有开虚拟机平台支持的,所以同时也要开启,否则也会出现蓝屏. ...
- react 高阶函数
HOC(Higher Order Components)就是一个函数,传给它一个组件,它返回一个新的组件. 高阶组件:就相当于手机壳,通过包装组件,增强组件功能. 实现步骤: 首先创建一个函数 指定函 ...
- kettle从入门到精通 第十课 kettle switch/case、过滤记录、数值范围
1.java代码里面有if else .switch-case等流程控制,kettle也有相应控件.下图便用到switch/case.过滤记录.数值范围控件. 2. switch/case步骤 1)步 ...
- Python基础——上节补充及数据类型
1.变量的创建过程 当我们创建一个变量name='oldboy'时,实际上是这样一个过程. 程序先开辟了一个内存空间,把变量的内容放进去,再让变量name指向'oldboy'所在的内存地址. 我们可以 ...
- element el-input 去掉边框
element样式还是蛮好的,只是有时候我们需要做一些调整,比如,el-input 的边框,官网是这样子的 我们需要去掉这个边框 试了常用的:border: none: 以及:outline:non ...
- 安卓app 地铁最短路径查询 完成
我通过三个函数 完成了这个功能 首先 创建哈希表 根据起始站名 终点站名 然后 根据哈希表 建立起 邻接表' 最后 根据迪杰斯特拉算法 完成这个功能 /** * function:起终查询 */ / ...
- 地铁查询app 结对作业三
经过今天一下午的奋斗 安卓app 只剩下最难的部分了 最短路径问题 我们考虑用迪杰斯特拉算法 不过 没有做出来 还要继续去学习一下这个代码 并寻求网上代码的帮助
- Niagara 物联网技术基础应用(文章修复中,不定时更新)
新手指南 前言 鉴于市面上有关Niagara物联网技术资料较少,笔者结合自生参加竞赛的经历编写此指南,该指南旨在让新手快速上手Niagara workbench 主要分以下几个模块讲解: 物联网软件平 ...
- git客户端安装和使用
需要安装三个软件 1.git客户端 点击下载 下载完成后一只next就行了. 2.git右键属性的扩展程序 点击下载 下载完成后一只next就行了 3.git中文包 点击下载 下载完成后一只next就 ...
- Stable Diffusion 生成个性图片指南
在当今人工智能领域,midjourney无疑是生成图片的王者,但是苦于付费才能使用,今天我就给大家分享一下midjourney平替stable diffusion,实现本地生成不逊色于midjourn ...