Project1

标题: 编程上的问题 [打印本页]

作者: 鑫晴    时间: 2014-5-31 09:00
标题: 编程上的问题
本帖最后由 鑫晴 于 2014-5-31 09:15 编辑

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



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


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




作者: 晴兰    时间: 2014-5-31 09:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 鑫晴    时间: 2014-5-31 09:56
本帖最后由 鑫晴 于 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



作者: taroxd    时间: 2014-5-31 10:51
RUBY 代码复制
  1. %w[子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥].shuffle.each_slice(3).to_a

作者: taroxd    时间: 2014-5-31 11:07
本帖最后由 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:45
本帖最后由 鑫晴 于 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)
スクリプトの実行を停止し、画面の更新だけを繰り返します。スクリプト入門で使用するために定義されています。
以下と等価です









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


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


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

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

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

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




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