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

Project1

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

[通用发布] 分享几种系统没预留的计算方法(以及队伍平均等级脚本)

[复制链接]

Lv1.梦旅人

矿工

梦石
0
星屑
134
在线时间
898 小时
注册时间
2012-10-5
帖子
1535
跳转到指定楼层
1
发表于 2013-11-22 22:05:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 876加几 于 2013-11-23 16:45 编辑

脚本:
RUBY 代码复制
  1. class Numeric
  2.   def sqr # 平方
  3.     return self ** 2
  4.   end
  5.   def cube # 立方
  6.     return self ** 3
  7.   end
  8.   def powten # 10 的 self 次方
  9.     return 10 ** self
  10.   end
  11.   def sqrt # 开平方
  12.     if self.abs != self
  13.       raise ArgumentError.new("NaN")
  14.     end
  15.     num = self ** 0.5
  16.     return num.truncate == num ? num.truncate : num
  17.   end
  18.   def cuberoot # 开立方
  19.     if self.abs != self
  20.       num = (self * (-1)) ** (1 / 3.0)
  21.       return num.truncate == num ? -num.truncate : -num
  22.     end
  23.     num = self ** (1 / 3.0)
  24.     return num.truncate == num ? num.truncate : num
  25.   end
  26.   def root(y) # 开任意次方
  27.     if self.abs != self and y % 2 == 0
  28.       raise ArgumentError.new("NaN")
  29.     end
  30.     if self.abs != self
  31.       num = (self * (-1)) ** (1.0 / y)
  32.       return num.truncate == num ? -num.truncate : -num
  33.     end
  34.     num = self ** (1.0 / y)
  35.     return num.truncate == num ? num.truncate : num
  36.   end
  37. end
  38. class Array
  39.   def average(need_dec = true) # 平均数 (是否使用浮点数)
  40.     if self.include?(nil)
  41.       ary = self.compact
  42.     else
  43.       ary = self
  44.     end
  45.     num = 0
  46.     if ary.size == 0
  47.       raise ZeroDivisionError.new("divided by 0")
  48.     end
  49.     for i in 0...ary.size
  50.       if ary[i].is_a?(Numeric)
  51.         num += ary[i]
  52.       else
  53.         raise TypeError.new("connot convert #{ary[i].class} into Numeric")
  54.       end
  55.     end
  56.     num /= ary.size.to_f
  57.     unless need_dec
  58.       return num.truncate
  59.     end
  60.     return num.truncate == num ? num.truncate : num
  61.   end
  62. end
演示:
RUBY 代码复制
  1. p 8.sqr                              >= 64
  2. p 2.cube                             >= 8
  3. p 9.sqrt                             >= 3
  4. p 125.cuberoot                       >= 5
  5. p 65536.root(16)                     >= 2
  6. p 3.powten                           >= 1000
  7. p [3, 8, 1].average                  >= 4
  8. p -8.sqr                             >= 64
  9. p -2.cube                            >= -8
  10. p -3.powten                          >= 0.001
  11. p -125.cuberoot                      >= -5
  12. p -512.root(9)                       >= -2
  13. p [1, 0, 1].average                  >= 0.666666666666666666...
  14. p [8, 32, 1].average(false)          >= 13
  15. p [4, nil, 2].average                >= 3
  16. p [[20, 10, 0].average, 80].average  >= 45
  17. p -9.sqrt                            >= ArgumentError
  18. p -65536.root(16)                    >= ArgumentError
  19. p [].average                         >= ZeroDivisionError
  20. p 8.root                             >= ArgumentError
  21. p [32, "5"].average                  >= TypeError
17行以后是错误的方法,其它的全是正确的。
根据这个方法,我们还可以求出队伍中角色平均等级:
RUBY 代码复制
  1. class Game_Party
  2.   #--------------------------------------------------------------------------
  3.   # ● 获取平均等级
  4.   #--------------------------------------------------------------------------
  5.   def average_level
  6.     # 同伴人数为 0 的情况下 (避免除以零的错误)
  7.     if @actors.size == 0
  8.       return 0
  9.     end
  10.     level = 0
  11.     actor_level = []
  12.     for i in 0...@actors.size
  13.       actor_level[i] = @actors[i].level
  14.     end
  15.     return actor_level.average(false)
  16.   end
  17. end

评分

参与人数 1星屑 +100 梦石 +1 收起 理由
怪蜀黍 + 100 + 1 奖励条例

查看全部评分

呃,发糖贴好冷清呀!

Lv1.梦旅人

