Python 小甲魚教程 烏龜吃魚遊戲

bestallen發表於2016-07-18

整個程式按照答案來敲的,我覺得按照自己的水平完全沒思路寫得出來框架,就當熟悉程式碼風格來處理吧。


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')



相關文章