鱼C论坛

 找回密码
 立即注册
查看: 1403|回复: 0

[技术交流] 作业 第037讲 乌龟吃鱼 实现实时显示乌龟位置

[复制链接]
发表于 2020-12-22 19:29:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 tytommy 于 2020-12-22 19:51 编辑

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

写了一天多。。
                                                                                                       
有兴趣可以复制下来看看
每走一步都输出一个‘‘图像’’,最后一步的输出图:

运行结果1

运行结果1

运行结果2

运行结果2

  1. from random import randint as 随机


  2. class Gui:  # 龟
  3.     hp = 100

  4.     def walk(self, x0):
  5.         mov = 随机(1, 2)
  6.         f = 随机(1, 4)
  7.         self.hp -= 1
  8.         if f == 1:
  9.             return [x0[0], bian(1, x0[1], mov)]
  10.         if f == 2:
  11.             return [x0[0], bian(0, x0[1], mov)]
  12.         if f == 3:
  13.             return [bian(0, x0[0], mov), x0[1]]
  14.         if f == 4:
  15.             return [bian(1, x0[0], mov), x0[1]]


  16. class Yu:
  17.     hp = 1

  18.     def walk(self, x0):
  19.         if self.hp == 0:
  20.             return []
  21.         else:
  22.             f = 随机(1, 4)
  23.             if f == 1:
  24.                 return [x0[0], bian(1, x0[1], 1)]
  25.             if f == 2:
  26.                 return [x0[0], bian(0, x0[1], 1)]
  27.             if f == 3:
  28.                 return [bian(0, x0[0], 1), x0[1]]
  29.             if f == 4:
  30.                 return [bian(1, x0[0], 1), x0[1]]


  31. # 判断边界
  32. def bian(jt, w, b):  # 进退 位置 步长
  33.     if jt == 1:
  34.         if w == 10:
  35.             return w - b
  36.         if w == 9:
  37.             if b == 2:
  38.                 return w
  39.             else:
  40.                 return w + b
  41.         else:
  42.             return w + b
  43.     if jt == 0:
  44.         if w == 0:
  45.             return w + b
  46.         if w == 1:
  47.             if b == 2:
  48.                 return w
  49.             else:
  50.                 return w - b
  51.         else:
  52.             return w - b


  53. def show(al):  # 生成图像 并返回死鱼数
  54.     dies = 0  # 死鱼数
  55.     for l in range(len(al)):
  56.         n = al[l]
  57.         if n:
  58.             a = n[0] + n[1] * 11
  59.             if l == 0:
  60.                 tu2[a] = '* '  # *号代表乌龟
  61.             else:
  62.                 tu2[a] = str(l-1)+' '  # 数字代表鱼
  63.         else:
  64.             dies += 1
  65.     for p in range(10, -1, -1):
  66.         for q in range(0, 11):
  67.             print(tu2[p * 11 + q], end='')
  68.         print(p)
  69.     print('0 1 2 3 4 5 6 7 8 9 10 \n吃了%d条 ' % dies, end='')
  70.     return dies


  71. wei = []  # 存放所有的位置
  72. g = Gui()
  73. yu = [Yu(), Yu(), Yu(), Yu(), Yu(), Yu(), Yu(), Yu(), Yu(), Yu()]
  74. tu = []  # 底图的列表
  75. tu2 = []  # 实时图的列表
  76. for iii in range(0, 121):  # 创建一个121个字符串的列表方便显示
  77.     tu.append('  ')  # 这里可以替换
  78. for ii in range(11):  # 随机生成11个位置,第一个是甲鱼
  79.     wei.append([随机(0, 10), 随机(0, 10)])
  80. while g.hp:
  81.     tu2 = tu[:]  # 刷新显示
  82.     wei[0] = g.walk(wei[0])
  83.     for i in range(1, 11):
  84.         wei[i] = yu[i-1].walk(wei[i])
  85.         # print(wei[0],wei[i])
  86.         if wei[i] == wei[0]:
  87.             # print('chi')
  88.             wei[i] = []
  89.             yu[i-1].hp = 0
  90.             g.hp += 20
  91.     die = show(wei)
  92.     print('HP =', g.hp)
  93.     if die == 10:
  94.         print('吃完啦')
  95.         break
  96. if g.hp == 0:
  97.     print('饿死了')
  98. print(wei)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-20 22:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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