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

Project1

 找回密码
 注册会员
搜索
查看: 2088|回复: 6
打印 上一主题 下一主题

[已经解决] 关于“随机出题”这一段脚本的解释

[复制链接]

Lv4.逐梦者

梦石
0
星屑
12810
在线时间
1457 小时
注册时间
2012-7-24
帖子
1302
跳转到指定楼层
1
发表于 2013-8-28 14:37:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
RT,牛排考场第一期中那道随机出计算题的题………………看了标准答案后并且查看帮助文件后还是不明白那段脚本的内容,特请高手解释一下,不胜感激 (脚本盲一个 …………还望详细一点0.0)
  1. j=$game_variables
  2. a=rand(9)+1
  3. b=rand(9)+1
  4. a,b=b,a if a<b
  5. opn=rand(4)
  6. op="+-*/"[opn].chr
  7. opm=%w|+ - × ÷|[opn]
  8. result=eval("#{a}#{op}#{b}")
  9. q="#{a}#{opm}#{b}"
  10. j[10],j[11]=q,result
复制代码

欢迎大家加我

Lv1.梦旅人

梦石
0
星屑
117
在线时间
552 小时
注册时间
2012-8-18
帖子
1429
2
发表于 2013-8-28 17:43:56 | 只看该作者
1.第一行将$game_variables赋值给j 看样子作用是通过调用j[10],j[11]来减少打字= =
2.第二和第三行是将两个1~9的随机数分别赋给a和b
3.第四行是当a小于b时ab的值交换,貌似是将大数优先放在前面的意思
4.第五行是获取一个0~3的随机数,然后在第六行,用这个随机数获取+-*/这四个运算符中的随机一个的字符代码,然后再转回字符串【我去这个意义何在?】
5.第七行是用第五行的随机数获取+-×÷的随机一个……【好吧%w是换成什么我不记得了……orz】
6.第八行就是将两个数用提取的运算符进行运算,得到结果放进result里面
7.第九行就是形成运算式形状的字符串……
8.最后一行就是存进去啦= =存到了10 11号变量里面【1中提到了用j来替换$game_variables】

好吧我先回去恶补一下字符代码是什么……

评分

参与人数 1星屑 +7 收起 理由
化螺耕 + 7 认可答案,糖不多,见谅………….

查看全部评分

我要填坑!我要背单词!我要学日语!我要每天锻炼!
好吧呵呵= =
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
3
发表于 2013-8-28 18:03:32 | 只看该作者
  1. print "j=$game_variables赋值不解释"
  2. print "脚本内容a=rand(9)+1;b=rand(9)+1"
  3. print "rand是随机数函数,来看一下a与b的值"
  4. a=rand(9)+1
  5. b=rand(9)+1
  6. print "现在的a值是:#{a}"
  7. print "现在的b值是:#{b}"
  8. print "脚本内容a,b=b,a if a<b如果a比b小交换值(这里忽略了条件)"
  9. a,b=b,a
  10. print "现在的a值是:#{a}"
  11. print "现在的b值是:#{b}"
  12. print "很明显a,b=b,a的作用是交换a于b的值"
  13. print "脚本opn=rand(4)"
  14. print "脚本op='+-*/'[opn].chr"
  15. print "先来说下这个作用,随机产生加减乘除运算符"
  16. print "不管三七二十一先看效果"
  17. for i in 0..5
  18. opn=rand(4)
  19. op="+-*/"[opn].chr
  20. print "当前op返回的运算符:"+op
  21. end
  22. print "看到随机效果了吧?"
  23. print "举个例子"
  24. for i in 0..5
  25. a = "1234"[rand(4)].chr
  26. print a
  27. end
  28. print "具体见帮助self[nth]和chr"
  29. print "op='+-*/'[opn].chr和opm=%w|+ - × ÷|[opn]的意思基本相同,所以。"
  30. print "这样也可以,请在脚本编辑器中看"
  31. =begin
  32. j=$game_variables
  33. a=rand(9)+1
  34. b=rand(9)+1
  35. a,b=b,a if a<b
  36. opn=rand(4)
  37. op="+-*/"[opn].chr
  38. opm="+-*/"[opn].chr
  39. result=eval("#{a}#{op}#{b}")
  40. q="#{a}#{opm}#{b}"
  41. j[10],j[11]=q,result
  42. =end
  43. print "下一行"
  44. print "你可以去搜下eval把字符串当做程序运行并返回结果"
  45. print "剩下的就很简单了吧,代值而已"
复制代码

点评

不胜感激,你和楼上的都回答得很详细,今天没糖了,明天再给你们吧,只要没有忘记的话0.0不过其实一个剑士的糖也不多的说T_T  发表于 2013-8-28 18:56

评分

