一个动物园有十个房间,里面有两种动物,老虎、羊。老虎的体重是200斤,羊体重100斤。游戏开始之前,在10个房间里面,随机

放入老虎和羊。游戏这的目标是要把羊和老虎喂的越重越好。

游戏开始后,系统随机给出房间号。游戏者开始必须弄清楚,每个房间是老虎还是羊,方法是敲房间门,里面的动物都会叫,老虎叫声‘wow!!!’,

羊叫声是‘mie’。动物每叫一次体重减5斤。喂老虎应该输入单词meet,喂羊应该输入单词grass。喂对了体重加10斤。喂错了。体重减少10斤

 游戏者需要强记每个房间的动物是什么,以便不需要敲门就可以得知里面的动物是什么,从而该喂什么。这样不断循环。游戏2分钟结束后。看看你喂的动物总体重多少

1、面向对象版:

#定义 类 使用 class 关键字
class Tiger():
    #静态属性
    classname = '老虎'
    #实例属性
    def __init__(self,weight= 200):
        #self代表实例对象本身
        self.weight = weight
    #老虎叫声,实例方法
    def jiao(self):
        print("wow!!!")
        self.weight -= 5
    #喂食
    def eat(self,tt):
        if tt == 'meet':
            self.weight += 10
        elif tt == 'grass':
            self.weight -= 10
class Sheep():
    #静态属性
    classname = '喜羊羊'
    #实例属性
    def __init__(self,weight= 100):
        #self代表实例对象本身
        self.weight = weight
    #老虎叫声,实例方法
    def jiao(self):
        print("mie!!!")
        self.weight -= 5
    #喂食
    def eat(self,tt):
        if tt == 'meet':
            self.weight -= 10
        elif tt == 'grass':
            self.weight += 10
class Room():
    def __init__(self,room_num,animal):
        self.room_num = room_num
        self.animal = animal

from random import randint
rooms = []
#实例化10个房间对象
for one in range(0,10):
    if randint(0,1) == 1:
        ani = Tiger()
    else:
        ani = Sheep()
    #对象的组合
    aaa = Room(one,ani)
    #实例化的10个房间,添加到列表中
    rooms.append(aaa)

import time
ss = time.time()
while True:
    sss = time.time()
    if sss - ss > 20:
        print("游戏结束")
        for idx,room in enumerate(rooms):
            print("房间:%s" %(idx+1),room.animal.classname,room.animal.weight)
            #print(f"{idx+ 1}的动物为{room.animal.classname}体重是{room.animal.wieht}")
        break
    #随机出现1到10作为列表下标
    room_no = randint(1, 10)
    room = rooms[room_no-1]
    mm = input("我们来到了房间:%s,要敲门吗?[y/n]" %room_no)
    if mm == 'y':
        room.animal.jiao()
    yy = input("请喂食:")
    room.animal.eat(yy)


2、多线程版 os模块:
from random import randint
from threading import Thread
import time
import os
#羊、老虎、房间
class Tiger():
    #静态属性
    classname = '老虎'

    #实例属性是定义在init方法里面的
    def __init__(self,w=200):
        self.w = w

    #动物叫了体重会减少,如果方法不操作实例属性一般定义为静态方法
    def ror(self):
        print("********wow wow!!!!********")
        self.w -= 5

    #动物喂食,喂对了体重会加,
    def feed(self,t):
        if t == 'meet':
            print("恭喜你,喂对了")
            self.w += 10
        else:
            print("很遗憾、喂错了")
            self.w -= 10

class Sheep():
    #静态属性
    classname = '羊'

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

    #动物叫了体重会减少,如果方法不操作实例属性一般定义为静态方法
    def ror(self):
        print("********mie mie!!!!********")
        self.w -= 5

    #动物喂食,喂对了体重会加,
    def feed(self,t):
        if t == 'grass':
            print("恭喜你,喂对了")
            self.w += 10
        else:
            print("很遗憾、喂错了")
            self.w -= 10

