鱼C论坛

 找回密码
 立即注册
查看: 2740|回复: 3

关于第37讲 乌龟与小鱼游戏的问题,为什么会超出边界呢?

[复制链接]
发表于 2017-2-6 20:22:19 | 显示全部楼层 |阅读模式
10鱼币
各位大神,这是零基础37讲最后一题。
这是我抄写的代码,为什么会超xy的边界呢, 哪里写错了吗?
  1. import random as r
  2. legal_x = [0, 10]
  3. legal_y = [0, 10]


  4. class Turtle:
  5.         def __init__(self,name = ''):
  6.                 self.power = 100
  7.                 self.x = r.randint(legal_x[0], legal_x[1])
  8.                 self.y = r.randint(legal_y[0], legal_y[1])
  9.                 self.name = name
  10.                 # if self.y < 0:
  11.                         # raise
  12.                 print('%s从(%d,%d)出发了~~' % (self.name, self.x,self.y))
  13.         def move(self):
  14.                 new_x = self.x + r.choice([1, 2, -1, -2])
  15.                 new_y = self.y + r.choice([1, 2, -1, -2])
  16.                 if new_x < legal_x[0]:
  17.                         self.x = legal_x[0] - (new_x - legal_x[0])
  18.                 elif new_x > legal_x[1]:
  19.                         self.x = legal_x[1] - (new_x - legal_x[1])
  20.                 else:
  21.                         self.x = new_x
  22.                        
  23.                 if new_y < legal_y[0]:
  24.                         self.y = legal_y[0] - (new_y - legal_y[0])
  25.                 elif new_y > legal_y[1]:
  26.                         self.y = legal_y[1] - (new_y - legal_y[1])
  27.                 else:
  28.                         self.y = new_y
  29.                 self.power -= 1
  30.                 print('%s位于(%d, %d)' % (self.name, self.x, self.y), end = '')
  31.                 print('我还有%d格体力' % self.power)
  32.                 return(self.x, self.y)
  33.         def eat(self):
  34.                 self.power += 20
  35.                 if self.power > 100 :
  36.                         self.power = 100
  37. class Fish:
  38.         def __init__(self, name = ''):
  39.                 self.x = r.randint(legal_x[0], legal_x[1])
  40.                 self.y = r.randint(legal_y[0], legal_y[1])
  41.                 self.name = name
  42.         def move(self):
  43.                 new_x = self.x + r.choice([1, -1])
  44.                 new_y = self.y + r.choice([1, -1])
  45.                 if new_x < legal_x[0]:
  46.                         self.x = legal_x[0] - (new_x - legal_x[0])
  47.                 elif new_x > legal_x[1]:
  48.                         self.x = legal_x[1] - (new_x - legal_x[1])
  49.                 else:
  50.                         self.x = new_x
  51.                        
  52.                 if new_y < legal_y[0]:
  53.                         self.y = legal_y[0] - (new_y - legal_y[0])
  54.                 elif new_y > legal_y[1]:
  55.                         self.y = legal_y[1] - (new_y - legal_y[1])
  56.                 else:
  57.                         self.y = new_y
  58.                 print('%s位于(%d, %d)' % (self.name, self.x, self.y))
  59.                 return(self.x, self.y)
  60. turtle = Turtle(name = '绿毛龟')
  61. fish = []
  62. for i in range(10):
  63.         new_fish = Fish(name = '傻鱼%d号' % i)
  64.         fish.append(new_fish)
  65. while True:
  66.                 if not len(fish):
  67.                         print('鱼儿都吃完了,游戏结束!!')
  68.                         break
  69.                 if not turtle.power:
  70.                         print('乌龟体力耗尽,挂掉了!')
  71.                         print('还剩%d条鱼。' % len(fish))
  72.                         break
  73.                
  74.                 pos = turtle.move()
  75.                
  76.                 for each_fish in fish[:]:
  77.                         if each_fish.move() == pos:
  78.                                
  79.                                 turtle.eat()
  80.                                 fish.remove(each_fish)
  81.                                 print('%s被吃掉了!!' % each_fish.name)
  82.                         elif each_fish.move()[1] < 0:
  83.                                 raise
复制代码

最佳答案

查看完整内容

你这样算应该是对的呀,并没有超边界呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-6 20:22:20 | 显示全部楼层
你这样算应该是对的呀,并没有超边界呀
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-7 14:51:21 | 显示全部楼层
Little.L 发表于 2017-2-7 14:21
你这样算应该是对的呀,并没有超边界呀

今天跑一遍好像没有超出边界了,之前一直出现负坐标。
OK~~谢谢~~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-7 15:19:39 | 显示全部楼层
顶一下~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-25 06:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表