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

Project1

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

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

[复制链接]

Lv3.寻梦者

○赛

梦石
0
星屑
1249
在线时间
1276 小时
注册时间
2013-1-22
帖子
2246

贵宾

跳转到指定楼层
1
发表于 2014-5-25 12:24:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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

这次教大家如何制作一个最简单的游戏起名器。
首先介绍一个方法
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 14:02
突然想起来,有个叫做%w的好东西  发表于 2014-5-25 13:59
= =|| 个人感觉这略“鸡肋”啊~  发表于 2014-5-25 13:06

评分

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

查看全部评分

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42339
在线时间
7598 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

来自 6楼
发表于 2014-5-25 13:14:40 | 只看该作者

这种东西就不要用全局变量了,全局污染什么的……而且没有管理你自己的命名,像$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

点评

无示范性。  发表于 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
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

来自 7楼
发表于 2014-5-25 13:43:19 | 只看该作者
本帖最后由 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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

bluer
公主殿下

梦石
0
星屑
283
在线时间
533 小时
注册时间
2013-10-19
帖子
2067
2
发表于 2014-5-25 12:42:17 | 只看该作者
事实上。。。能用来干什么!

点评

起名……  发表于 2014-5-25 12:43
回复 支持 反对

使用道具 举报

Lv4.逐梦者

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

开拓者

3
发表于 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
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
329
在线时间
890 小时
注册时间
2009-10-12
帖子
1829
4
发表于 2014-5-25 12:55:55 | 只看该作者
起名无能的表示:

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

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

5
发表于 2014-5-25 13:02:17 | 只看该作者
本帖最后由 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

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

点评

没有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点赞.

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 02:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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