作业 第037讲 乌龟吃鱼 新手求助,为什么我的鱼的坐标移动有点凌乱的呢?
代码如下:import random as r
class Turtle:
def __init__(self):
self.lift = 100
Turtle.x = r.randint(0,10)
Turtle.y = r.randint(0,10)
def move(self):
step = r.choice([-1,-2,1,2])
direction = r.choice('x,y')
if direction == 'x':
new_x = Turtle.x + step
new_y = Turtle.y
else:
new_x = Turtle.x
new_y = Turtle.y + step
#边界检测
if new_x < 0:
Turtle.x = 0 - step
elif new_x > 10:
Turtle.x = 10 - step
else:
Turtle.x = new_x
ifnew_y < 0:
Turtle.y = 0 - step
elif new_y > 10:
Turtle.y = 10 - step
else:
Turtle.y = new_y
self.lift -= 1
return(Turtle.x,Turtle.y)
#吃的方法
def eat(self):
self.lift += 20
if self.lift > 100:
self.lift = 100
class Fish:
def __init__(self):
Fish.x = r.randint(0,10)
Fish.y = r.randint(0,10)
def move(self):
step = r.choice([-1,1])
#方向选择
direction = r.choice('x,y')
if direction == 'x':
new_x = Fish.x + step
new_y = Fish.y
else:
new_x = Fish.x
new_y = Fish.y + step
if new_x < 0:
Fish.x = 0 - step
elif new_x > 10:
Fish.x = 10 - step
else:
Fish.x = new_x
if new_y < 0:
Fish.y = 0 - step
elif new_y > 10:
Fish.y = 10 - step
else:
Fish.y = new_y
return(Fish.x,Fish.y)
turtle = Turtle()
fish = []
for i in range(10):
a = Fish()
fish.append(a)
while True:
if not turtle.lift:
print("哦~~我龟龟要挂了~~")
break
if not len(fish):
print("哦~我龟大爷终于把你们这帮小鱼仔吃完了的,额~好饱~~")
break
pos = turtle.move()
print(turtle.lift)
print('乌龟在:',pos)
for each_fish in fish[:]:
fishs = each_fish.move()
if fishs == pos:
turtle.eat()
print('啊~太美味了,so good ~~')
fish.remove(each_fish)
print('鱼在:',fishs)
鱼的移动坐标摘抄了凌乱的一部分:
8
乌龟在: (7, 3)
鱼在: (6, 6)
鱼在: (6, 7)
7
乌龟在: (7, 4)
鱼在: (6, 8)
鱼在: (5, 8)
6
乌龟在: (5, 4)
鱼在: (5, 7)
鱼在: (4, 7)
5
乌龟在: (5, 6)
鱼在: (4, 6)
鱼在: (4, 7)
4
乌龟在: (5, 4)
鱼在: (4, 8)
鱼在: (4, 7)
3
乌龟在: (5, 5)
鱼在: (4, 6)
鱼在: (4, 5)
2
乌龟在: (7, 5)
鱼在: (4, 4)
鱼在: (4, 3)
1
乌龟在: (5, 5)
鱼在: (4, 2)
鱼在: (5, 2)
哦~~我龟龟要挂了~~
问题一:
为什么我的鱼的坐标移动,不是一步一步移动的呢?不解{:10_280:}
其他问题:
一:写坐标的自定义变量我是写成Fish.x,小甲鱼是写成self.x的,包括体力也是写成self.power,为什么小甲鱼要用self的呢?这里有什么说法么?
二:以下是乌龟move方法里面的某两行代码,这是修改后的
self.lift -= 1
return(Turtle.x,Turtle.y)
修改前我写的顺序是相反的,如下,然后就不会执行self.lift -=1这一行代码,这是为什么呢?
return(Turtle.x,Turtle.y)
self.lift -= 1 本帖最后由 suchocolate 于 2021-10-24 18:57 编辑
1.鱼的位置是一步一步移动的。
2.self是类实例本身,self.xxx就是构建实例对象自己的变量,你换成Fish.x,就变成了类变量,就变成了共有变量,所以即使你创建了10个Fish对象,但其实他们位置都是一样的。我的建议是,你先用小甲鱼的代码学会基本的概念,然后再尝试自己改东西。
3.return后函数就结束了,后面同等级的代码就是垃圾代码。建议去复习函数章节。 suchocolate 发表于 2021-10-24 12:19
1.鱼的位置是一步一步移动的。
2.self是类实例本身,self.xxx就是构建实例对象自己的变量,你换成Fish.x, ...
原来如此!!!一语惊醒梦中人的,查了好久,没查出哪里出问题的,谢谢啊{:5_109:}
页:
[1]