Project1

标题: 如何用脚本或事件做个算术判定 [打印本页]

作者: z121310    时间: 2012-8-5 17:26
标题: 如何用脚本或事件做个算术判定
我想用脚本做个类似于太阁的 学习算术技能的事件,就是师傅(太阁里的老板)出一个数,规定加减乘除符号,让你在规定时间,用规定符号,从0——9这些数字算出结果,对了有奖。如:□+□*□=6(注意先乘除后加减的顺序)
dsu_plus_rewardpost_czw
作者: chd120    时间: 2012-8-5 22:20
数字是自己定还是随机给?
作者: z121310    时间: 2012-8-5 22:36
chd120 发表于 2012-8-5 22:20
数字是自己定还是随机给?

系统指定运算符号和结果,中间的空(一般是3到4个自己填)
作者: 灯笼菜刀王    时间: 2012-8-6 10:09
这个很简单呗, _ + _ X _ = 6

直接这样设置
"显示文章:
来做道题吧, ( )+( )X( ) = 6
三个空格应该填什么数字? "
数值输入 [变量1]--3位
事件脚本
a = $game_variables[1] / 100
b = $game_variables[1] / 10
c = $game_variables[1]
if a + b * c == 6
$game_switches[1] = true
else
$game_switches[1] = false
end
条件分歧
当[开关1]打开的时候
显示文章" 你答对了"
除此之外
显示文章" 你错了"
end
作者: z121310    时间: 2012-8-6 12:20
灯笼菜刀王 发表于 2012-8-6 10:09
这个很简单呗, _ + _ X _ = 6

直接这样设置

难道随机指定数字,要用变量里的随机数?我是想随机出现不同符号与运算结果……不仅是6.
作者: 灯笼菜刀王    时间: 2012-8-6 23:45
本帖最后由 灯笼菜刀王 于 2012-8-7 10:17 编辑
z121310 发表于 2012-8-6 12:20
难道随机指定数字,要用变量里的随机数?我是想随机出现不同符号与运算结果……不仅是6. ...


那也不难~  只要用随机数case就行了,, 就是有点麻烦,以及可能会出现不能解答的情况 -v-

事件设置起来太麻烦了,直接上脚本- -...
  1. class Interpreter
  2.   def suanshu(he1 = 0,he2 = 1,vi = 1,si = 1)
  3.     $textis = rand(15)
  4.     $vi = vi
  5.     $si = si
  6.     case $textis
  7.     when 0
  8.       text = "□+□+□="
  9.     when 1
  10.       text = "□+□-□="
  11.     when 2
  12.       text = "□+□X□="
  13.     when 3
  14.       text = "□+□÷□="
  15.     when 4
  16.       text = "□-□+□="
  17.     when 5
  18.       text = "□-□-□="
  19.     when 6
  20.       text = "□-□X□="
  21.     when 7
  22.       text = "□-□÷□="
  23.     when 8
  24.       text = "□X□+□="
  25.     when 9
  26.       text = "□X□-□="
  27.     when 10
  28.       text = "□X□X□="
  29.     when 11
  30.       text = "□X□÷□="
  31.     when 12
  32.       text = "□÷□+□="
  33.     when 13
  34.       text = "□÷□-□="
  35.     when 14
  36.       text = "□÷□X□="
  37.     when 15
  38.       text = "□÷□÷□="
  39.     end
  40.     j = []
  41.     for i in he1..he2
  42.       j.push i
  43.     end
  44.     $kyri = j[rand(j.size)]
  45.     @message_waiting = true
  46.     $game_temp.message_proc = Proc.new { @message_waiting = false }
  47.     $game_temp.message_text = "在三个□里填上数字使等式成立" + "\n"
  48.     $game_temp.message_text += text + $kyri.to_s + "\n"
  49.     $game_temp.num_input_start = 2
  50.     $game_temp.num_input_variable_id = vi  
  51.     $game_temp.num_input_digits_max = 3
  52.     $game_switches[$si] = false
  53.     return
  54.     end
  55.   def suanshu1
  56.     a = $game_variables[$vi] / 100
  57.     b = $game_variables[$vi] % 100 / 10
  58.     c = $game_variables[$vi] % 10
  59.     case $textis
  60.     when 0
  61.       k = a + b + c
  62.     when 1
  63.       k = a + b - c
  64.     when 2
  65.       k = a + b * c
  66.     when 3
  67.       k = a + b / c if c != 0
  68.     when 4
  69.       k = a - b + c
  70.     when 5
  71.       k = a - b - c
  72.     when 6
  73.       k = a - b * c
  74.     when 7
  75.       k = a - b / c if c != 0
  76.     when 8
  77.       k = a * b + c
  78.     when 9
  79.       k = a * b - c
  80.     when 10
  81.       k = a * b * c
  82.     when 11
  83.       k = a * b / c if c != 0
  84.     when 12
  85.      if b != 0
  86.       k = a / b + c
  87.      end
  88.     when 13
  89.       k = a / b - c if b != 0
  90.     when 14
  91.       k = a / b * c if b != 0
  92.     when 15
  93.       k = a / b / c if b != 0 and c != 0
  94.     end
  95.     $game_switches[$si] = true if k == $kyri
  96.     $game_variables[$vi] = 0
  97. end
  98. end
