|
20鱼币
本帖最后由 油腻中年人 于 2021-8-25 17:30 编辑
import random as r
zone_x = [0,10]
zone_y = [0,10]
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[1]:
self.x = zone_x[1] - (new_x - zone_x[1])
elif new_x < zone_x[0]:
self.x = zone_x[0] - (new_x - zone_x[0])
else:
self.x = new_x
if new_y > zone_y[1]:
self.y = zone_y[1] - (new_y - zone_y[1])
elif new_y < zone_y[0]:
self.y = zone_y[0] - (new_y - zone_y[0])
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[1]:
self.x = zone_x[1] - (new_x - zone_x[1])
elif new_x < zone_x[0]:
self.x = zone_x[0] - (new_x - zone_x[0])
else:
self.x = new_x
if new_y > zone_y[1]:
self.y = zone_y[1] - (new_y - zone_y[1])
elif new_y < zone_y[0]:
self.y = zone_y[0] - (new_y - zone_y[0])
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()这样子赋值,再进行比较和打印就解决了问题
|
最佳答案
查看完整内容
所以你应该和pos = turtle.move()一样也先给pos_fish = each_fish.move()这样子赋值,再进行比较和打印就解决了问题
|