zoukankan      html  css  js  c++  java
  • 小游戏:乌龟吃鱼

    按以下要求定义一个乌龟类和鱼类并尝试编写游戏
    ·假设游戏场景范围(x,y)为0<=x<=10,0<=y<=10
    ·游戏生成1只乌龟和10条鱼
    ·它们的移动方向均随机
    ·乌龟的最大移动能力是2(他可以随机选择1还是2移动),鱼儿的最大移动能力是1
    ·当移动到场景边缘,自动向反方向移动
    ·乌龟初始体力为100(上线)
    ·乌龟每移动一次,体力消耗1
    ·当乌龟和鱼的坐标重合,乌龟吃掉鱼,乌龟体力增加20
    ·鱼暂时不计算体力
    ·当乌龟体力值为0(挂了)或鱼的数量为0 ,游戏结束

      1 import random as r
      2 
      3 lay_x =[0,10]
      4 lay_y =[0,10]
      5 
      6 class Turple:
      7     def __init__(self): #初始化Turple能量和位置
      8         self.power = 100
      9         self.x = r.randint(lay_x[0],lay_x[1])
     10         self.y = r.randint(lay_y[0],lay_y[1])
     11     def eat(self):
     12         self.power += 20
     13         if self.power >= 100:
     14             self.power = 100
     15     def move(self):
     16         #随机计算方向并移动到新位置(x,y)
     17         new_x = self.x +r.choice([1,2,-1,-2])
     18         new_y = self.y + r.choice([1,2,-1,-2])
     19 
     20         #检查移动后xy轴边界
     21         if new_x < lay_x[0]:
     22             self.x = lay_x[0]-(new_x -lay_x[0])
     23         elif new_x >lay_x[1]:
     24             self.x = lay_x[1]-(new_x -lay_x[1])
     25         else:
     26             self.x = new_x
     27 
     28         if new_y < lay_y[0]:
     29             self.y = lay_y[0]-(new_y -lay_y[0])
     30         elif new_y >lay_y[1]:
     31             self.y = lay_y[1]-(new_y -lay_y[1])
     32         else:
     33             self.y = new_y
     34 
     35         self.power -= 1  #体力消耗
     36         return (self.x,self.y)  #返回移动新位置
     37 class Fish:
     38     def __init__(self): #初始化鱼位置
     39         self.x = r.randint(lay_x[0],lay_x[1])
     40         self.y = r.randint(lay_y[0],lay_y[1])
     41     def move(self):
     42         #随机计算方向并移动到新位置(x,y)
     43         new_x = self.x +r.choice([1,-1])
     44         new_y = self.y + r.choice([1,-1])
     45 
     46         #检查移动后xy轴边界
     47         if new_x < lay_x[0]:
     48             self.x = lay_x[0]-(new_x -lay_x[0])
     49         elif new_x >lay_x[1]:
     50             self.x = lay_x[1]-(new_x -lay_x[1])
     51         else:
     52             self.x = new_x
     53 
     54         if new_y < lay_y[0]:
     55             self.y = lay_y[0]-(new_y -lay_y[0])
     56         elif new_y >lay_y[1]:
     57             self.y = lay_y[1]-(new_y -lay_y[1])
     58         else:
     59             self.y = new_y
     60 
     61         return (self.x,self.y)  #返回移动新位置
     62 if __name__ == '__main__':
     63     turple = Turple()
     64     fish = []
     65     for i in range(10):
     66         fish_new = Fish()
     67         fish.append(fish_new)
     68     while True:
     69         if len(fish) == 0:
     70 #         if not len(fish):
     71             print("鱼被吃光了")
     72             break
     73         if turple.power == 0:
     74 #         if not turple.power:
     75             print("乌龟被累死了")
     76             break
     77         pos = turple.move()
     78         for each_fish in fish:
     79             if each_fish.move() == pos:
     80                 print(each_fish.move(),pos)
     81                 fish.remove(each_fish)
     82                 turple.eat()

    随机执行结果:

    (2, 1) (3, 2)
    (2, 8) (1, 9)
    (0, 10) (1, 9)
    (3, 5) (2, 4)
    (1, 8) (2, 7)
    (10, 7) (9, 6)
    (5, 0) (4, 1)
    (3, 10) (4, 9)
    (6, 10) (7, 9)
    (4, 9) (3, 10)
    鱼被吃光了
  • 相关阅读:
    Java 8系列之重新认识HashMap
    java的4种引用 强软弱虚
    在java中为什么要把main方法定义为一个static方法?
    JAVA里面的“指针”
    Java中,一切皆是对象!为何数据类型中还分为:基本类型和对象?
    Java集合类框架的基本接口有哪些?
    线程安全 同步方法 同步锁 同步代码块
    static变量 方法 类 和final
    轻松理解数字签名和数字证书的关系
    SSL身份认证原理
  • 原文地址:https://www.cnblogs.com/pinpin/p/10058757.html
Copyright © 2011-2022 走看看