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

Project1

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

[已经过期] 编程上的问题

[复制链接]

Lv4.逐梦者 (版主)

梦石
1
星屑
5816
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

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

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

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

x
本帖最后由 鑫晴 于 2014-5-31 09:15 编辑

我想用RM设计一个抽签排位的简易程序,弄了半天,最后....你懂的



不知道哪位大触可以提供下思路...


我原本以为自己会用哈希表和数组,然后...



头像被屏蔽

Lv2.观梦者 (禁止发言)

梦石
0
星屑
653
在线时间
3774 小时
注册时间
2011-2-26
帖子
1839

开拓者

2
发表于 2014-5-31 09:12:33 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
1
星屑
5816
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

3
 楼主| 发表于 2014-5-31 09:56:14 | 只看该作者
本帖最后由 鑫晴 于 2014-5-31 11:02 编辑

class Array
  def my_shuffle
     (size-1).downto(0).each{|i|   
           u = rand(i)
           t = self
           self = self
           self = t
     }
     self
  end
end

"子丑寅卯辰巳午未申酉戌亥".split(//).my_shuffle

唔..自己解析一下


size返回数组的长度。若数组为空,返回 0。
downto(min) {|n| ... } 自 self 迭代至 min,依次迭减 1。若 self < min,则什么都不做。

each {|item| .... } 依次使用各个元素来对区块进行计算。返回 self。

self[nth]=val 将数组的第 nth 个元素之值改为 val。若 nth 超出数组范围,则数组会自动延伸。所延伸的部分初始化为 nil。返回 val。
split split方法的最基本用法分裂一个由单独字符或字符的静态序列组成的字符串。
如果split的第一个变量是一个字符串,那么这个字符串中字符就会被当作一个字符串分隔符使用。但是在逗号分隔的数据中,逗号用来分隔数据,这里的每个字符串成分都被用来分隔数据。


打开一个Array
    在里面追加一个my_shuffle方法
      (数组总长-1)后迭代减去1,并依次记录给{i}这个数组
           生成I范围内的某个数并赋值给U
           将数组U内的第U个改成T
           数组U与数组I同步
           将数组I内的第I个赋值给T
   以上循环
       获取数组
         将"子丑寅卯辰巳午未申酉戌亥"这句话
单个字符分割并返回给my_shuffle


点评

可是我还是不知道如何在RM里面调用・_・  发表于 2014-5-31 11:00
对,显然空字符串匹配空正则表达式,因此原来的字符串被分割为单个字符  发表于 2014-5-31 10:56
如果模式是一个正则表达式,str划分模式匹配。每当模式匹配一个长度为零的字符串,str分为单个字符。  发表于 2014-5-31 10:53
另外,Array类不是新定义类,而是打开类,向里面追加方法  发表于 2014-5-31 10:53
If pattern is a Regexp, str is divided where the pattern matches. Whenever the pattern matches a zero-length string, str is split into individual characters.  发表于 2014-5-31 10:51
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

4
发表于 2014-5-31 10:51:08 | 只看该作者
RUBY 代码复制
  1. %w[子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥].shuffle.each_slice(3).to_a
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

5
发表于 2014-5-31 11:07:31 | 只看该作者
本帖最后由 taroxd 于 2014-5-31 11:17 编辑
鑫晴 发表于 2014-5-31 09:56


(仅限VA)
删除main脚本
改为以下脚本
RUBY 代码复制
  1. %w[子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥].shuffle.each_slice(3, &:display)
  2. rgss_stop

测试 -> 显示主控制台
测试游戏

点评

谢谢~  发表于 2014-5-31 11:15
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
1
星屑
5816
在线时间
2649 小时
注册时间
2013-8-23
帖子
2315

开拓者

6
 楼主| 发表于 2014-5-31 11:45:02 | 只看该作者
本帖最后由 鑫晴 于 2014-5-31 12:11 编辑
%w[子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥].shuffle.each_slice(3) {|group| p group }
rgss_stop

自己继续来解析一下...


%w!STRING! : 字符串数组(以空白字符切分各元素)。若在数组表达式中使用%表示法的话,相当于使用空白字符将数组中以单引号括起来的字符。

shuffle:打乱元素顺序, 随机变化( 洗牌)串元素分隔开来

Enumerable#each_slice(n) {...} 依次将n个元素传给块来进行迭代操作。

{|group| p group }   块(Block) 实际上就是匿名函数(或c语言中的函数指针),主要用于迭代。

rgss_stop (RGSS3)
スクリプトの実行を停止し、画面の更新だけを繰り返します。スクリプト入門で使用するために定義されています。
以下と等価です








回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

7
发表于 2014-5-31 11:47:55 | 只看该作者
本帖最后由 taroxd 于 2014-5-31 11:54 编辑
鑫晴 发表于 2014-5-31 11:45
自己继续来解析一下...


%w!STRING! : 字符串数组(以空白字符切分各元素)


首先,each_slice和each并不相同。方法名给我看清啊……

然后,如果看不懂 {|group| p group } 的话,我就不给你解释了……自己去翻Ruby教程中有关块(block)的部分

再接着,我上面编辑过一点代码。&:display 这个东西看不懂的话就不用知道了,先学好其他东西吧。

最后,建议楼主学得更加深入一点之后再来提问。这个时候,学习比提问重要得多

点评

OK~  发表于 2014-5-31 11:59
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-12 13:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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