Python 小甲鱼教程 乌龟吃鱼游戏

整个程序按照答案来敲的,我觉得按照自己的水平完全没思路写得出来框架,就当熟悉代码风格来处理吧。


import random as r

legal_x = [0,10]           #先定义范围,这里很巧妙,用一个列表2个数字来表示,而不是一个range
legal_y = [0,10]

class Turtle:
 def __init__(self):
  self.power = 100
  self.x=r.randint(legal_x[0],legal_x[1])   #正是因为上面的设置,下面生成初始位置就可以用randint函数来处理,这里是生成self的初始位置x
  self.y=r.randint(legal_y[0],legal_y[1])   #生成初始位置y
  
 def move(self):
  new_x=self.x+r.choice([1,2,-1,-2])          #移动一步后,新位置是原始位置加上移动距离,距离只有4种可能
  new_y=self.y+r.choice([1,2,-1,-2])
  
  if new_x <legal_x[0]:                               #如果X越出了负界限,则自动反向
   self.x=legal_x[0]-(new_x - legal_x[0])    
   
  elif new_x>legal_x[1]:                              #如果X越出了正界限,则自动反向
   self.x=legal_x[1]-(new_x - legal_x[1])
  else: 
   self.x=new_x                                          #不越界的情况下,刷新位置,就等于移动后位置
   
  if new_y<legal_y[0]:                                       
   self.y=legal_y[0]-(new_y - legal_y[0])
  
  elif new_y>legal_y[1]:
   self.y=legal_y[1]-(new_y - legal_y[1])
   
  else:
   self.y=new_y
   
  self.power -= 1
  return (self.x,self.y)
  
 def eat(self):                                              #定义动作吃,吃了以后体力加20
  self.power+=20
  if self.power>100:                                    #超过体力上限100了就不变
   self.power = 100
   
class Fish:
 def __init__(self):
  self.x = r.randint(legal_x[0],legal_y[1])     #这里定义鱼类,初始化位置
  self.y = r.randint(legal_y[0],legal_y[1])
  
 def move(self):                                          #和乌龟的属性一样,移动功能
  new_x = self.x + r.choice([1,2,-1,-2])
  new_y = self.y + r.choice([1,2,-1,-2])
  
  if new_x < legal_x[0]:
   self.x = legal_x[0] - (new_x-legal_x[0])
  
  elif new_x > legal_x[1]:
   self.x = legal_x[1]-(new_x-legal_x[1])
  
  else:
   self.x = new_x
  
  if new_y < legal_y[0]:
   self.y = legal_y[0]-(new_y - legal_y[0])
   
  elif new_y > legal_y[1]:
   self.y = legal_y[1]-(new_y - legal_y[1])
   
  else:
   self.y = new_y
   
  return (self.x,self.y)
  
  
turtle = Turtle()                           #实例化乌龟
fish=[]                                         #将所有的鱼放进一个list
for i in range(10):                       
 new_fish = Fish()                      #在新建实例的同时,在下一行代码,将实例鱼放进列表
 fish.append(new_fish)
 
while True:
 if not len(fish):                          #len(fish)在有鱼的情况下是true,所以当没鱼的时候,执行下面的while循环,当有鱼或者乌龟有体力的时候,游戏始终循环
  print ('no more fishes, game over')
  break
  
 if not turtle.power:                     #如果乌龟体力没了,游戏结束
  print ('turtle is dead')
  break
  
 pos = turtle.move()                   #将乌龟实例move函数返回的位置,赋值给pos
 for each_fish in fish[:]:              #历遍每条鱼,鱼移动后的位置和乌龟的位置有重叠,就执行吃的动作,并移除一条鱼
  if each_fish.move() == pos:
   turtle.eat()
   fish.remove(each_fish)
   print ('one fish was ated')


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值