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
于是最终的脚本是:$one = ["疾风","烈焰","狂雷","飞天","旋风"]
$two = ["升龙","裂空","惊涛","三连","圣灵"]
$three = ["斩","击","拳","刺","爪"]
class Interpreter
def make_name
one = $one[rand(5)]
two = $two[rand(5)]
three = $three[rand(5)]
name = one + two + three
$game_variables[1] = name
end
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有这个方法没有)
我一定会这么写
# class...
NAME_LIST = [
[ "疾风" ,"烈焰" ,"狂雷" ,"飞天" ,"旋风" ] ,
[ "升龙" ,"裂空" ,"惊涛" ,"三连" ,"圣灵" ] ,
[ "斩" ,"击" ,"拳" ,"刺" ,"爪" ]
]
def make_name
NAME_LIST.collect ( &:sample) .join
end
# class...
NAME_LIST = [
[ "疾风" ,"烈焰" ,"狂雷" ,"飞天" ,"旋风" ] ,
[ "升龙" ,"裂空" ,"惊涛" ,"三连" ,"圣灵" ] ,
[ "斩" ,"击" ,"拳" ,"刺" ,"爪" ]
]
def make_name
NAME_LIST.collect ( &:sample) .join
end
就是ruby版本是个问题啊……支持Symbol#to_proc好像就得1.9
另外,标题建议改为“通用发布”
作者: fux2 时间: 2014-5-25 13:14
这种东西就不要用全局变量了,全局污染什么的……而且没有管理你自己的命名,像$one$two这种名字
很多脚本都在用的,到时候冲突发生用户还不知道怎么回事。
另外最好不要在方法里就指定给一个变量赋值,这样这个方法局限性太大。
用返回值好了。
给你示范一下,就用正气君作为命名空间。
module ZhengQi
NAME_PART1 = [ "疾风" ,"烈焰" ,"狂雷" ,"飞天" ,"旋风" ]
NAME_PART2 = [ "升龙" ,"裂空" ,"惊涛" ,"三连" ,"圣灵" ]
NAME_PART3 = [ "斩" ,"击" ,"拳" ,"刺" ,"爪" ]
def self .get_weapon_name
ret = NAME_PART1[ rand ( NAME_PART1.size ) ]
ret += NAME_PART2[ rand ( NAME_PART2.size ) ]
ret += NAME_PART3[ rand ( NAME_PART3.size ) ]
return ret
end
end
module ZhengQi
NAME_PART1 = [ "疾风" ,"烈焰" ,"狂雷" ,"飞天" ,"旋风" ]
NAME_PART2 = [ "升龙" ,"裂空" ,"惊涛" ,"三连" ,"圣灵" ]
NAME_PART3 = [ "斩" ,"击" ,"拳" ,"刺" ,"爪" ]
def self .get_weapon_name
ret = NAME_PART1[ rand ( NAME_PART1.size ) ]
ret += NAME_PART2[ rand ( NAME_PART2.size ) ]
ret += NAME_PART3[ rand ( NAME_PART3.size ) ]
return ret
end
end
以上是送给正气君的命名空间
用法
$game_variables [ 1 ] = ZhengQi.get_weapon_name
$game_variables [ 1 ] = ZhengQi.get_weapon_name
作者: taroxd 时间: 2014-5-25 13:43
本帖最后由 taroxd 于 2014-5-25 13:59 编辑
补充上那些1.8没有的方法的简化版~
class Symbol
# Ruby1.9 之后自带这个定义,并且比这个更加完善,支持带参数的调用
def to_proc
Proc .new { |obj| obj.send ( self ) }
end
end
class Array
# 随机取出一个元素。默认脚本中的sample(n)可以随机取出n个元素
def sample
slice rand size
end
end
module ZhengQi
NAME_LIST = [
%w[ 疾风 烈焰 狂雷 飞天 旋风] ,
%w[ 升龙 裂空 惊涛 三连 圣灵] ,
%w[ 斩 击 拳 刺 爪]
]
# 将之后定义的方法设为private,并复制成一个模块方法
# 这方法1.8有没有呢………………
module_function
def make_name
NAME_LIST.collect ( &:sample) .join
end
end
# 这样一来,事件脚本里就可以省略“ZhengQi.”了
# 参考Ruby的Math模块
class Game_Interpreter
include ZhengQi
end
class Symbol
# Ruby1.9 之后自带这个定义,并且比这个更加完善,支持带参数的调用
def to_proc
Proc .new { |obj| obj.send ( self ) }
end
end
class Array
# 随机取出一个元素。默认脚本中的sample(n)可以随机取出n个元素
def sample
slice rand size
end
end
module ZhengQi
NAME_LIST = [
%w[ 疾风 烈焰 狂雷 飞天 旋风] ,
%w[ 升龙 裂空 惊涛 三连 圣灵] ,
%w[ 斩 击 拳 刺 爪]
]
# 将之后定义的方法设为private,并复制成一个模块方法
# 这方法1.8有没有呢………………
module_function
def make_name
NAME_LIST.collect ( &:sample) .join
end
end
# 这样一来,事件脚本里就可以省略“ZhengQi.”了
# 参考Ruby的Math模块
class Game_Interpreter
include ZhengQi
end
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1