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

Project1

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

[已经过期] 随机数写法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3606
在线时间
1891 小时
注册时间
2010-6-19
帖子
1211
跳转到指定楼层
1
发表于 2022-10-31 14:51:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

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

  a = rand(5)
  case a
  when 0
    p "一号"
  when 1
    p "二号"
  when 2
    p "三号"
  when 3
    p "四号"
  when 4
    p "五号"
  end       

Lv5.捕梦者

梦石
0
星屑
39016
在线时间
5717 小时
注册时间
2006-11-10
帖子
6619
2
发表于 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
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3606
在线时间
1891 小时
注册时间
2010-6-19
帖子
1211
3
 楼主| 发表于 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];

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

RUBY 代码复制
  1. # 当变量不等于无或者空的情况  
  2.     if @f.nil? or @f.empty?
  3.       # 定义数组
  4.       @f = [0,1,2,3,4,5]
  5.       #
  6.       @f.size.times {|k| a,b=rand(@f.size),@f[k];
  7.       @f[k] = @f[a];@f[a]=b}
  8.     end
  9.     p @f.shift
  10.  
  11.       case  @f.shift
  12.       when 0
  13.         update_message("1","系统")
  14.       when 1
  15.         update_message("2", "系统")
  16.       when 2
  17.         update_message("3","系统")                                   
  18.       when 3
  19.         update_message("4","提示")      
  20.       when 4
  21.         update_message("5","提示")
  22.       when 5
  23.         update_message("6", "提示")      
  24.       end

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6483
在线时间
119 小时
注册时间
2020-1-8
帖子
234
4
发表于 2022-11-5 17:44:35 | 只看该作者
本帖最后由 RPGzh500223 于 2022-11-5 17:51 编辑

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

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


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原文)

RUBY 代码复制
  1. # 条件:@f未声明或已初始化为数组
  2.     if @f.nil? || @f.empty?
  3.       @f = [0, 1, 2, 3, 4, 5]
  4.       n = @f.size
  5.       n.times do |k|
  6.         a = rand(n)
  7.         @f[a], @f[k] = @f[k], @f[a]
  8.       end
  9.     end
  10.     if (n = @f.shift) != nil
  11.       case n
  12.       when 0, 1, 2 then update_message(n, "系统")
  13.       when 3, 4, 5 then update_message(n, "提示")
  14.       end
  15.       # 或者 update_message(n, n < 3 ? "系统" : "提示")
  16.     end


这和随机数有什么关系
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 00:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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