class Room():
    #对象组合,房间里有房间号和动物
    def __init__(self,id,animal):
        self.id = id
        self.animal = animal

#创建一个列表来存放10个房间对象
room_obj_list = []

for one in range(1,11):
    #取出来one用来做房间号

    #随机产生羊或者老虎
    if randint(0,1) == 1:
        an = Tiger()
    else:
        an = Sheep()

    #对象组合
    room = Room(one,an)
    room_obj_list.append(room)


#用子线程来控制时间,主线程进行游戏循环

#定义一个函数,用来作为子线程入口函数
def count_third():
    #获取游戏开始时间
    starttime = time.time()

    while True:
        #获取当前时间
        cur_time = time.time()

        if cur_time - starttime > 20:
            for one in room_obj_list:
                print(f'{one.id}号房间动物为{one.animal.classname},体重为{one.animal.w}')
            break

    os._exit(0)


#创建并启动线程
t1 = Thread(target=count_third)
t1.start()


while True:
    #随机出现房间,从定义的房间列表取值
    room_obj = room_obj_list[randint(0,9)]

    #输出当前是哪个房间,然后进行选择操作
    a = input(f'当前所在{room_obj.id}号房间,请进行选择是否需要敲门y:')
    if a == 'y':
         #动物吼叫体重减少
         room_obj.animal.ror()

    b = input("请喂食:")

    room_obj.animal.feed(b)
3、多线程版  手动添加停止
from random import randint
from threading import Thread
import time
import os

#羊、老虎、房间
class Tiger():
    #静态属性
    classname = '老虎'

    #实例属性是定义在init方法里面的
    def __init__(self,w=200):
        self.w = w

    #动物叫了体重会减少,如果方法不操作实例属性一般定义为静态方法
    def ror(self):
        print("********wow wow!!!!********")
        self.w -= 5

    #动物喂食,喂对了体重会加,
    def feed(self,t):
        if t == 'meet':
            print("恭喜你,喂对了")
            self.w += 10
        else:
            print("很遗憾、喂错了")
            self.w -= 10

class Sheep():
    #静态属性
    classname = '羊'

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

    #动物叫了体重会减少,如果方法不操作实例属性一般定义为静态方法
    def ror(self):
        print("********mie mie!!!!********")
        self.w -= 5

    #动物喂食,喂对了体重会加,
    def feed(self,t):
        if t == 'grass':
            print("恭喜你,喂对了")
            self.w += 10
        else:
            print("很遗憾、喂错了")
            self.w -= 10

class Room():
    #对象组合,房间里有房间号和动物
    def __init__(self,id,animal):
        self.id = id
        self.animal = animal

#创建一个列表来存放10个房间对象
room_obj_list = []

for one in range(1,11):
    #取出来one用来做房间号

    #随机产生羊或者老虎
    if randint(0,1) == 1:
        an = Tiger()
    else:
        an = Sheep()

    #对象组合
    room = Room(one,an)
    room_obj_list.append(room)

hello = 0
#用子线程来控制时间,主线程进行游戏循环

#定义一个函数,用来作为子线程入口函数
def count_third():
    #获取游戏开始时间
    starttime = time.time()

    while True:
        #获取当前时间
        cur_time = time.time()

        if cur_time - starttime > 20:
            for one in room_obj_list:
                print(f'{one.id}号房间动物为{one.animal.classname},体重为{one.animal.w}')
            break
    global hello
    hello = 1


#创建并启动线程
t1 = Thread(target=count_third)
t1.start()


while True:
    if hello == 1:
        break
    #随机出现房间,从定义的房间列表取值
    room_obj = room_obj_list[randint(0,9)]

    #输出当前是哪个房间,然后进行选择操作
    a = input(f'当前所在{room_obj.id}号房间,请进行选择是否需要敲门y:')
    if a == 'y':
         #动物吼叫体重减少
         room_obj.animal.ror()

    b = input("请喂食:")

    room_obj.animal.feed(b)