鱼C论坛

 找回密码
 立即注册
查看: 2158|回复: 3

[技术交流] 乌龟吃鱼游戏代码

[复制链接]
发表于 2017-11-17 13:17:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 铁棍阿童木 于 2017-11-17 13:20 编辑

写完伪代码没人回复,回来看小甲鱼的答案,整体思路基本吻合(还是比较开心),契合度大概在85%左右。差别在我把游戏乌龟吃鱼、+体力、-体力等过程混杂在一起了,容易出错。
现在稍作修改代码如下:

  1. # 游戏场景为范围(x,y):0 <= x <= 10   ,   0 <= y <= 10
  2. # 游戏生成 1 只乌龟(tortoise)和 10 条鱼。
  3. # 它们的移动方向随机。
  4. # 乌龟的最大移动能力是 2 (Ta可以随机选择移动 1 还是 2 ),鱼的最大移动能力是 1
  5. # 当移动到场景边缘,自动向反方向移动
  6. # 乌龟的初始化体力为100(上限)
  7. # 乌龟每移动一次消耗体力 1
  8. # 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
  9. # 鱼暂不计算体力
  10. # 当乌龟体力值为 0 (挂掉)或者鱼儿的数量为 0 时,游戏结束。
  11. import random as r



  12. # ---------------------------------------------------------------------------
  13. axis_x = [0,100]      # 设定游戏场地的坐标值范围,圈定边界
  14. axis_y = [0,100]      # 因为在其他函数内部只需要引用不需要修改,所以定义为全局变量
  15. # ---------------------------------------------------------------------------


  16. # 乌龟类,初始化乌龟的坐标和体力值
  17. class Tortoise:
  18.     def __init__(self):
  19.         # 初始化乌龟体力值和位置
  20.         self.energy = 100
  21.         self.tt_x = 5
  22.         self.tt_y = 5

  23.     def ttMoving(self):
  24.         # 乌龟移动方法
  25.         new_x = self.tt_x + (r.choice([-1,1]) * r.randint(1,2))
  26.         new_y = self.tt_y + (r.choice([-1,1]) * r.randint(1,2))

  27.         # 检查移动后乌龟的x坐标是否超越边界
  28.         if new_x < axis_x[0]:
  29.             self.tt_x = axis_x[0] - (new_x - axis_x[0])
  30.         elif new_x > axis_x[1]:
  31.             self.tt_x = axis_x[1] - (new_x - axis_x[1])
  32.         else:
  33.             self.tt_x = new_x

  34.         # 然后检查移动后乌龟的y坐标是否超越边界
  35.         if new_y < axis_y[0]:
  36.             self.tt_y = axis_y[0] - (new_y - axis_y[0])
  37.         elif new_y > axis_y[1]:
  38.             self.tt_y = axis_y[1] - (new_y - axis_y[1])
  39.         else:
  40.             self.tt_y = new_y

  41.         # 每次调用移动方法,乌龟体力值减 1
  42.         # 调整好乌龟移动后的坐标后,返回x和y坐标的值
  43.         self.energy -= 1
  44.         return (self.tt_x,self.tt_y)

  45.     # 乌龟吃鱼时的操作
  46.     def eat_Fish(self):
  47.         self.energy += 1
  48.         if self.energy > 100:
  49.             self.energy = 100


  50. # 鱼儿类,初始化鱼儿的位置,和移动能力
  51. class Fish:
  52.     def __init__(self):
  53.         # 初始化鱼儿的位置
  54.         self.fs_x = 0
  55.         self.fs_y = 0
  56.         self.step = 1

  57.     def fsMoving(self):
  58.         # 鱼儿移动方法
  59.         new_x = self.fs_x + (r.choice([-1,1]) * self.step)
  60.         new_y = self.fs_y + (r.choice([-1,1]) * self.step)

  61.         # 然后检查鱼儿移动后x坐标是否超越边界
  62.         if new_x < axis_x[0]:
  63.             self.fs_x = axis_x[0] - (new_x - axis_x[0])
  64.         elif new_x > axis_x[1]:
  65.             self.fs_x = axis_x[1] - (new_x - axis_x[1])
  66.         else:
  67.             self.fs_x = new_x

  68.         # 再检查鱼儿移动后y坐标是否超越边界
  69.         if new_y < axis_y[0]:
  70.             self.fs_y = axis_y[0] - (new_y - axis_y[0])
  71.         elif new_y > axis_y[1]:
  72.             self.fs_y = axis_y[1] - (new_y - axis_y[1])
  73.         else:
  74.             self.fs_y = new_y

  75.         # 调整好鱼儿移动后的坐标后,返回x和y坐标的值
  76.         return (self.fs_x,self.fs_y)


  77. # 游戏启动函数,生成乌龟BOSS和十条鱼儿对象
  78. def playground():
  79.     # 生成乌龟的实例化对象
  80.     Boss = Tortoise()

  81.     # 生成十条鱼儿的实例化对象
  82.     fishs = []
  83.     for i in range(10):
  84.         new_fish = Fish()
  85.         fishs.append(new_fish)
  86.     # 启动游戏
  87.     while True:
  88.         if len(fishs) == 0:
  89.             print("Game Over\n鱼儿被乌龟吃完了,游戏结束!")
  90.             break
  91.         if Boss.energy == 0:
  92.             print("Game Over\n乌龟累死了,游戏结束!")
  93.             break

  94.         pos = Boss.ttMoving()
  95.         for each_fish in fishs[:]:
  96.             if each_fish.fsMoving() == pos:
  97.                 Boss.eat_Fish()
  98.                 fishs.remove(each_fish)
  99.                 print("有一条鱼儿被吃掉了...")
复制代码


因为我设定的游戏边界是100*100,所以乌龟累死的几率比较大。哈哈啊哈!
1111.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-17 13:34:16 From FishC Mobile | 显示全部楼层
主要太长
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-17 13:35:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 13:32:10 | 显示全部楼层
哦哦,原来打印出来的效果是这样子啊,我觉得自己标注一下坐标还更好玩。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表