查看: 3534|回复: 6

[RMXP发布] 游戏起名器【小周实践系列第一季第三弹】

[复制链接]

○赛

梦石
0
星屑
1254
在线时间
1276 小时
注册时间
2013-1-22
回帖
2078

贵宾

发表于 2014-5-25 12:24:04 | 显示全部楼层 |阅读模式

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

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

×
【小周实践系列第一季第三弹】
游戏起名器的制作方法。

这次教大家如何制作一个最简单的游戏起名器。
首先介绍一个方法
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.变量不仅是一个数字,还可以是一个字符,一个数组等。

放俩截图~

0.1.png 0.2.png

点评

↓是啊…………没想到………………  发表于 2014-5-25 14:02
突然想起来,有个叫做%w的好东西  发表于 2014-5-25 13:59
= =|| 个人感觉这略“鸡肋”啊~  发表于 2014-5-25 13:06

评分

参与人数 1星屑 0 梦石 +1 收起 理由
怪蜀黍 0 + 1 我很赞同+全局变量不赞同

查看全部评分

老黄鸡

梦石
4
星屑
45692
在线时间
7947 小时
注册时间
2009-7-6
回帖
13335

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2014-5-25 13:14:40 | 显示全部楼层

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

[pre lang="ruby" line="1"]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[/pre]

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

用法
[pre lang="ruby" line="1"]$game_variables[1] = ZhengQi.get_weapon_name[/pre]
1.png

点评

无示范性。  发表于 2014-5-25 13:22
我以前写过一个就是用模块,果然这次用全局变量误导了 - -  发表于 2014-5-25 13:21
不过我还是喜欢collect{...}.join,能少打很多重复代码  发表于 2014-5-25 13:20

评分

参与人数 2星屑 +160 收起 理由
怪蜀黍 + 150 参与讨论奖励+module ZhengQi(Tai)
taroxd + 10 我很赞同

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-5-25 13:43:19 | 显示全部楼层
本帖最后由 taroxd 于 2014-5-25 13:59 编辑

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

[pre lang="ruby" line="1"]
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
[/pre]

评分

参与人数 1星屑 +150 收起 理由
怪蜀黍 + 150 补充奖励

查看全部评分

回复

使用道具 举报

bluer
公主殿下

梦石
0
星屑
283
在线时间
533 小时
注册时间
2013-10-19
回帖
2017
发表于 2014-5-25 12:42:17 | 显示全部楼层
事实上。。。能用来干什么!

点评

起名……  发表于 2014-5-25 12:43
回复

使用道具 举报

梦石
0
星屑
9292
在线时间
2504 小时
注册时间
2011-5-20
回帖
14521

开拓者

发表于 2014-5-25 12:45:40 | 显示全部楼层
如果数组太大···岂不是要逆天···不能用txt导入吗?

点评

好主意 !  发表于 2014-5-25 12:52
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复

使用道具 举报

梦石
0
星屑
487
在线时间
908 小时
注册时间
2009-10-12
回帖
1702
发表于 2014-5-25 12:55:55 | 显示全部楼层
起名无能的表示:

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

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-5-25 13:02:17 | 显示全部楼层
本帖最后由 taroxd 于 2014-5-25 13:07 编辑

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

我一定会这么写

[pre lang="ruby" line="1"]
# class...
NAME_LIST = [
  ["疾风","烈焰","狂雷","飞天","旋风"],
  ["升龙","裂空","惊涛","三连","圣灵"],
  ["斩","击","拳","刺","爪"]
]
def make_name
  NAME_LIST.collect(&:sample).join
end[/pre]

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

另外,标题建议改为“通用发布”

点评

没有sample但是我一直都是自己定义了sample  发表于 2014-5-25 22:27
RMXP里面没用collect!5555 忽然想起来以前在书上见过collect,不过忘了怎么用 ------------  发表于 2014-5-25 13:26
反正都是我代码强迫症的错  发表于 2014-5-25 13:25
咳咳,collect这个方法默认脚本一直在用的吧……数组最常用方法之一啊。 悄悄的说一声,平时为了省字数我一般会用map  发表于 2014-5-25 13:24
........还是ruby书看的太少,都不知道有collect这个方法  发表于 2014-5-25 13:23

评分

参与人数 1星屑 +175 收起 理由
怪蜀黍 + 175 参与讨论奖励+为了省字数map点赞.

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部