Project1

标题: 游戏起名器【小周实践系列第一季第三弹】 [打印本页]

作者: 天地有正气    时间: 2014-5-25 12:24
标题: 游戏起名器【小周实践系列第一季第三弹】
【小周实践系列第一季第三弹】
游戏起名器的制作方法。

这次教大家如何制作一个最简单的游戏起名器。
首先介绍一个方法
rand(n)
它的功能是取随机数。
rand(5)有可能是0、1、2、3、4,注意不包括5。

然后可以开始制作了。
以最简单的技能名为例。
假设一个五个字的技能“烈焰升龙斩”。它是由三部分组成。
第一部分:烈焰
第二部分:升龙
第三部分:斩

思路就是把这三个部分的词汇都放到数组里,然后使用rand来配对。

首先是三个数组。
$one = ["疾风","烈焰","狂雷","飞天","旋风"]
$two = ["升龙,"裂空","惊涛","三连","圣灵"]
$three = ["斩","击","拳","刺","爪"]

然后,运用rand方法取出三个部分,为了方便就写在事件解释器里了。
class Interpreter
  def make_name
    one = $one[rand(5)]
    two = $two[rand(5)]
    three = $three[rand(5)]
    name = one + two + three
  end
end

接下来,为了方便输出,把最终的名字保存在变量里。
$game_variables[1] = name

于是最终的脚本是:
  1. $one = ["疾风","烈焰","狂雷","飞天","旋风"]
  2. $two = ["升龙","裂空","惊涛","三连","圣灵"]
  3. $three = ["斩","击","拳","刺","爪"]
  4. class Interpreter
  5.   def make_name
  6.     one = $one[rand(5)]
  7.     two = $two[rand(5)]
  8.     three = $three[rand(5)]
  9.     name = one + two + three
  10.     $game_variables[1] = name
  11.   end
  12. end
复制代码
使用时,先用事件脚本执行make_name,然后显示文章里面用\v[1]就可以了。

P.S.变量不仅是一个数字,还可以是一个字符,一个数组等。

放俩截图~



作者: 蓝儿    时间: 2014-5-25 12:42
事实上。。。能用来干什么!
作者: chd114    时间: 2014-5-25 12:45
如果数组太大···岂不是要逆天···不能用txt导入吗?
作者: 日月星辰    时间: 2014-5-25 12:55
起名无能的表示:

我就是连“疾风”“烈焰”这种都起不出来啊!= =

作者: taroxd    时间: 2014-5-25 13:02
本帖最后由 taroxd 于 2014-5-25 13:07 编辑

为啥用全局变量不用常量
为啥不用Array#sample方法(不知道Ruby1.8.2有这个方法没有)

我一定会这么写

RUBY 代码复制
  1. # class...
  2. NAME_LIST = [
  3.   ["疾风","烈焰","狂雷","飞天","旋风"],
  4.   ["升龙","裂空","惊涛","三连","圣灵"],
  5.   ["斩","击","拳","刺","爪"]
  6. ]
  7. def make_name
  8.   NAME_LIST.collect(&:sample).join
  9. end


就是ruby版本是个问题啊……支持Symbol#to_proc好像就得1.9

另外,标题建议改为“通用发布”
作者: fux2    时间: 2014-5-25 13:14

这种东西就不要用全局变量了,全局污染什么的……而且没有管理你自己的命名,像$one$two这种名字
很多脚本都在用的,到时候冲突发生用户还不知道怎么回事。
另外最好不要在方法里就指定给一个变量赋值,这样这个方法局限性太大。
用返回值好了。
给你示范一下,就用正气君作为命名空间。

RUBY 代码复制
  1. module ZhengQi
  2.   NAME_PART1 = ["疾风","烈焰","狂雷","飞天","旋风"]
  3.   NAME_PART2 = ["升龙","裂空","惊涛","三连","圣灵"]
  4.   NAME_PART3 = ["斩","击","拳","刺","爪"]
  5.  
  6.   def self.get_weapon_name
  7.     ret = NAME_PART1[rand(NAME_PART1.size)]
  8.     ret += NAME_PART2[rand(NAME_PART2.size)]
  9.     ret += NAME_PART3[rand(NAME_PART3.size)]
  10.     return ret
  11.   end
  12. end


以上是送给正气君的命名空间

用法
RUBY 代码复制
  1. $game_variables[1] = ZhengQi.get_weapon_name


作者: taroxd    时间: 2014-5-25 13:43
本帖最后由 taroxd 于 2014-5-25 13:59 编辑

补充上那些1.8没有的方法的简化版~

RUBY 代码复制
  1. class Symbol
  2.   # Ruby1.9 之后自带这个定义,并且比这个更加完善,支持带参数的调用
  3.   def to_proc
  4.     Proc.new {|obj| obj.send(self) }
  5.   end
  6. end
  7.  
  8. class Array
  9.   # 随机取出一个元素。默认脚本中的sample(n)可以随机取出n个元素
  10.   def sample
  11.     slice rand size
  12.   end
  13. end
  14.  
  15. module ZhengQi
  16.  
  17.   NAME_LIST = [
  18.     %w[疾风 烈焰 狂雷 飞天 旋风],
  19.     %w[升龙 裂空 惊涛 三连 圣灵],
  20.     %w[斩 击 拳 刺 爪]
  21.   ]
  22.  
  23.   # 将之后定义的方法设为private,并复制成一个模块方法
  24.   # 这方法1.8有没有呢………………
  25.   module_function
  26.  
  27.   def make_name
  28.     NAME_LIST.collect(&:sample).join
  29.   end
  30.  
  31. end
  32.  
  33. # 这样一来,事件脚本里就可以省略“ZhengQi.”了
  34. # 参考Ruby的Math模块
  35. class Game_Interpreter
  36.   include ZhengQi
  37. end





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