|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第三十七讲课后题,我只能生成1条鱼。
代码如下:
import random as r
class Turtle:
power = 100
begin_x = r.choice(range(11))
begin_y = r.choice(range(11))
def move(self):
new_x = self.begin_x + r.choice([-2,-1,0,1,2])
new_y = self.begin_y + r.choice([-2,-1,0,1,2])
newpower = self.power - 1
if new_x > 10:
new_x = new_x - 10
elif new_x < 0:
new_x = 10 - (-new_x)
if new_y > 10:
new_y = new_y - 10
elif new_y < 0:
new_y = 10 - (-new_y)
self.begin_x = new_x
self.begin_y = new_y
self.power = newpower
begin_x = self.begin_x
begin_y = self.begin_y
power = self.power
def eat(self):
newpower = self.power + 20
if newpower >100:
newpower = 100
self.power = newpower
power = self.power
class Fish:
begin_x = r.choice(range(11))
begin_y = r.choice(range(11))
def move(self):
new_x = self.begin_x + r.choice([-1,0,1,])
new_y = self.begin_y + r.choice([-1,0,1,])
if new_x > 10:
new_x = new_x - 10
elif new_x < 0:
new_x = 10 - -(new_x)
if new_y > 10:
new_y = new_y - 10
elif new_y < 0:
new_y = 10 - (-new_y)
self.begin_x = new_x
self.begin_y = new_y
begin_x = self.begin_x
begin_y = self.begin_y
t = Turtle()
f = Fish()
while True:
if t.power == 0:
print('乌龟没吃到鱼,已经累死了.....')
break
elif (t.begin_x,t.begin_y) == (f.begin_x,f.begin_y):
print('乌龟在 %s 位置吃掉了鱼' % [t.begin_x,t.begin_y])
break
else:
print('乌龟在 %s 位置,鱼在 %s 位置' % ((t.begin_x,t.begin_y),(f.begin_x,f.begin_y)))
t.move()
f.move()
答案用了__init__,为什么要用这个。
本帖最后由 jackz007 于 2021-12-4 17:48 编辑
- class Turtle:
- def __init__(self):
- # 初始体力
- self.power = 100
- # 初始位置随机
- self.x = r.randint(legal_x[0], legal_x[1])
- self.y = r.randint(legal_y[0], legal_y[1])
复制代码
这个 __init__() 在你定义乌龟对象的时候,会初始化其随机位置,并初始化其体力为 "满血" 状态。
- class Fish:
- def __init__(self):
- self.x = r.randint(legal_x[0], legal_x[1])
- self.y = r.randint(legal_y[0], legal_y[1])
复制代码
这个 __init__() 会在你定义每一条鱼的时候,会为其生成随机位置。
这样生成 10 条鱼:
- for i in range(10):
- new_fish = Fish()
- fish.append(new_fish)
复制代码
然后,你可以用循环移动乌龟和这 10 条鱼,并在每次移动后,检测每条鱼和乌龟的坐标重合情况,及时删除与乌龟坐标重合的小鱼,直到乌龟被 "累死" 或小鱼儿被 "吃" 尽。
|
|