|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
这题是基于小甲鱼第三十七课的动动手的习题~
由于我看到Fish类跟Turtle类太像了,所以想把Turtle做成Fish的子类~然后就用super函数来调用Fishl类的方法再进行对Turtle合适的修改,无奈修改后报错倒没报错,反而龟龟是一直饿死没吃到鱼,所以我就对继承产生了疑惑~希望有大大指点指点~谢谢~~(修改部分已标注出来~)
无报错正常运行源代码如下:
import random as r
legal_x = [0, 10]
legal_y = [0, 10]
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])
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 < legal_x[0]:
self.x = legal_x[0]-(new_x-legal_x[0])
elif new_x > legal_x[0]:
self.x = legal_x[1]-(new_x-legal_x[1])
else:
self.x = new_x
if new_y < legal_y[0]:
self.y = legal_y[0]-(new_y-legal_y[0])
elif new_y > legal_y[0]:
self.y = legal_y[1]-(new_y-legal_y[1])
else:
self.y = new_y
self.power -= 1
return (self.x, self.y)
def eat(self):
self.power += 20
if self.power > 100:
self.power = 100
print("吃掉了一条鱼咯~")
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])
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 < legal_x[0]:
self.x = legal_x[0]-(new_x-legal_x[0])
elif new_x > legal_x[0]:
self.x = legal_x[1]-(new_x-legal_x[1])
else:
self.x = new_x
if new_y < legal_y[0]:
self.y = legal_y[0]-(new_y-legal_y[0])
elif new_y > legal_y[0]:
self.y = legal_y[1]-(new_y-legal_y[1])
else:
self.y = new_y
return (self.x, self.y)
turtle = Turtle()
fish = []
for i in range(10):
new_fish = Fish()
fish.append(new_fish)
while True:
if not len(fish):
print("鱼都被吃完了~游戏结束~")
break
if not turtle.power:
print("龟龟没力气了~挂掉了~")
break
pos = turtle.move()
for each_fish in fish[:]:
if each_fish.move() == pos:
turtle.eat()
fish.remove(each_fish)
修改成继承后的源代码如下:
import random as r
legal_x = [0, 10]
legal_y = [0, 10]
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])
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 < legal_x[0]:
self.x = legal_x[0]-(new_x-legal_x[0])
elif new_x > legal_x[0]:
self.x = legal_x[1]-(new_x-legal_x[1])
else:
self.x = new_x
if new_y < legal_y[0]:
self.y = legal_y[0]-(new_y-legal_y[0])
elif new_y > legal_y[0]:
self.y = legal_y[1]-(new_y-legal_y[1])
else:
self.y = new_y
return (self.x, self.y)
class Turtle(Fish):
def __init__(self):
self.power = 100
super().__init__()
def move(self):
super().move()
self.power -= 1
def eat(self):
self.power += 20
if self.power > 100:
self.power = 100
print("吃掉了一条鱼咯~")
turtle = Turtle()
fish = []
for i in range(10):
new_fish = Fish()
fish.append(new_fish)
while True:
if not len(fish):
print("鱼都被吃完了~游戏结束~")
break
if not turtle.power:
print("龟龟没力气了~挂掉了~")
break
pos = turtle.move()
for each_fish in fish[:]:
if each_fish.move() == pos:
turtle.eat()
fish.remove(each_fish)
|
|