◇无限的妄想者◇

梦石
0
星屑
55
在线时间
1441 小时
注册时间
2012-7-14
帖子
2339
2
发表于 2013-11-22 22:34:47 | 只看该作者
Q1:负数可以开3次方以及任何奇数次方,不考虑添加?
Q2:过大数字、负数开方是否考虑结果包含e、i?
Q3:不考虑计算方差、相关度等更多统计计算方法?

点评

感觉方差和相关度的计算方法应该用处不小~  发表于 2013-11-22 22:47
赞同Q1。至于Q2、Q3,LZ还不到10岁,还没有学虚数、方差等。  发表于 2013-11-22 22:39

评分

参与人数 1星屑 +20 收起 理由
怪蜀黍 + 20 讨论鼓励。

查看全部评分


————————————————————————————————————
新坑Dreamoon酝酿中,预计短篇⑨完工发布。
————————————————————————————————————
如何调戏橙光文字的 高级UI 系列教程:  鉴赏页制作篇背包系统制作篇
回复 支持 反对

使用道具 举报

Lv1.梦旅人

矿工

梦石
0
星屑
134
在线时间
898 小时
注册时间
2012-10-5
帖子
1535
3
 楼主| 发表于 2013-11-22 22:47:37 | 只看该作者
本帖最后由 876加几 于 2013-11-23 08:05 编辑
幻想中的鸡蛋 发表于 2013-11-22 22:34
Q1:负数可以开3次方以及任何奇数次方,不考虑添加?
Q2:过大数字、负数开方是否考虑结果包含e、i?
Q3: ...


A1:已修正
A2:不会出现这样的情况
A3:目前我没研究这两种运算情况

点评

用sprintf的%e格式可以转为合适的科学计数格式:sprintf("%e", 3.0) #=>"3.000000e+00"  发表于 2013-11-23 10:25
先to_s,再用size测量字符串长度再减1,然后scan,接着挑选出非0的几位,然后点小数点写“e”,不过to不了i  发表于 2013-11-22 22:59
关于A2:计算结果的上限是多少= =?万一有人想算个10^100怎么办……(算了,正常情况不会有拿RM当计算器的= =)  发表于 2013-11-22 22:55
呃,发糖贴好冷清呀!
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

八宝粥的基叔

梦石
0
星屑
4684
在线时间
5240 小时
注册时间
2009-4-29
帖子
14318

贵宾

4
发表于 2013-11-22 22:57:39 | 只看该作者
876加几 发表于 2013-11-22 22:47
A1:无法修正,因为如果修正后就会出现FloatDomainError
A2:不会出现这样的情况
A3:目前我没研究这两种 ...

你用计算器试试-27开3次方看看会不会出错。(-3)*(-3)*(-3) = -27,所以你懂的。
Q1可以修正的,多思考一下吧。

点评

Q1修正完毕  发表于 2013-11-23 08:03
《逝去的回忆3:四叶草之梦》真情发布,欢迎点击图片下载试玩喵。

《逝去的回忆3》的讨论群:
一群:192885514
二群:200460747
回复 支持 反对

使用道具 举报

Lv1.梦旅人

路人党员

梦石
0
星屑
52
在线时间
2276 小时
注册时间
2010-12-30
帖子
3225
5
发表于 2013-11-23 12:58:22 | 只看该作者
i ** 0.5 (root)==

点评

Fundamental Theorem of Algebra  发表于 2013-11-24 02:06
(1+i)除以根号2  发表于 2013-11-23 17:01
²√i  发表于 2013-11-23 13:28
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

6
发表于 2013-11-23 18:56:46 | 只看该作者
非常实用的系统!但是如果我还想要sin、cos、tan、sec、csc、cot等等的计算(3D游戏不用三角函数会做死吗···)呢?还有就是pai这个3.1415926·······的玩意要怎么解决呢?

点评

Math模块就足够了吧  发表于 2013-11-23 19:10
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
416 小时
注册时间
2012-11-30
帖子
162
7
发表于 2013-11-23 19:12:23 | 只看该作者
能把 cos、sin弄出来吗????
x = a + r cos θ
  y = b + r sin θ
不需要解释了吧

点评

cos、sin在模块Math中已被定义了  发表于 2013-11-23 21:38
太逆天了,才几岁喵~数学都学到圆的的参数方程了?  发表于 2013-11-23 20:46

<object width="630" height="500" align="middle" id="reader" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" classid="clsid:d27cdb6e-ae6d-11cf-96b8-44455354000
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 09:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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