参与人数 2星屑 +103 收起 理由
化螺耕 + 3 哈哈,不好意思,版主给了你那么多,所以就.
︶ㄣ牛排ぶ + 100 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60819
在线时间
1934 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

4
发表于 2013-8-29 05:44:51 | 只看该作者
本帖最后由 orzfly 于 2013-8-29 05:46 编辑

我早就跟牛排说过不要把我随便写的答案拿出来当做标准答案,结果他无视了。
关于这个答案有些要点我觉得最好解释一下,这也扯到 Ruby 一些很基础的东西。

j=$game_variables
关于这个,实际上是为了在脚本框里写起来简略。
把 $game_variables 赋值给 j,因为这是个对象,所以 j 之后的值实际上指向的和 $game_variables 是同一个对象。

a=rand(9)+1
b=rand(9)+1
这是产生 1~9(含)的随机数,因为 rand(n) 产生的是 0~n-1 的随机数。

a,b=b,a if a<b
这个交换利用了 Ruby 的多重赋值。

opn=rand(4)
op="+-*/"[opn].chr

因为 opn 是个 0~3 的数,所以对字符串调用索引器拿到的就是那个数字位置上的字符。
为什么有个.chr,因为 XP 用的是 ruby 1.8.7。
在这个版本里字符串的索引器得到的值是他对应的字节ascii 编码(!)
所以必须调用.chr把他变回字符。

在 VA 里(ruby 1.9.1),因为 ruby 1.9 加入了编码的支持,
字符串的索引器得到的值是对应位置的字符。(!)

可以尝试一下,
在 XP 里运行 p "ABC"[0] 得到的是 65。
在 VA 里运行 p "ABC"[0] 得到的是 "A"。
在 XP 里运行 p "囧叔"[0] 得到的是 135。
在 VA 里运行 p "囧叔"[0] 得到的是 "囧"。
在 XP 里运行 p "囧".length 得到的是 3(utf-8 编码中一个字符算 3 个字节)。
在 VA 里运行 p "囧".length 得到的是 1(虽然还是 utf-8,但是 ruby 1.9 之后默认操作的是字符而不是字节了)。

实际上下一行本来我是想按照这行的写的,但是之后发现因为是全角字符。
现在想想这行应该写写%w|+ - * /|[opn],这样兼容性也更好。(无需在 ruby 1.9 之前版本里调用 .chr 了)

opm=%w|+ - × ÷|[opn]
关于 %w 是什么,这是 Ruby 抄袭 Perl 的一个语法特性……
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]
%w后面可以用[]也可以用<>也可以用||也可以用{}等等。

result=eval("#{a}#{op}#{b}")
#{}这是字符串内嵌表达式,"abc#{a}def" 实际上 就等于 "abc" + a.to_s + "def"
eval 是把字符串当做脚本运行,返回结果。

q="#{a}#{opm}#{b}"
j[10],j[11]=q,result
把 q 和 result 赋值给 10 和 11 号变量。
你没有看错 q 是个字符串,关于变量实际上能装字符串这个我就不多说了。  

点评

好详细啊0.0不过专业性词语好多…………  发表于 2013-8-29 10:40
囧叔你写这么难的东西以后骗经验会很难的啦QAQ 干嘛非要用字符代码这种东西= =  发表于 2013-8-29 09:13

评分

参与人数 1星屑 +100 收起 理由
︶ㄣ牛排ぶ + 100 认可答案

查看全部评分

我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
54
在线时间
1208 小时
注册时间
2011-1-23
帖子
910

贵宾

5
发表于 2013-8-29 07:08:46 | 只看该作者
好吧……
虽然个人感觉很好理解……
但对新手们来说可能的确有点难懂……
在准备第二期考场了,决定明天开考……
→→→牛排的小黑屋←←←
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12810
在线时间
1457 小时
注册时间
2012-7-24
帖子
1302
6
 楼主| 发表于 2013-8-29 08:48:05 | 只看该作者
︶ㄣ牛排ぶ 发表于 2013-8-29 07:08
好吧……
虽然个人感觉很好理解……
但对新手们来说可能的确有点难懂……

好吧,希望版主下次出标准答案时能打上注释啊(照顾一下我这个新人)
静候明天的考场

欢迎大家加我
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
54
在线时间
1208 小时
注册时间
2011-1-23
帖子
910

贵宾

7
发表于 2013-8-29 08:59:16 | 只看该作者
化螺耕 发表于 2013-8-29 08:48
好吧,希望版主下次出标准答案时能打上注释啊(照顾一下我这个新人)
静候明天的考场 ...

还没想好题目的说……

点评

牛排君加油,相信你可以的~~  发表于 2013-8-29 10:40
→→→牛排的小黑屋←←←
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 14:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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