面向对象-动物园例题

一个动物园有十个房间,里面有两种动物,老虎、羊。老虎的体重是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)
 

猜你喜欢

转载自www.cnblogs.com/blog-apply/p/13207088.html
今日推荐