写在前面:博主python小白,新手学习。本文用于记录自己学习面向对象时的一个小练习题,仅供以后回顾。若能帮到任何人,博主倍感荣幸;若有任何错误和考虑不周之处,或有更简洁的方法,请路过的大神们不吝赐教,谢谢~~
推荐一篇写的详细的关于“面向对象的特性:继承,多态,封装” 的文章:https://www.cnblogs.com/zhaohuhu/p/9206123.html#_label0
一、编程要求:
按以下要求定义一个乌龟类和鱼类并尝试编程
1. 假设游戏场景为范围(x,y)为0<=x<=10,0<=y<=10
2. 游戏生成1只乌龟和10条鱼
3. 他们的移动方向均随机
4. 乌龟的最大移动能力是2(乌龟可以随机选择移动是1还是2),鱼的最大移动能力是1
5. 当移动到场景边缘,自动向反方向移动
6. 乌龟每移动一次,体力消耗1
7. 当乌龟和鱼重叠,乌龟吃掉鱼,乌龟体力增加20
8. 鱼不计算体力
9. 当乌龟体力值为0或者鱼的数量为0时,游戏结束
二、实现思路:
1. 将乌龟和鱼的共同点抽象出其父类Animal,属性为位置,方法为移动;
(1)init初始化参数
- 位置参数 —— x,y表示坐标位置
- 游戏边界范围—— 0到最大值10
- 移动步长和方向 —— 初始化步长为0,边界为1,可任意设置,移动时会有数据覆盖
(2)移动方法定义
- 定义一个标准化的move_step:每次调用都是走1步,4个方向,往每个方向走时将相应坐标值做出+1/-1的修改
- 每个方向均考虑已移动至边界位置时的反方向移动处理
- 打印log用于查看
class Animal(object):
def __init__(self,name,x_value,y_value):
self.name = name
self.x_value = x_value
self.y_value = y_value #乌龟和鱼抽象出来的共同属性是位置和移动
self.range_max=10 #游戏活动范围最大边界为10(x,y