设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
楼主: david_ng223
打印 上一主题 下一主题

[結帖]我開始學腳本啦~~求大神們指點~~

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

31
发表于 2014-2-2 19:15:48 | 只看该作者
本帖最后由 taroxd 于 2014-2-2 20:56 编辑
david_ng223 发表于 2014-2-2 18:57
实践:Hello world!          明白了
关于msgbox函数             明白了
字串                            ...


抱歉才看到

----------------------------------------------------------

关于 / 与 %

简单地说,/ 向负无穷取整,% 结果的正负号和除数相同



上表可以参考。注:modulo是%的别名

另外提一句,负无穷作为一个常量在Ruby中是存在的。不过你还是不用知道了。

----------------------------------------------------------

关于常量,你一楼写得那堆东西就叫常量。
使用常量可以让你要修改的时候方便许多。
一是方便查找,二是不需要改动已经写好的代码。
你需要知道常量的作用域,知道 Zero::Pokedex::POKEDEX_TYPE 是怎么回事(这个词见你的1L)

-----------------------------------------------------------

关于print、p和puts

简单地说,print和puts给使用者看,p给程序员调试看。在RGSS中,其中的区别不重要,反正玩游戏的人看不到输出=。=
所以在RGSS中,这三个方法都是供你自己调试程序用的。一般用p

------------------------------------------------------------

关于比较运算

不用深究,暂时按照符号本身的意思理解就好。但是记得 == 千万不能写成 =

------------------------------------------------------------

作为一个综合以上内容的小练习,你可以试试已知一天内的第x秒(如x=10000秒),利用/和%把它拆成当天时间:a小时b分钟c秒(如2小时46分40秒)
然后输出 “a:b:c” (如02:46:40)  如果数字只有一位的话在前方补0(如前面小时数为2,则补为02)
代码越简单越好,写完用下面的代码测试。

RUBY 代码复制
  1. loop do
  2.   t = Time.now
  3.   x = t.hour * 3600 + t.min * 60 + t.sec
  4.   # 在这里填上你的代码。x已经代入了当前的秒数
  5.   # 然后把代码放在脚本编辑器的Main之前
  6.   # 如果代码正确的话,应该能看到控制台中不断输出当前时间
  7.   # 注意把焦点放在游戏窗口上
  8.   # 测试完了别忘把这段代码删掉
  9.   Graphics.wait(60)
  10. end


提示:可以用 < 10 来判断是否要补0。

注:有比较高级的方法,参见 Game_System#playtime_s 。暂时不需要掌握。

--------------------------------------------------------------

参考:
RUBY 代码复制
  1. h = x / 60 / 60
  2. m = x / 60 % 60
  3. s = x % 60
  4.  
  5. h = h < 10 ? "0#{h}" : h.to_s
  6. m = m < 10 ? "0#{m}" : m.to_s
  7. s = s < 10 ? "0#{s}" : s.to_s
  8.  
  9. p "#{h}:#{m}:#{s}"
  10.  
  11. # 下面的两种方法现在不能理解没有关系
  12. # p [h, m, s].collect {|num| num < 10 ? "0#{num}" : num.to_s }.join(':')
  13. # p sprintf("%02d:%02d:%02d", h, m, s)

点评

至少人家没学过 =。=  发表于 2014-2-2 20:47
sprintf很高级吗……  发表于 2014-2-2 20:43
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
32
 楼主| 发表于 2014-2-2 20:25:50 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
33
 楼主| 发表于 2014-2-2 20:55:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

34
发表于 2014-2-2 21:04:00 | 只看该作者
本帖最后由 taroxd 于 2014-2-2 21:30 编辑
david_ng223 发表于 2014-2-2 20:55
@taroxd


条件语句的正确缩进,以及各种用法