复制代码
插到main前面就可以了, 要使用的时候在事件脚本输入 suanshu(答案A,答案B,输入数值用的变量ID,最后结果的开关ID)  答案A和B是两个数字, 表示等式的运算结果会在这两个数字之间的数随机抽一个. 比如,suanshu(9,18) 那等式的运算结果就可能是9...18之间的数, 使用的是1号公共变量和1号开关,

设置方法
脚本 suanshu(2,3)
公共事件(公共事件里就一句脚本"suanshu1")
条件分歧 开关X打开的时候

最后得到的结果是正确的话,会打开"公共开关[si]号" ,  默认1号,  然后可以用这个开关分歧,做奖金事件什么的就行了

至于为什么要用公共事件, 因为我发现不能写在一起 否则会直接判断原来变量的值而不是输入后的值, 只用用公共事件把判断句分开,这样才能判断输入的数值.先这样用着XD,等我找个方法在一段里可以区分再合并一起 = =..

作者: z121310    时间: 2012-8-7 09:22
灯笼菜刀王 发表于 2012-8-6 23:45
那也不难~  只要用随机数case就行了,, 就是有点麻烦,以及可能会出现不能解答的情况 -v-

事件设置起来太 ...

这个算法根本就是错的……怎么能用一个数单独除以100,除以10,除以1(不变)来算加减乘除。比如222,222/100=2.22,/10=22.2,/1=222,222+22.2+2.22=244.42≠6
作者: z121310    时间: 2012-8-7 09:59
灯笼菜刀王 发表于 2012-8-6 23:45
那也不难~  只要用随机数case就行了,, 就是有点麻烦,以及可能会出现不能解答的情况 -v-

事件设置起来太 ...

我想问是这样吧……但为什么我用了之后停不下来,一直出算式……

捕捉.jpg (64.62 KB, 下载次数: 12)

捕捉.jpg

作者: 灯笼菜刀王    时间: 2012-8-7 10:24
本帖最后由 灯笼菜刀王 于 2012-8-7 10:43 编辑
z121310 发表于 2012-8-7 09:59
我想问是这样吧……但为什么我用了之后停不下来,一直出算式……


加上return就行了- - ,

是可以获得负数..... 只要不是浮点数就行

重新编辑完成

因为玩四则运算游戏是上个世纪的事了... 我只是把所有的运算式子都列出来而已~~ 除了考虑被除数不能为0外没有其他的考虑-v-

如果觉得算式不合适,可以删掉那个判定, 让随机数少一位就可以了, 另外因为不会判定浮点数, 所以除法的话会有很囧的情况出现, 比如, 8/3 = 2 判定是true 这个自己想办法解决了,,比如可以多个判定 % == 0 的情况下.才是正确的. 或者,算数后面乘上1.0应该也可以

算数游戏N年前就不玩了 - - 做个简单的计算式就出一堆问题, 老了老了...
作者: 灯笼菜刀王    时间: 2012-8-7 10:40
上面的那个脚本我重新编辑了,直接换那个新的就行了,




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1