python3中使用面向对象设计游戏

本文通过面向对象的方法,使用Python实现了一个简单的游戏系统。游戏包括老虎和羊两种动物,它们有不同的属性和行为。通过创建房间来容纳这些动物,并利用多线程控制游戏流程,实现了动物的叫声及喂食等功能。

python3使用面向对象设计游戏

1、首先,寻找要设计的对象
​ 老虎、羊、房间
​ 2、接下来,确定对象的定义
​ 对象的定义:定义对象在这个系统里面的的属性和行为
​ 比如老虎这类对象,在这个系统里面的共有属性,行为属性

3、实例 是类的具体化存在

a、老虎这个类,描述了:
1、在这个系统里面共有的属性:体重、名称
2、行为有叫、吃食物
b、每个具体的老虎,是老虎这个类的 实例

c、类的实例的关系:实例是类的具体化

import random, time, threading, os
# 导入随机数,倒计时,多线程,系统退出方法
# 对象的组合
class Tiger():
    # 静态属性:静态属性一般就直接定义在类里面
    classname = '老虎'
    # 初始化方法init是类的时候就会自动执行,实例属性一般定义在初始化方法中,init方法本身就是实例方法
    def __init__(self, w=200):  # self 指的就是实例化对象本身
        # 定义了老虎的实例属性(体重)
        self.weight = w

    # 老虎的叫声
    def roar(self):
        print("wow wow wow !!!")
        # 老虎叫了,体重就要减(实例方法中操作实例属性)
        self.weight -= 5

    # 喂食
    def feed(self, food):
        # 喂了肉加10斤,草 减10斤
        if food == 'meet':
            self.weight += 10
            print("喂对了")
        else:
            self.weight -= 10
            
class Sheep:
    classname = '羊'

    # 实例属性定义在初始化方法init里面
    def __init__(self, w=100):
        self.weight = w

    # 叫声
    def roar(self):
        print("mie mie mie !!!")
        # 动物叫了体重会减
        self.weight -= 5

    # 喂食
    def feed(self, food):
        # 判断实物的类型。喂多了会加10,喂错了减10
        if food == 'grass':
            self.weight += 10
            print("喂对了")
        else:
            self.weight -= 10

# 定义房间
class Room:
    # 定义静态属性
    RoomName = '房间'

    # 房间有房间号和动物,实例属性要定义在初始化方法init里面
    def __init__(self, num1, animal):
        # 房间号
        self.num = num1
        # 定义房间中动物
        self.animal = animal

# 保存房间对象
room_list = []
# 实例化10次
for one in range(1, 11):
    # 随机产生动物
    rint = random.randint(1, 2)
    if rint == 1:
        animal = Tiger()
    else:
        animal = Sheep()
    # 实例化出来房间对象
    rm = Room(one, animal)
    room_list.append(rm)

# 使用多线程,一个线程控制时间,一个线程控制游戏执行
def time_out():
    start_time = time.time()  # 获取游戏开始时间
    while True:
        # 每次循环都获取一次时间,和游戏开始时间相减,做判断
        end_time = time.time()

        if end_time - start_time >= 10:
            # 游戏终止的时候,需要查看房间放的什么动物,动物的体重是多少
            for roomobj in room_list:
                # 循环遍历房间对象,输入房间号 动物 体重
                print(f"{roomobj.num}号房间中动物为:{roomobj.animal.classname},体重:{roomobj.animal.weight}")
            break
    # 下面的代码是循环执行结束才会执行
    os._exit(1)

# 生成线程
t1 = threading.Thread(target=time_out)
# 启动线程
t1.start()

# 进行2分钟倒计时,两分钟内是一个死循环,如果时间到了就终止循环

while True:

    # 如果游戏时间没有到,就弹出房间,让人选择喂食还是敲门
    roomid = random.randint(0, 9)  # 随机生成数字,作为下标取房间对象列表中内容

    # 列表下标取值
    roomobj = room_list[roomid]
    # 输入房间号
    print(f"当前房间为:{roomobj.num}")
    # 选择是否需要敲门
    ch = input("请输入要操作的值:敲门y/n")
    if ch == 'y':
        # 敲门的时候动物会叫,并且体重会减
        roomobj.animal.roar()

    # 输入要喂食的事物
    food = input("请输入食物:meet grass:")
    # 进行喂食
    roomobj.animal.feed(food)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

patmos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值