1. 程式人生 > >python遊戲程式設計——烏龜和魚類場景程式設計

python遊戲程式設計——烏龜和魚類場景程式設計

綜合舉例:

    遊戲程式設計:按以下要求定義一個烏龜類和魚類並嘗試編寫遊戲。
O    假設遊戲場景為範圍(x, y)為0<=x<=100<=y<=10

·       遊戲生成1只烏龜和10條魚

·       它們的移動方向均隨機

·       烏龜的最大移動能力是2Ta可以隨機選擇1還是2移動),魚兒的最大移動能力是1

·      

當移動到場景邊緣,自動向反方向移動

·       烏龜初始化體力為100(上限)

·       烏龜每移動一次,體力消耗1

·       當烏龜和魚座標重疊,烏龜吃掉魚,烏龜體力增加20

·       魚暫不計算體力

·       當烏龜體力值為0(掛掉)或者魚兒的數量為0遊戲結束

 

實現程式碼如下:

  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.     def move(self):
  12.         # 隨機計算方向並移動到新的位置(x, y)
  13.         new_x = self.x + r.choice([1, 2, -1, -2])
  14.         new_y = self.y + r.choice([1, 2, -1, -2])
  15.         # 檢查移動後是否超出場景x軸邊界
  16.         if new_x < legal_x[0]:
  17.             self.x = legal_x[0] - (new_x - legal_x[0])
  18.         elif new_x > legal_x[1]:
  19.             self.x = legal_x[1] - (new_x - legal_x[1])
  20.         else:
  21.             self.x = new_x
  22.         # 檢查移動後是否超出場景y軸邊界
  23.         if new_y < legal_y[0]:
  24.             self.y = legal_y[0] - (new_y - legal_y[0])
  25.         elif new_y > legal_y[1]:
  26.             self.y = legal_y[1] - (new_y - legal_y[1])
  27.         else:
  28.             self.y = new_y        
  29.         # 體力消耗
  30.         self.power -= 1
  31.         # 返回移動後的新位置
  32.         return (self.x, self.y)

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

  37. class Fish:
  38.     def __init__(self):
  39.         self.x = r.randint(legal_x[0], legal_x[1])
  40.         self.y = r.randint(legal_y[0], legal_y[1])
  41.         
  42.     def move(self):
  43.         # 隨機計算方向並移動到新的位置(x, y)
  44.         new_x = self.x + r.choice([1, -1])
  45.         new_y = self.y + r.choice([1, -1])
  46.         # 檢查移動後是否超出場景x軸邊界
  47.         if new_x < legal_x[0]:
  48.             self.x = legal_x[0] - (new_x - legal_x[0])
  49.         elif new_x > legal_x[1]:
  50.             self.x = legal_x[1] - (new_x - legal_x[1])
  51.         else:
  52.             self.x = new_x
  53.         # 檢查移動後是否超出場景y軸邊界
  54.         if new_y < legal_y[0]:
  55.             self.y = legal_y[0] - (new_y - legal_y[0])
  56.         elif new_y > legal_y[1]:
  57.             self.y = legal_y[1] - (new_y - legal_y[1])
  58.         else:
  59.             self.y = new_y
  60.         # 返回移動後的新位置
  61.         return (self.x, self.y)

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

  67. while True:
  68.     if not len(fish):
  69.         print("魚兒都吃完了,遊戲結束!")
  70.         break
  71.     if not turtle.power:
  72.         print("烏龜體力耗盡,掛掉了!")
  73.         break

  74.     pos = turtle.move()
  75.     # 在迭代器中刪除列表元素是非常危險的,經常會出現意想不到的問題,因為迭代器是直接引用列表的資料進行引用
  76.     # 這裡我們把列表拷貝給迭代器,然後對原列表進行刪除操作就不會有問題了^_^
  77.     for each_fish in fish[:]:
  78.         if each_fish.move() == pos:
  79.             # 魚兒被吃掉了
  80.             turtle.eat()
  81.             fish.remove(each_fish)
  82.             print("有一條魚兒被吃掉了...")