Random 需要只提供浮点而不提供整数的rand_范围解决方案-GDScript

Random 需要只提供浮点而不提供整数的rand_范围解决方案-GDScript,random,integer,gdscript,Random,Integer,Gdscript,对于一个项目,我需要使用随机数生成器来提供随机数,作为Fisher-Yates洗牌的一部分。我正在使用randomize()和randi()%1+50方法来获取随机数 但是,这样做并不会让我的Fisher-Yates shuffler倒计时到n=0,因为如果它倒计时,就会抛出一个错误: 运算符% 指向%所在的我的生成器范围。我可以通过使用rand\u range()来解决这个问题,但是,由于rand\u range()返回一个浮点而不是整数,因此我不得不对结果进行四舍五入,这有时会导致重复的数字

对于一个项目,我需要使用随机数生成器来提供随机数,作为Fisher-Yates洗牌的一部分。我正在使用
randomize()
randi()%1+50
方法来获取随机数

但是,这样做并不会让我的Fisher-Yates shuffler倒计时到
n=0
,因为如果它倒计时,就会抛出一个错误:

运算符%

指向%所在的我的生成器范围。我可以通过使用
rand\u range()
来解决这个问题,但是,由于
rand\u range()
返回一个浮点而不是整数,因此我不得不对结果进行四舍五入,这有时会导致重复的数字,这是我无法得到的

出于同样的原因,
ceil()
floor()
也是不可能的。当然,如果
GDScript
包含类似于
randi_range()
的内容,这一切都可以解决,但我在其他论坛上看到,自2014年以来,这一直是一个问题,至今还没有解决方案

Q:鉴于这不是一个选项,是否有人知道如何返回一个范围内的随机数,该随机数不包括0,并且是一个不需要%运算符指示范围的正整数

别误会我的意思,我喜欢戈多引擎,也很欣赏它,但有时候代码需要太多的“角力”才能让我的心智正常

任何帮助都将不胜感激。 提前感谢…

Godot有一个实现randi_range()的类

下面是一个FisherYates洗牌,向我自己证明它应该有效:

extends Node2D
var deck = []

func init_deck():
    var arr = []
    for i in range(1,52):
        arr.append(i)
    return arr

# Called when the node enters the scene tree for the first time.
func _ready():
    deck = init_deck()
    var n = len(deck) 
    print(fy_shuffle(deck, n))
    pass # Replace with function body.

#Fisher Yates Shuffle
func fy_shuffle (arr, n): 
    # Start from the last element and swap one by one. 
    var rng = RandomNumberGenerator.new()

    for i in range(n-1,0,-1): 
    # Pick a random index from 0 to i 
        var j = rng.randi_range(0,i+1) 
        # Swap arr[i] with the element at random index
        var t1 = arr[i]
        var t2 = arr[j] 
        arr[i] = t2
        arr[j] = t1

    return arr 

这将在你的范围内选择一个随机数,然后将其转换为一个整数

好吧,我会被诅咒的。正是我所需要的。只是出于好奇,你知道这是什么时候添加到Godot的吗?看起来像啊。所以它一直在那里。。。不过,感谢您指出,要找到戈多问题的答案已经够难了,特别是关于3.1的问题。我想,还没有成为像unity或unreal这样的“大玩家”的一个缺点是,从外表上看,你是一个早期采用者。我看了他们的核心教程,发现有一些UI错误最近被修复了,但我的Godot版本已经有2个月了。我花了很长时间试图找出我做错了。我感觉它正在获得动力,尽管它仍然只是商业替代品的一小部分。它有潜力。。。要是人们知道就好了。我想大多数人在看到“免费”和“开源”这两个词时都会想到“小骰子”,尽管有很多相反的例子。不过,我必须承认,即使是我一开始也被50mb的下载量吓了一跳。哦,好吧,由于最近几家AAA游戏发行商表现出相当大的无能,我相信独立开发者的发展空间会越来越大,为此,他们需要一个好的、直接的引擎。希望届时它将得到它理应得到的广大社区的支持。
randomize()

int(rand_range())