Python之面向对象练习

一 创建一个类People,拥有的方法为砍柴,娶媳妇,回家;实例化对象,执行相应的方法
显示如下:
    李四,18岁,男,开车去娶媳妇
  	张三,22岁,男,上山去砍柴
    王麻子,10岁,女,辍学回家

在这里插入图片描述
在这里插入图片描述

二 乌龟吃鱼游戏的雏形
乌龟吃鱼:
假设游戏场景为范围(x,y)为0<=x<=10,0<=y<=10
游戏生成1只乌龟和10只鱼,他们的移动方向随机
乌龟的最大移动能力为2(它可以随机选择1或2),鱼的最大移动能力是1
当移动到边缘时,自动向反方向移动
乌龟的初始体能为100(上限)
乌龟每移动一次体能-1
当乌龟与鱼的坐标重叠时,鱼被乌龟吃掉,乌龟体力加20
鱼暂不计体能
当乌龟体能为0(挂掉)或鱼被吃光,游戏结束
import random
class Trutle(object):
    #构造函数何时执行?类实例化对象(创建对象)时,自动调用该函数内容
    def __init__(self):
        # 随机生成乌龟的坐标
        self.x = random.randint(0, 10)
        self.y = random.randint(0, 10)
        #乌龟初始化体力为100(上限)
        self.power = 100
    def move(self):
        # 乌龟的最大移动能力为2
        move_skill = [-2, -1, 0, 1, 2]

        # 计算出乌龟新的坐标; (10,0)  (12,0)
        new_x = self.x + random.choice(move_skill)  # 12
        new_y = self.y + random.choice(move_skill)  # 0

        # 更新乌龟的坐标值
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)

        # 乌龟每移动一次,体力消耗1
        self.power -= 1
    def is_vaild(self, value):  # 12
        """判断坐标值是否合法(0~10之间), 返回合法的值"""
        if value < 0:  # eg: -2 ==   abs(-2) ==> 2
            return abs(value)
        elif value > 10:  # eg: 12 ====>   10-(12-10)  ==> 8
            return 10 - (value - 10)
        return  value
    def eat(self):
        # 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
        self.power += 20


class Fish(object):
    def __init__(self):
        # 随机生成鱼的坐标
        self.x = random.randint(0, 10)
        self.y = random.randint(0, 10)
    def move(self):
        # 鱼的最大移动能力为1
        move_skill = [-1, 0, 1, ]
        # 计算出鱼新的坐标; (10,0)  (12,0)
        new_x = self.x + random.choice(move_skill)  # 12
        new_y = self.y + random.choice(move_skill)  # 0

        # 更新鱼的坐标值
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)

    def is_vaild(self, value):  # 12
        """判断坐标值是否合法(0~10之间), 返回合法的值"""
        if value < 0:  # eg: -2 ==   abs(-2) ==> 2
            return abs(value)
        elif value > 10:  # eg: 12 ====>   10-(12-10)  ==> 8
            return 10 - (value - 10)
        return value

def start_game():
    # 创建一个乌龟
    t1 = Trutle()
    # 创建10个鱼
    # fishs = []
    # for i in range(10):
    #     fishs.append(Fish())
    fishs = [Fish() for i in range(10)]
    # 游戏开始运行
    while True:
        # 判断游戏是否结束(乌龟没体力或者鱼被吃光了)
        if t1.power <= 0:
            print("乌龟没体力了, Game over.........")
            break
        elif len(fishs) == 0:
            print("鱼被吃光了, Game over......... ")
            break
        else:
            # 乌龟和鱼随机移动
            t1.move()
            for index, fish in enumerate(fishs):
                fish.move()
                # 判断乌龟是否吃到了鱼?
                if t1.x == fish.x and t1.y == fish.y:
                    t1.eat()
                    fishs.remove(fish)
                    print("鱼被吃掉, 还剩%d条鱼......." %(len(fishs)))
                    print("乌龟最新体能为%s" %(t1.power))
            # 当乌龟的坐标与每一条鱼进行比较,都没有重合,也就是没有吃到一条鱼;
            else:
                print("乌龟没有吃到鱼,最新体能为%s" %(t1.power))
# 如果这个脚本(模块),没有被调用,则执行下面的代码
if __name__ == "__main__":
    print("游戏开始".center(50, '*'))
    start_game()

在这里插入图片描述

  • 颜色格式的说明
    在这里插入图片描述
三 继承实现乌龟吃鱼
import random
class FontColor(object):
    OKBULE = '\033[94m'
    OKGREEN = '\033[92m'
    WARN = '\033[93m'
    FAIL = '\033[91m'
class Animals(object):
    def __init__(self):
        # 随机生成动物的坐标
        self.x = random.randint(0, 10)
        self.y = random.randint(0, 10)

    def move(self, move_skill):
        # 计算出乌龟新的坐标; (10,0)  (12,0)
        new_x = self.x + random.choice(move_skill)  # 12
        new_y = self.y + random.choice(move_skill)  # 0
        # 更新乌龟的坐标值
        self.x = self.is_vaild(new_x)
        self.y = self.is_vaild(new_y)

    def is_vaild(self, value):  # 12
        """判断坐标值是否合法(0~10之间), 返回合法的值"""
        if value < 0:  # eg: -2 ==   abs(-2) ==> 2
            return abs(value)
        elif value > 10:  # eg: 12 ====>   10-(12-10)  ==> 8
            return 10 - (value - 10)
        return value


class Trutle(Animals):
    # 构造函数何时执行? 类实例化对象(创建对象)时, 自动调用该函数内容
    def __init__(self):
        super(Trutle, self).__init__()
        # 乌龟初始化体力为100(上限)
        self.power = 100
    def move(self, move_skill = [-2, -1, 0, 1, 2]):
        super(Trutle, self).move(move_skill)
        # 乌龟每移动一次,体力消耗1
        self.power -= 1

    def eat(self):
        # 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
        self.power += 20

class Fish(Animals):
    def move(self, move_skill = (-1, 0, 1 )):
        # 鱼的最大移动能力为1
        super(Fish, self).move(move_skill)

def start_game():
    # 创建一个乌龟
    t1 = Trutle()
    # 创建10个鱼
    # fishs = []
    # for i in range(10):
    #     fishs.append(Fish())
    fishs = [Fish() for i in range(10)]



    font=FontColor
    # 游戏开始运行
    while True:
        # 判断游戏是否结束(乌龟没体力或者鱼被吃光了)
        if t1.power <= 0:
            print(font.FAIL + "乌龟没体力了, Game over.........")
            break
        elif len(fishs) == 0:
            print(font.OKBULE + "鱼被吃光了, Game over......... ")
            break
        else:
            # 乌龟和鱼随机移动
            t1.move()
            for index, fish in enumerate(fishs):
                fish.move()
                # 判断乌龟是否吃到了鱼?
                if t1.x == fish.x and t1.y == fish.y:
                    t1.eat()
                    fishs.remove(fish)
                    print(font.OKBULE + "鱼被吃掉, 还剩%d条鱼......." %(len(fishs)))
                    print(font.OKGREEN + "乌龟最新体能为%s" %(t1.power))
            # 当乌龟的坐标与每一条鱼进行比较, 都没有重合, 也就是没有迟到一条鱼;
            else:
                print(font.FAIL + "乌龟没有吃到鱼, 最新体能为%s" %(t1.power))
# 如果这个脚本(模块), 没有被调用, 则执行下面的代码
if __name__ == "__main__":
    print("游戏开始".center(50, '*'))
    start_game()

在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值