|
|
50鱼币
Python037讲课后作业,Fish类中我想让他们随机按(0,1)(1,0) (-1,0)(0,-1)四个方向移动 ,当鱼和乌龟坐标一致时 remove掉当前坐标的鱼,其中标记的两句for循环 用上面那个就能正常运行处结果,用下面的那个当鱼变成9条时就会报错。
原题目如下:
1. 游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。(初学者不一定可以完整实现,但请务必先自己动手,你会从中学习到很多知识的^_^)
假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
游戏生成1只乌龟和10条鱼
它们的移动方向均随机
乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
当移动到场景边缘,自动向反方向移动
乌龟初始化体力为100(上限)
乌龟每移动一次,体力消耗1
当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
鱼暂不计算体力
当乌龟体力值为0(挂掉)或者鱼儿的数量为0游戏结束
import random
class Fish:
listp = []
many=0
def bron(self,x):
Fish.many=x
for i in range(Fish.many):
x=random.randint(0,10)
y=random.randint(0,10)
Fish.listp.append ((x,y))
return Fish.listp
def run(self):
for i in range(len(Fish.listp)):
#for i in range(Fish.many):
x=random.randint(1,4)
if x==1:
if Fish.listp[i][0]<10:
Fish.listp[i]=(Fish.listp[i][0]+1,Fish.listp[i][1])
else:
Fish.listp[i] = (Fish.listp[i][0]-1, Fish.listp[i][1])
if x==2:
if Fish.listp[i][1]<10:
Fish.listp[i]=(Fish.listp[i][0],Fish.listp[i][1]+1)
else:
Fish.listp[i] = (Fish.listp[i][0], Fish.listp[i][1] - 1)
if x==3:
if Fish.listp[i][0]>0:
Fish.listp[i]=(Fish.listp[i][0]-1,Fish.listp[i][1])
else:
Fish.listp[i] = (Fish.listp[i][0]+1, Fish.listp[i][1])
if x==4:
if Fish.listp[i][1]>0:
Fish.listp[i]=(Fish.listp[i][0],Fish.listp[i][1]-1)
else:
Fish.listp[i] = (Fish.listp[i][0], Fish.listp[1]+1)
return Fish.listp
class Tor:
M=100
listp = []
def bron(self):
x=random.randint(0,10)
y=random.randint(0,10)
Tor.listp.append((x,y))
return Tor.listp
def run(self):
for i in range(2):
x=random.randint(1,4)
if x==1:
if Tor.listp[0][0]<10:
Tor.listp[0]=(Tor.listp[0][0]+1,Tor.listp[0][1])
else:
Tor.listp[0] = (Tor.listp[0][0]-1, Tor.listp[0][1])
if x==2:
if Tor.listp[0][1]<10:
Tor.listp[0]=(Tor.listp[0][0],Tor.listp[0][1]+1)
else:
Tor.listp[0] = (Tor.listp[0][0], Tor.listp[0][1] - 1)
if x==3:
if Tor.listp[0][0]>0:
Tor.listp[0]=(Tor.listp[0][0]-1,Tor.listp[0][1])
else:
Tor.listp[0] = (Tor.listp[0][0]+1, Tor.listp[0][1])
if x==4:
if Tor.listp[0][1]>0:
Tor.listp[0]=(Tor.listp[0][0],Tor.listp[0][1]-1)
else:
Tor.listp[0] = (Tor.listp[0][0], Tor.listp[0][1]+1)
Tor.M-=1
return Tor.listp
def mian():
t=Tor()
t.bron()
f=Fish()
f.bron(10)
while t.M>0 and f.many>0 :
f.run()
t.run()
if t.listp[0] in f.listp:
f.many = f.many - 1
f.listp.remove(t.listp[0])
t.M=t.M+20
print('==============')
print(t.listp)
print(f.listp)
print('还剩%s条鱼' %f.many)
print('还剩%s的体力'%t.M)
mian()[/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i][/i]
池里的实际鱼数量f.listp随着被乌龟吃掉而不断减少,Fish.many 只是一开始你传入的鱼数量,是不变的。当池的实际鱼数 f.listp少于10的时候,你还往 if Fish.listp[i][0]>0: 里面的 i 传入10 就会报错:
Traceback (most recent call last):
File "D:/python/2020_03/03_2.py", line 95, in <module>
mian()
File "D:/python/2020_03/03_2.py", line 82, in mian
f.run()
File "D:/python/2020_03/03_2.py", line 31, in run
if Fish.listp[i][0]>0:
IndexError: list index out of range
Process finished with exit code 1
你在mian 函数里的修改:
if t.listp[0] in f.listp:
f.many = f.many - 1
只对类 class Fish: 里的 many 起作用,但对函数
def bron(self,x):
Fish.many=x
里的 fish.many 没有影响,fish.many 只跟你传入的参数 x 有关,所以 fish.many 的值自始至终都是 f.bron(10),即是 10 ,才会出现 IndexError: list index out of range 报错。
不知道是不是这样???第一次回复帖子,请大佬们指点,谢谢。
|
最佳答案
查看完整内容
池里的实际鱼数量f.listp随着被乌龟吃掉而不断减少,Fish.many 只是一开始你传入的鱼数量,是不变的。当池的实际鱼数 f.listp少于10的时候,你还往 if Fish.listp[0]>0: 里面的 i 传入10 就会报错:
Traceback (most recent call last):
File "D:/python/2020_03/03_2.py", line 95, in
mian()
File "D:/python/2020_03/03_2.py", line 82, in mian
f.run()
File "D:/python/2020_03/03_2.py", line 31, ...
|