鱼C论坛

 找回密码
 立即注册
查看: 1571|回复: 5

《零基础入门学习python》第37讲课后练习

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

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

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

x
本帖最后由 铁棍阿童木 于 2017-11-16 21:36 编辑

动动手1. 乌龟吃鱼小游戏

对于小甲鱼课后布置的游戏练习,我大致写了如下的伪代码,烦请python大神耐心指教,看思路是不是这个思路。
  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
  12. import time

  13. 定义一个乌龟类
  14. class Tortoise:
  15.     体力值energy = 100
  16.         移动值step = random.randint(1,2)
  17.         方向值direction = [-1,1](-1为向左和向下,1为向上和向右)
  18.        
  19.         def __init__(self,tt_x = 5,tt_y = 5) 初始化乌龟位置
  20.             self.tt_x = tt_x
  21.                 self.tt_y = tt_y
  22.             
  23.         def 乌龟移动函数ttMoving(self):
  24.             往x和y坐标随机方向,随机移动 1 或者 2
  25.             new_X = self.tt_x + (random.choice([-1,1]) * random.randint(1,2))
  26.                 new_Y = self.tt_y + (random.choice([-1,1]) * random.randint(1,2))
  27.                
  28.                 然后检查移动后X坐标是否越界
  29.                 if new_X < axis_X[0]: 表示超出X轴的移动范围
  30.                     self.tt_x = axis_X[0] - (new_X - axis_X[0])
  31.                 elif new_X > axis_X[1]: 表示超出x轴的移动范围
  32.                     self.tt_x = axis_X[1] - (new_X - axis_X[1])
  33.                 else:
  34.                     self.tt_x = new_X
  35.                        
  36.             再检查移动后Y坐标是否越界
  37.                 if new_Y < axis_Y[0]:
  38.                     tt_y = axis_Y[0] - (new_Y - axis_Y[0])
  39.                 elif new_Y > axis_Y[1]:
  40.                     tt_y = axis_Y[1] - (new_Y - axis_Y[1])
  41.                 else:
  42.                     tt__y = new_Y
  43.                
  44.                 return self.tt_x,self.tt_y  # 最后返回移动后的乌龟坐标。
  45.        

  46. 定义一个鱼类
  47. class Fish:
  48.     移动值step = 1
  49.         方向值direction = [-1,1](-1为向左和向下,1为向上和向右)
  50.        
  51.         def __init__(self,pos_x = 0,pos_y = 0) 初始化鱼的位置
  52.             self.fs_x = fs_x
  53.                 self.fs_y = fs_y
  54.                
  55.         def 鱼的移动函数fsMoving(self):
  56.             # 往x和y坐标随机方向,随机移动 1
  57.             new_X = self.fs_x + (random.choice([-1,1]) * self.step)
  58.             new_Y = self.fs_y + (random.choice([-1,1]) * self.step)
  59.                
  60.                 然后检查移动后X坐标是否越界
  61.                 if new_X < axis_X[0]: 表示超出X轴的移动范围
  62.                     self.fs_x = axis_X[0] - (new_X - axis_X[0]
  63.                 elif new_X > axis_X[1]: 表示超出x轴的移动范围
  64.                     self.fs_x = axis_X[1] - (new_X - axis_X[1])
  65.                 else:
  66.                     self.fs_x = new_X
  67.                        
  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.                
  76.                 return self.fs_x,self.fs_y  最后返回鱼移动后所在位置。


  77. 定义一个场景函数,初始化原点,生成乌龟对象和鱼对象
  78. def enclosure(pos_x = 4,pos_y = 5)
  79.     axis_X = [0,10]  X轴的移动范围
  80.     axis_Y = [0,10]  Y轴的移动范围
  81.         tt_Boss = Tortoise()   # 生成乌龟对象
  82.         fs_Food = Fish   # 这里对于如何生成10条鱼有点懵逼,暂时1条。
  83.         while 1:   # 游戏开始
  84.             try:
  85.                     tt_Boss.ttmoving    # 乌龟生成开始移动
  86.                     tt_Boss.energy -= 1 # 每移动一次,体力值 - 1
  87.                     fs_Food.fsmoving    # 鱼儿生成开始移动
  88.                     if self.tt_x == self.fs_x and self.tt_y == self.fs_y   # 乌龟和鱼儿的坐标重叠
  89.                         del fs_Food   # 删除鱼类的实例化对象。
  90.                         tt_Boss.energy  += 20
  91.                         continue
  92.                     else:
  93.                         continue
  94.                 except NameError:   # 如果捕捉到NameError异常,则说明鱼儿为 0 ,游戏结束。
  95.                     print("Game Over\n鱼儿被乌龟吃完了,游戏结束!!")
  96.                     break
  97.                
  98.                 if tt_Boss.energy == 0:
  99.                     print("Game Over\n乌龟累死了,游戏结束!!")
  100.                     break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-16 21:51:38 | 显示全部楼层
来膜拜膜拜~
我也学到这里,然后自己写不出来看答案,答案还有部分没弄懂 T T
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 22:56:56 | 显示全部楼层
兄弟做java的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-26 23:23:38 From FishC Mobile | 显示全部楼层
[quote]不想放弃, 发表于 2017-11-26 22:56
兄弟做java的?[/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-26 23:37:38 | 显示全部楼层
铁棍阿童木 发表于 2017-11-26 23:23
[quote]不想放弃, 发表于 2017-11-26 22:56
兄弟做java的?[/

额 你回复的是啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 13:30:01 | 显示全部楼层
思路还算清晰啊。我今天捣鼓了一下,勉强也弄出来了,貌似比标准答案还少了点东西。有时间继续努力。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 07:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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