|
5鱼币
不知哪有问题,帮忙看一下
import random as r
length_y= [0,10]
width_x = [0,10]
class Turtle:
def __init__(self):
turtle_power = 100
x = r.randint(width_x[0],width_x[1])
y = r.randint(length_y[0],length_y[1])
def move(self):
new_x = x + r.choices([-2,-1,0,1,2])
new_y = y + r.choices([-2,-1,0,1,2])
if new_x < width_x[0]:
new_x = width_x[0] + (width_x[0]-new_x)
elif new_x > width_x[1]:
new_x = width_x[1] - (new_x - width[1])
if new_y < length_y[0]:
new_y = length_y[0] + (length_y[0] - new_y)
elif new_y > length_y[1]:
new_y = length_y[1] - (new_y - length_y[1])
return (new_x,new_y)
def eat(self):
turtle_power += 10
if turtle_power > 100:
turtle = 100
class Fish:
def __init__(self):
x = r.randint(width_x[0],width_x[1])
y = r.randint(length_y[0],length_y[1])
def move(self):
new_x = x + r.choices([-1,0,1])
new_y = y + r.choices([-1,0,1])
if new_x < width_x[0]:
new_x = width_x[0] + (width_x[0] - new_x)
elif new_x >width_x[1]:
new_x = width_x[1] - (new_x - width[1])
if new_y < length_y[0]:
new_y = length_y[0] + (length_y[0] - new_y)
elif new_y > length_y[1]:
new_y = length_y[1] - (new_y - length_y[1])
return (new_x,new_y)
turtle = Turtle()
fish = []
for i in range(10):
each_fish = Fish()
fish.append(each_fish)
while 1:
if not turtle.turtle_power:
print("乌龟的体力都耗尽了,挂掉了!")
break
if not len(fish):
print("小鱼儿都被吃完了!")
break
pos = turtle.move()
for each in fish[:]:
if each.move() == pos:
print("小鱼被吃了!!!")
turtle.eat()
fish.remove(each)
本帖最后由 isdkz 于 2022-2-20 17:20 编辑
有四个问题,
第一个问题:
对象的属性需要加 self. ,因为对象在调用方法的时候会自动给第一个位置参数传入对象本身,
而第一个位置参数是self,你不加 self. 就只是定义了一个函数(方法)里面的局部变量而已
第二个问题:
你第16行和第42行的最后一个 width 少了一个 _x,因为你前面定义的变量是 width_x
第三个问题:
你第11、12、37、38行使用了random.choices() 而choices() 返回的是一个列表,你的 x 和 y 属性是整数,整数是不能跟列表相加的,
应该把 choices() 改成 choice(),不要最后的那个 s 返回的才是整数。
第四个问题:
你那个乌龟的体力只加不减,也就是说乌龟永远不会挂掉,
只要鱼没吃完就一直处于死循环没有跳出来,你应该在乌龟移动那里加个消耗体力
import random as r
length_y= [0,10]
width_x = [0,10]
class Turtle:
def __init__(self):
self.turtle_power = 100 # 给所有的对象属性加上 self.
self.x = r.randint(width_x[0],width_x[1])
self.y = r.randint(length_y[0],length_y[1])
def move(self):
self.new_x = self.x + r.choice([-2,-1,0,1,2]) # choices 改成 choice
self.new_y = self.y + r.choice([-2,-1,0,1,2]) # choices 改成 choice
if self.new_x < width_x[0]:
self.new_x = width_x[0] + (width_x[0]-self.new_x)
elif self.new_x > width_x[1]:
self.new_x = width_x[1] - (self.new_x - width_x[1]) # 你这里的最后一个 width 少了_x
if self.new_y < length_y[0]:
self.new_y = length_y[0] + (length_y[0] - self.new_y)
elif self.new_y > length_y[1]:
self.new_y = length_y[1] - (self.new_y - length_y[1])
self.turtle_power -= 1 # 消耗体力
return (self.new_x,self.new_y)
def eat(self):
self.turtle_power += 10
if self.turtle_power > 100:
self.turtle_power = 100
class Fish:
def __init__(self):
self.x = r.randint(width_x[0],width_x[1])
self.y = r.randint(length_y[0],length_y[1])
def move(self):
self.new_x = self.x + r.choice([-1,0,1]) # choices 改成 choice
self.new_y = self.y + r.choice([-1,0,1]) # choices 改成 choice
if self.new_x < width_x[0]:
self.new_x = width_x[0] + (width_x[0] - self.new_x)
elif self.new_x >width_x[1]:
self.new_x = width_x[1] - (self.new_x - width_x[1]) # 你这里的最后一个 width 少了_x
if self.new_y < length_y[0]:
self.new_y = length_y[0] + (length_y[0] - self.new_y)
elif self.new_y > length_y[1]:
self.new_y = length_y[1] - (self.new_y - length_y[1])
return (self.new_x,self.new_y)
turtle = Turtle()
fish = []
for i in range(10):
each_fish = Fish()
fish.append(each_fish)
while 1:
if not turtle.turtle_power:
print("乌龟的体力都耗尽了,挂掉了!")
break
if not len(fish):
print("小鱼儿都被吃完了!")
break
pos = turtle.move()
for each in fish[:]:
if each.move() == pos:
print("小鱼被吃了!!!")
turtle.eat()
fish.remove(each)
|
最佳答案
查看完整内容
有四个问题,
第一个问题:
对象的属性需要加 self. ,因为对象在调用方法的时候会自动给第一个位置参数传入对象本身,
而第一个位置参数是self,你不加 self. 就只是定义了一个函数(方法)里面的局部变量而已
第二个问题:
你第16行和第42行的最后一个 width 少了一个 _x,因为你前面定义的变量是 width_x
第三个问题:
你第11、12、37、38行使用了random.choices() 而choices() 返回的是一个列表,你的 x 和 y 属 ...
|