RUBY 代码复制
  1. if some_condition # 这里加 then 是不好的
  2.   do_something_if_some_condition
  3. elsif another_condition
  4.   do_something_if_another_condition
  5. else
  6.   do_something_else
  7. end
  8.  
  9. # unless...else...end 是不好的
  10.  
  11. do_something if some_condition
  12. some_condition and do_something  # 这句话句意和上面一句相同,暂时可以不用理解。
  13. # if some_condition then do_something end 是不好的
  14. # unless !some_condition 是不好的
  15.  
  16. do_something_else unless some_condition  # do_something if !some_condition 是不好的
  17. some_condition or do_something_else # 这句话句意和上面一句相同,暂时可以不用理解。
  18. # unless condition1 && condition2 是不好的
  19.  
  20. some_condition ? do_something : do_something_else
  21. # if some_condition then do_something else do_something_else end 是不好的
  22.  
  23. case expression
  24. when condition1 then do1
  25. when condition2 # 这里加 then 是不好的
  26.   do2_line1
  27.   do2_line2
  28. # when condition3: do3 #这样写是不好的,并且在Ruby后期版本已经不支持。请务必不要用这样的写法。
  29. else do_else # do_else 内容较长时建议换行
  30. end
  31. # 判断条件成立是用 condition === expression
  32.  
  33. # 以上“是不好的”仅仅是不建议这么写,写了也不会有任何问题。
  34. # 但事实上,以上不建议的写法在默认脚本中一次都没有出现过。

点评

= =!一般有好奇心的人都会想去弄懂吧 这里不说最后大约是去百度……  发表于 2014-2-2 21:33
不是注释了“暂时可以不用理解”嘛  发表于 2014-2-2 21:26
话说短路逻辑这就放出来真的好吗……既然说的话不妨说透彻一点  发表于 2014-2-2 21:26
只是一个补充而已  发表于 2014-2-2 21:24
我记得一般不建议写if condition then do_sth else do_sth end来着 因为 ? : 的形式更简单美观  发表于 2014-2-2 21:11
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
35
 楼主| 发表于 2014-2-2 23:53:27 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6543
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

36
发表于 2014-2-3 08:37:36 | 只看该作者
本帖最后由 余烬之中 于 2014-2-3 20:44 编辑
david_ng223 发表于 2014-2-2 23:53
A_B_C和B_C_D是标识符
a和b是變量
兩者都是輸出234,即是兩者沒有分別??


首先 【标识符】并不是常量专属的名称 凡是任何用于指代某对象 由使用者自定义的字符序列都是标识符
比如  local_var = 3   其中local_var就是标识符   @ins_var = 0   @ins_var是    $glo_var = 9    $glo_var是   CON = "Hi"   CON是   甚至【module AMOD】AMOD也是    【class CLS】CLS也是

常量和变量都可以提前操作 至于这句话:
常量无法改变,只能赋值给别人。
说的是不能动态的改变
看两个例子
=======================================================
RUBY 代码复制
  1. CON = 100
  2. p CON
  3. #=>100
  4. CON += 50
  5. #warning: already initialized constant CON
  6. p CON
  7. #=>150
  8. another_var = CON
  9. p another_var #=> 150
在给常量第一次赋值以后 再对其赋值就会出现警告 但是不出错 继续执行 所以赋值还是能够成功
现在加上这样一段
RUBY 代码复制
  1. def met
  2.   CON += 3
  3.   p CON
  4. end #SyntaxError:dynamic constant assignment
  5.  
  6. met
这样的话这段代码无法通过语法检查 一句都不会执行 包括上面的100 150等
=======================================================
=======================================================
RUBY 代码复制
  1. loc = 100
  2. p loc
  3. #=>100
  4. loc += 50
  5. p loc
  6. #=>150
  7. another_var = loc
  8. p another_var #=> 150
  9.  
  10. def met
  11.   loc += 3
  12.   p loc
  13. end
  14.  
  15. met
  16. #undefined method '+' for nil:NilClass
