python 37讲乌龟吃鱼,鱼被吃掉的时候坐标和乌龟不一样?
本帖最后由 油腻中年人 于 2021-8-25 17:30 编辑import random as r
zone_x =
zone_y =
class Turtle:
def __init__(self):
self.pow = 100
# 初始化乌龟的起点坐标
self.x = r.randint(1,10)
self.y = r.randint(1,10)
def move(self):
# 随机移动方向
new_x = self.x + r.choice([-1,-2,1,2])
new_y = self.y + r.choice([-1,-2,1,2])
# 判断是否超过边界
if new_x > zone_x:
self.x = zone_x - (new_x - zone_x)
elif new_x < zone_x:
self.x = zone_x - (new_x - zone_x)
else:
self.x = new_x
if new_y > zone_y:
self.y = zone_y - (new_y - zone_y)
elif new_y < zone_y:
self.y = zone_y - (new_y - zone_y)
else:
self.y = new_y
# 消耗体力
self.pow -= 1
# 返回移动后的位置
return (self.x,self.y)
def eat(self):
self.pow += 20
if self.pow >100:
self.pow = 100
class Fish:
def __init__(self):
# 初始化起点坐标
self.x = r.randint(1,10)
self.y = r.randint(1,10)
def move(self):
# 随机移动方向
new_x = self.x + r.choice([-1,1])
new_y = self.y + r.choice([-1,1])
# 判断是否超过边界
if new_x > zone_x:
self.x = zone_x - (new_x - zone_x)
elif new_x < zone_x:
self.x = zone_x - (new_x - zone_x)
else:
self.x = new_x
if new_y > zone_y:
self.y = zone_y - (new_y - zone_y)
elif new_y < zone_y:
self.y = zone_y - (new_y - zone_y)
else:
self.y = new_y
return (self.x,self.y)
turtle = Turtle()
fish = []
for i in range(0,10):
new_fish = Fish()
fish.append(new_fish)
while True:
pos = turtle.move()
for each_fish in fish:
if each_fish.move() == pos:
# 鱼儿被吃掉了
turtle.eat()
# 打印吃掉的位置
print(each_fish.move(),pos)
fish.remove(each_fish)
print('有一条鱼儿被吃掉了...')
if len(fish) == 0:
print('鱼被吃光啦,乌龟还有%d体力,游戏结束。'%turtle.pow)
break
if turtle.pow == 0:
print('还有%d条鱼没吃到乌龟就饿死了,游戏结束。'%len(fish))
break
打印吃掉的位置发现鱼和乌龟的坐标位置不一样,这是为什么?
(4, 9) (3, 10)
有一条鱼儿被吃掉了...
(2, 8) (1, 9)
有一条鱼儿被吃掉了...
(0, 1) (1, 0)
有一条鱼儿被吃掉了...
(5, 6) (4, 7)
有一条鱼儿被吃掉了...
(9, 3) (8, 4)
有一条鱼儿被吃掉了...
(8, 2) (7, 1)
有一条鱼儿被吃掉了...
(7, 4) (8, 3)
有一条鱼儿被吃掉了...
还有3条鱼没吃到乌龟就饿死了,游戏结束。
所以你应该和pos = turtle.move()一样也先给pos_fish = each_fish.move()这样子赋值,再进行比较和打印就解决了问题 # 打印吃掉的位置
print(each_fish.move(),pos)
fish.remove(each_fish)
print('有一条鱼儿被吃掉了...')
因为你代码这个地方使用print的时候又调用了一次each_fish.move()函数,鱼的位置先改变,然后才被打印出来,所以和乌龟的位置总差1
页:
[1]