【问题标题】:How to adjust a function's returning value with possibility (in AS3 and in C)如何调整函数的返回值(在 AS3 和 C 中)
【发布时间】:2013-08-06 08:36:47
【问题描述】:

对不起,如果我的标题不够清楚。我举个例子。我们的函数是这样的:

C:

int main()
{
for(i=0;i<10;i++)
    {
        printf("%d",func(i));
    }
}

int func(int b)
{
if(b>=0 && b<7)
   return 70;
else
   return 30;
}

当 'b' 为 'rand() % 10' 时,此函数 (b) 将以 70% 的可能性返回 70,并以 30% 的可能性返回 30。但是,必须有一个更实用的方法。如果“那种方式”存在,我在 C(也可以是 C++)和 AS3 中都需要它。感谢您的回复。


我刚刚有时间登录并查看回复。你玩过 paradox interactive 的游戏吗?喜欢欧陆风云3?在那个游戏中有很多不同的随机化算法。例如,每个都有 1/3 的可能性,你可以得到好东西,什么都没有或坏东西。我想开发一个必须具有类似随机化算法的游戏。我想要一个函数获取阈值 0 和 1 之间的输入,并返回一个预定义的结果,或者我可以使用一个简单的 switch 语句来触发该结果的值

类似这样的:

在 AS3 中:

Function randomize(poss:Number):function //here i may need to have more consequences than two. poss value can be an array instead of being a number.
{
Number a = Math.random()
If(a>poss)
Return func1;
Else
Return func2;
}

这里 func1 和 func2 是具有相同输入类型但任务不同的函数对象,我将像这样使用返回的函数:

Function onClick(evt:Event):void
{
var randFunction:Function=new Function();
randFunction = randomize(0.35);
randFunction();
}

但是,我不想在每个需要“加权可能性”的情况下都硬编码,比如这个实例。

P.S:我不想让你为我编写代码,但对如何解释 C 和 AS3 中的加权可能性有一些很好的想法。如果你不打算贡献,那么就不要回复。

【问题讨论】:

  • 如果您要求我们为您编写代码,那将不会发生。
  • 如果你想要随机行为,那么 rand 是在 C 中使用的函数。
  • 为什么在 C 和 AS3 中都需要这么奇怪的函数?你真正想达到什么目标?

标签: c actionscript-3 function random return


【解决方案1】:

尝试阅读Bernoulli distribution并实现它。

从 [0,1] 生成随机变量,如果低于 .7,则返回 x,否则返回 y

【讨论】:

    【解决方案2】:

    我认为人们不理解您的问题(公平地说,您是啰嗦又不清楚),但答案很简单。将 Math.random 存储在一个值中。

    var random = Math.random();
    
    if (random > 0.33)
       trace("good")
    else if (random > 0.66)
       trace ("nothing")
    else trace ("bad")
    

    我认为任何形式的随机化都不会比这更复杂。

    【讨论】:

    • 他的问题似乎没有任何问题。但是,我想他想要的是这个。
    【解决方案3】:

    ActionScript 3 版本如下所示:

    function example():int
    {
        if(Math.random() >= 0.7) return 70;
        return 30;
    }
    
    trace(example()); // Either 30 or 70.
    

    【讨论】:

    • 是的,这行得通,但我希望至少有两个不同的结果。不止两个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    相关资源
    最近更新 更多