这里也会出错 但是语法是正确的 它会输出100 150 150 然后报错 这里出错的原因是loc是局部变量 无法被met方法获取 但是其他变量可以
而且这里也没有出现警报
我们换成实例变量试试
RUBY 代码复制
  1. [url=home.php?mod=space&uid=77065]@ins[/url] = 100 # 坑人神句 下面不加井号之间的就是这样的结果
  2. @ins#-=-=-=-=-=-=-=-=-=-=-=-=# = 100  #←把井号及之间的删掉
  3. p @ins
  4. #=>100
  5. @ins#-=-=-=-=-=-=-=-=-=-=-=-=# += 50  #←把井号及之间的删掉
  6. p @ins
  7. #=>150
  8. another_var = @ins
  9. p another_var #=> 150
  10.  
  11. def met
  12.   [url=home.php?mod=space&uid=77065]@ins[/url] += 3
  13.   p @ins
  14. end
  15.  
  16. met
  17. #=>153
总体输出结果是 100 150 150 153
全局变量 类变量等结果一样 不过你暂时不用去管 记得是变量就行了
=======================================================
总结就是 常量的值不能被动态改变(方法中) 连语法都不允许 如果在方法外重新赋值 会出现警报 但是赋值本身还是成功的
变量的值能够被动态改变 只要方法能够获得该变量 就允许对他进行操作     

点评

论坛啊……  发表于 2014-2-3 09:17
第四段代码第一行,被坑~  发表于 2014-2-3 09:06
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
37
 楼主| 发表于 2014-2-4 14:53:58 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

38
发表于 2014-2-4 14:58:17 | 只看该作者
本帖最后由 taroxd 于 2014-2-4 15:11 编辑

任何一个方法都有一个返回值。若没有显式指定返回值,那么方法会返回最后一次计算的结果。

其实p也是一个方法,它返回的是p所带的参数(或构成的数组)

于是 p @loc,也就是 self.p(@loc) 返回了100
而met方法返回了最后一次计算的结果,也就是p的返回值100

然后 p met 也就变成了 p 100

另外,puts的返回值是nil,你不要met返回100的话,把第3行改成puts就可以了

--------------------------------------------------

关于返回值

RUBY 代码复制
  1. def one
  2.   return 1  # 1是该方法的返回值
  3. end
  4.  
  5. p one # 输出1


RUBY 代码复制
  1. def add_one(n)
  2.   return n + 1
  3. end
  4.  
  5. a = 1
  6. b = add_one(a)  # => 2
  7. p b             # 输出2


方法的返回值就是类似于函数的值的感觉嗯。
另外上面两个例子只是写着演示的,没什么实际用处。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6543
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

39
发表于 2014-2-4 15:27:12 | 只看该作者
david_ng223 发表于 2014-2-4 14:53
請問

def met


当你使用def...end的时候 你就定义了一个方法
ruby中每个方法都有返回值 但是并不需要你【显式】的返回 多数情况下我们是【隐式】的
RUBY 代码复制
  1. def met1
  2.   # 什么都没有的方法
  3. end
  4.  
  5. p met1
  6. #=>nil
RUBY 代码复制
  1. def met2
  2.   1314 # 只有一个 值 的方法
  3. end
  4.  
  5. p met2
  6. #=> 1314
RUBY 代码复制
  1. def met3
  2.   loc_var = 3 #定义局部变量
  3.   loc_var + 5 #计算将局部变量与5的和
  4. end
  5.  
  6. p met3
  7. #=> 8
  8. #注意 loc_var 已经被释放 不再存在
  9. #但是它的值一直是3
RUBY 代码复制
  1. @ins= 999
  2. def met4
  3.   @ins/ 3
  4. end
  5.  
  6. p met4
  7. #=> 333
  8. p @ins
  9. #=> 999
RUBY 代码复制
  1. def met5
  2.   a = 12580
  3.   submet(a) #调用另一个方法 传递了参数
  4. end
  5.  
  6. p met5
  7. #NameError:undefined local variable or method 'submet'
  8.  
  9. def submet(x)
  10.   x * 100
  11. end
  12.  
  13. p met5
  14. #=> 1258000
RUBY 代码复制
  1. def met6
  2.    9
  3.    return 100 #显式返回一个值的方法
  4.    1 #后面的内容根本不执行 包括本行和下一行
  5.    puts "dodododo"
  6. end
  7.  
  8. p met6
  9. #=> 100

  
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
40
 楼主| 发表于 2014-2-4 18:34:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-9-28 06:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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