鱼C论坛

 找回密码
 立即注册
查看: 2130|回复: 2

020-角色移动-闭包-如何调用 create(),并为其中的变量赋值

[复制链接]
发表于 2016-4-5 22:27:20 | 显示全部楼层 |阅读模式

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

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

x
020-游戏中角色移动-闭包

问题1:当 move = create() 这里赋值之后,为什么 move([1, 0], 10) 要这么写?
(我可以理解这三个数字  1:x轴正方向   0:y轴不动   10:移动十步)
但是为什么1,0,10,这3个值怎么赋给函数里的四个变量呢?
定义-函数
  1. def create(pos_x=0, pos_y=0):    #这里有 pos_x=0, pos_y=0 两个变量
  2.     def moving(direction, step):     #这里也有 direction, step  两个变量
复制代码


调用-输出
  1. move = create()
  2. print('向右移动10步后,位置是:', move([1, 0], 10))
复制代码


问题2:
我想删掉  move = create()  这句话,然后在 print 里面直接调用 create 函数
但是以下这两个写法运行之后 都报错了,该怎么修改,才能直接在 print 里面调用呢?

  1. print('向右移动10步后,位置是:', create(1,0)(1,20) )
复制代码

  1. print('向右移动10步后,位置是:', create[1,0][1,20] )
复制代码



这是最原始的程序(供大家参考) 希望大神能来解答

  1. origin = (0, 0)         # 原点
  2. legal_x = [-100, 100]   # x轴的移动范围
  3. legal_y = [-100, 100]   # y轴的移动范围

  4. def create(pos_x=0, pos_y=0):
  5. # 初始化位于原点为主   
  6.     def moving(direction, step):
  7.     # direction参数设置方向,1为向右(向上),-1为向左(向下),0为不移动
  8.     # step参数设置移动的距离
  9.         nonlocal pos_x, pos_y
  10.         new_x = pos_x + direction[0] * step
  11.         new_y = pos_y + direction[1] * step
  12.         # 检查移动后是否超出x轴边界
  13.         if new_x < legal_x[0]:
  14.             pos_x = legal_x[0] - (new_x - legal_x[0])
  15.         elif new_x > legal_x[1]:
  16.             pos_x = legal_x[1] - (new_x - legal_x[1])
  17.         else:            
  18.             pos_x = new_x
  19.         # 检查移动后是否超出y轴边界
  20.         if new_y < legal_y[0]:
  21.             pos_y = legal_y[0] - (new_y - legal_y[0])
  22.         elif new_y > legal_y[1]:
  23.             pos_y = legal_y[1] - (new_y - legal_y[1])
  24.         else:            
  25.             pos_y = new_y
  26.         return pos_x, pos_y
  27.     return moving
  28.    
  29. move = create()
  30. print('向右移动10步后,位置是:', move([1, 0], 10))
  31. print('向上移动130步后,位置是:', move([0, 1], 130))
  32. print('向左移动10步后,位置是:', move([-1, 0], 10))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-5 22:40:45 | 显示全部楼层
问题1,不是赋值给四个变量,而是两个:direction, step。pos_x, pos_y都使用默认值0
问题2.,print('向右移动10步后,位置是:', create()([1, 0], 10))

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +2 收起 理由
宝贝归来 + 5 + 5 + 2 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2016-4-6 11:07:22 | 显示全部楼层
冬雪雪冬 发表于 2016-4-5 22:40
问题1,不是赋值给四个变量,而是两个:direction, step。pos_x, pos_y都使用默认值0
问题2.,print('向右 ...

太感谢了~终于明白了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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