查看: 2236|回复: 3

[已经过期] 随机数写法

[复制链接]
梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
发表于 2022-10-31 14:51:18 | 显示全部楼层 |阅读模式

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

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

×
# 排除随机数的写法
设置变量为5个随机数,想实现随机数随着变量的出现逐渐变少,
比如0出现过了,就不会再出现了,以此类推,等所有情况都出
现过1次之后,就又开始循环,每次循环出来的数值都是随机的

  a = rand(5)
  case a
  when 0
    p "一号"
  when 1
    p "二号"
  when 2
    p "三号"
  when 3
    p "四号"
  when 4
    p "五号"
  end       
梦石
0
星屑
42235
在线时间
6017 小时
注册时间
2006-11-10
回帖
6966
发表于 2022-10-31 15:22:29 | 显示全部楼层
本帖最后由 灯笼菜刀王 于 2022-10-31 15:35 编辑

if @f.nil? or @f.empty?
  @f = [1,2,3,4,5]
  @f.size.times {|k| a,b=rand(@f.size),@f[k];
     @f[k] = @f[a];@f[a]=b}
end
p @f.shift
回复

使用道具 举报

梦石
0
星屑
3850
在线时间
1899 小时
注册时间
2010-6-19
回帖
917
 楼主| 发表于 2022-11-5 13:31:23 | 显示全部楼层
灯笼菜刀王 发表于 2022-10-31 15:22
if @f.nil? or @f.empty?
  @f = [1,2,3,4,5]
  @f.size.times {|k| a,b=rand(@f.size),@f[k];

出现重复的情况了,是我写错了吗~

[pre lang="ruby"]    # 当变量不等于无或者空的情况  
    if @f.nil? or @f.empty?
      # 定义数组
      @f = [0,1,2,3,4,5]
      #
      @f.size.times {|k| a,b=rand(@f.size),@f[k];
      @f[k] = @f[a];@f[a]=b}
    end
    p @f.shift
   
      case  @f.shift
      when 0
        update_message("1","系统")
      when 1
        update_message("2", "系统")
      when 2
        update_message("3","系统")                                   
      when 3
        update_message("4","提示")      
      when 4
        update_message("5","提示")
      when 5
        update_message("6", "提示")      
      end
[/pre]
回复

使用道具 举报

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
回帖
205
发表于 2022-11-5 17:44:35 | 显示全部楼层
本帖最后由 RPGzh500223 于 2022-11-5 17:51 编辑

帖子的文字说明……我是一点都没看懂,还是看代码吧

2楼的代码 => Array#shuffle!(rmxp的ruby版本没有)
获取非重复值的话,必须保证数据的初始值是唯一的,如@f = [0, 0, 1, 1]就不行
多重赋值是同时进行的, 数组是可以这么写的,如:[pre lang="ruby"]@f[a], @f = @f, @f[a][/pre]

Array#shift => 删除数组的首单元并返回它。剩余单元依次提前。若数组为空返回 nil。(F1原文)
假设 @f = [0, 5, 3, 1, 2, 4]
p @f.shift        # 0
case @f.shift    # 5

case 表达式
[when 表达式 [, 表达式] ... [then]
  表达式 ..]..
[else
  表达式 ..]
end                  (F1原文)

[pre lang="ruby"]# 条件:@f未声明或已初始化为数组
    if @f.nil? || @f.empty?
      @f = [0, 1, 2, 3, 4, 5]
      n = @f.size
      n.times do |k|
        a = rand(n)
        @f[a], @f[k] = @f[k], @f[a]
      end
    end
    if (n = @f.shift) != nil
      case n
      when 0, 1, 2 then update_message(n, "系统")
      when 3, 4, 5 then update_message(n, "提示")
      end
      # 或者 update_message(n, n < 3 ? "系统" : "提示")
    end[/pre]

这和随机数有什么关系
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部