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

Project1

 找回密码
 注册会员
搜索

请教一个类似于计算器功能的脚本问题

查看数: 1364 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-1-31 16:21

正文摘要:

是这样的,今天闲着无聊自己写了一个功能类似于计算器的小脚本(四则运算,支持先乘除后加减), 那么呢,使用方法如下图 变量51,53,55,57分别代入4个数,变量52,54,56分别代入3个符号。 然后,执行写好的方法, ...

回复

RaidenInfinity 发表于 2017-1-31 17:28:59
本帖最后由 RaidenInfinity 于 2017-1-31 17:54 编辑

你这脚本很多==都写成=了啊…

话说这儿有个非常邪恶的写法。
RUBY 代码复制
  1. def calculate
  2.         str = ""
  3.         (51..57).each do |i|
  4.                  str << $game_variables[i].to_s << " "
  5.         end
  6.         $game_variables[100] = eval str
  7. end

eval is evil!(eval是邪恶的!)

然后eval实在是太邪恶了,所以我就用了比较长但是比较不邪恶的方法来搞:
RUBY 代码复制
  1. def calculate
  2.     a = $game_variables
  3.     arr = [a[51],a[52],a[53],a[54],a[55],a[56],a[57]]
  4.     arr.each_index do |i|
  5.         arr[i] = arr[i].to_sym if arr[i].is_a?(String)
  6.     end   
  7.     loop do
  8.         break if !arr.any?{|i| i.is_a?(Symbol)}
  9.         dm = arr.include?(:*) || arr.include?(:/)
  10.         arr.each_index do |i|
  11.             next unless arr[i].is_a?(Symbol)
  12.             next if dm && ![:*,:/].include?(arr[i])
  13.                 arr[i-1] = arr[i-1].send(arr[i],arr[i+1])
  14.                 arr.delete_at(i + 1)
  15.                 arr.delete_at(i)
  16.                 break
  17.             end
  18.     end   
  19.     $game_variables[100] = arr[0]
  20. end

点评

今天真是学到了好东西=w=,我去研究研究~  发表于 2017-1-31 18:04
所以嘛…Ruby这语言还是挺~神奇的。  发表于 2017-1-31 18:00
然后呢数组arr里面如果是[5, :+, 6]这样的话,循环扫描到:+就会执行5.send(:+,6)然后把:+和6从数组内移除掉,这样数组arr里就剩下[11]了  发表于 2017-1-31 17:59
然后用send方法来呼叫运算方法(比如 a = 1 + 2 可以写成 a = 1.send(:+,2))  发表于 2017-1-31 17:57
下面那个用symbol的方法是比较安全(因为eval很邪恶)。基本上就是使用to_sym方法把"+"变成符号:+之类的  发表于 2017-1-31 17:56
imsy 发表于 2017-1-31 17:03:29
if $game_switches[A] = true

if $game_switches[A] == true

点评

好吧我犯了低级错误...非常感谢,问题已经解决=w=  发表于 2017-1-31 17:53

评分

参与人数 1星屑 +250 收起 理由
RaidenInfinity + 250 认可答案

查看全部评分

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

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

GMT+8, 2024-11-17 05:20

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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