鱼C论坛

 找回密码
 立即注册
查看: 839|回复: 1

[已解决]关于乌龟吃鱼的小游戏中,其中的列表问题。

[复制链接]
发表于 2019-4-18 19:45:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import random as r


  2. legal_x = [0,10]
  3. legal_y = [0,10]

  4. class Turtle:
  5.     def __init__(self):
  6.         #初始体力
  7.         self.power = 100
  8.         #初始位置随机
  9.         self.x = r.randint(legal_x[0],legal_x[1])
  10.         self.y = r.randint(legal_y[0],legal_y[1])

  11.         
  12.     def move(self):
  13.         #随机计算方向并移动到新的位置(x,y)
  14.         new_x = self.x + r.choice([1,2,-1,-2])
  15.         new_y = self.y + r.choice([1,2,-1,-2])
  16.         #检查移动后是否超出场景x轴边界
  17.         if new_x < legal_x[0]:
  18.             self.x = legal_x[0]-(new_x - legal_x[0])
  19.         elif new_x > legal_x[1]:
  20.             self.x = legal_x[1]-(new_x - legal_x[1])
  21.         else:
  22.             self.x = new_x
  23.         #检查移动后是否超出场景y轴边界
  24.         if new_y < legal_y[0]:
  25.             self.y = legal_y[0]-(new_y - legal_y[0])
  26.         elif new_y > legal_y[1]:
  27.             self.y = legal_y[1]-(new_y - legal_y[1])
  28.         else:
  29.             self.y = new_y
  30.             
  31.         #体力消耗
  32.         self.power -= 1
  33.         #返回移动后的新位置
  34.         return(self.x,self.y)


  35.     def eat(self):
  36.         self.power += 20
  37.         if self.power > 100 :
  38.             self.power = 100


  39. class Fish:
  40.     def __init__(self):
  41.         #初始位置随机
  42.         self.x = r.randint(legal_x[0],legal_x[1])
  43.         self.y = r.randint(legal_y[0],legal_y[1])


  44.     def move(self):
  45.         #随机计算方向并移动到新的位置(x,y)
  46.         new_x = self.x + r.choice([1,-1])
  47.         new_y = self.y + r.choice([1,-1])
  48.         #检查移动后是否超出场景x轴边界
  49.         if new_x < legal_x[0]:
  50.             self.x = legal_x[0]-(new_x - legal_x[0])
  51.         elif new_x > legal_x[1]:
  52.             self.x = legal_x[1]-(new_x - legal_x[1])
  53.         else:
  54.             self.x = new_x
  55.         #检查移动后是否超出场景y轴边界
  56.         if new_y < legal_y[0]:
  57.             self.y = legal_y[0]-(new_y - legal_y[0])
  58.         elif new_y > legal_y[1]:
  59.             self.y = legal_y[1]-(new_y - legal_y[1])
  60.         else:
  61.             self.y = new_y
  62.         #返回移动后的新位置
  63.             return(self.x,self.y)


  64. turtle = Turtle()
  65. fish = []
  66. for i in range(10):
  67.     new_fish = Fish()
  68.     fish.append(new_fish)


  69. while True:
  70.     if not len(fish):
  71.         print('鱼儿都吃完了,游戏结束!')
  72.         break
  73.     if not turtle.power:
  74.         print('乌龟体力耗尽,挂掉了!还有%d条鱼'%len(fish[:]))
  75.         break


  76.     #乌龟吃到鱼
  77.     pos =turtle.move()
  78.     for each_fish in fish[:]:
  79.         if each_fish.move() == pos :
  80.             turtle.eat()
  81.             fish.remove(each_fish)
  82.             print('有一条鱼被吃掉了,还剩%d条'%len(fish[:]))
  83.         
  84.    



  85.    
复制代码

最后面为什么是fish[:] 而不是fish[] 求解。。我用了fish[]一直报错。无效的语法。
最佳答案
2019-4-18 19:52:07
本帖最后由 一X一 于 2019-4-18 19:54 编辑

fish[:] 相当于复制了fish列表,目的是防止后面删除时漏掉一些元素,fish[]是个什么鬼,你应该是想用fish把,如果用fish,每删掉一个元素,元素都是要向前移动,这样结果会不正确。
顺便说下fish[:]这个是切片操作,作用是复制一个列表
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-4-18 19:52:07 | 显示全部楼层    本楼为最佳答案   
本帖最后由 一X一 于 2019-4-18 19:54 编辑

fish[:] 相当于复制了fish列表,目的是防止后面删除时漏掉一些元素,fish[]是个什么鬼,你应该是想用fish把,如果用fish,每删掉一个元素,元素都是要向前移动,这样结果会不正确。
顺便说下fish[:]这个是切片操作,作用是复制一个列表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-2 01:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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