19000 发表于 2021-10-24 11:27:45

作业 第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 12:19:10

本帖最后由 suchocolate 于 2021-10-24 18:57 编辑

1.鱼的位置是一步一步移动的。
2.self是类实例本身,self.xxx就是构建实例对象自己的变量,你换成Fish.x,就变成了类变量,就变成了共有变量,所以即使你创建了10个Fish对象,但其实他们位置都是一样的。我的建议是,你先用小甲鱼的代码学会基本的概念,然后再尝试自己改东西。
3.return后函数就结束了,后面同等级的代码就是垃圾代码。建议去复习函数章节。

19000 发表于 2021-10-24 18:12:33

suchocolate 发表于 2021-10-24 12:19
1.鱼的位置是一步一步移动的。
2.self是类实例本身,self.xxx就是构建实例对象自己的变量,你换成Fish.x, ...

原来如此!!!一语惊醒梦中人的,查了好久,没查出哪里出问题的,谢谢啊{:5_109:}
页: [1]
查看完整版本: 作业 第037讲 乌龟吃鱼 新手求助,为什么我的鱼的坐标移动有点凌乱的呢?