定义一个鱼类和龟类并编写游戏
- 假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
- 游戏生成1只乌龟和10条鱼
- 它们的移动方向均随机
- 乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
- 当移动到场景边缘,自动向反方向移动
- 乌龟初始化体力为100(上限)
- 乌龟每移动一次,体力消耗1
- 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
- 鱼暂不计算体力
import random as r
old_x=[0,10]
old_y=[0,10]
class Turtle:
def __init__(self):
#每定义一个都要前面用self识别
self.power=100
#初始位置随机,(注意调用randint前有r)
#????疑问为什么是old_x[1],new_x[1]
#####解答:本人脑瓜子抽了,看列表索引值1代表10
self.x=r.randint(old_x[0],old_x[1])
self.y=r.randint(old_y[0],old_y[1])
def move(self):
#乌龟是移动1或2,随机移动,因此用列表定义比产生随机数简单
#choice()从一个列表,元组或字符串返回一个随机项
new_x=self.x+r.choice([-1,-2,1,2])
new_y=self.y+r.choice([1,2,-1,-2])
#横向移动不超过边界
#关于为什么将old_x[0]和old_x[10]做边框而不是数值做边框的思考:这个游戏是定义在列表所在的存储空间内的,单纯的数值与列表的数值不是同一个存储空间
if new_x>old_x[1]:
self.x=old_x[1]-(new_x-old_x[1])
elif new_x<old_x[0]:
self.x=old_x[0]-(new_x-old_x[0])
else:
self.x=new_x
# new_x=old_x出现了问题,原来最后的位置还是self.x,调用函数也要是self.x
#纵坐标不超过边界与横坐标一样
if new_y>old_y[1]:
self.y=old_y[1]-(new_y-old_y[1])
elif new_y<old_y[0]:
self.y=old_y[0]-(new_y-old_y[0])
else:
self.y=new_y
self.power-=1
return (self.x,self.y)
def eat(self):
self.power+=20
if self.power>100:
self.power=100
#鱼的移动与乌龟大致类似了
class Fish:
#class要小写
def __init__(self):
self.x=r.randint(old_x[0],old_x[1])
self.y=r.randint(old_y[0],old_y[1])
def move(self):
new_x=self.x+r.choice([-1,1])
new_y=self.y+r.choice([1,-1,])
if new_x>old_x[1]:
self.x=old_x[1]-(new_x-old_x[1])
elif new_x<old_x[0]:
self.x=old_x[0]-(new_x-old_x[0])
else:
self.x=new_x
if new_y>old_y[1]:
self.y=old_y[1]-(new_y-old_y[1])
elif new_y<old_y[0]:
self.y=old_y[0]-(new_y-old_y[0])
else:
self.y=new_y
return (self.x,self.y)
turtle=Turtle()
#定义一个空列表
fish=[]
for i in range(10):
#定义了10条鱼
new_fish=Fish()
fish.append(new_fish)
#将十条鱼的坐标最终都添加到空列表里面
while True:
#再再强调一遍,True一定要首字母大写
if not len(fish):
print("鱼吃完了,游戏结束!")
break
if not turtle.power:
print("乌龟体力耗尽,挂掉了")
break
#最终有些鱼是要被吃掉的
pos=turtle.move()
# 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
# 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了
for each_fish in fish[:]:
#fish[:]包含了全部列表
#each_fish 10个中的任一条
if each_fish.move()==pos:
#鱼和乌龟位置相同
turtle.eat()
fish.remove(each_fish)
#删除此鱼
print("有一条鱼被吃掉了")
|