我如何在随机间隔的统一中使真变成假

  • 本文关键字:随机 c#
  • 更新时间 :
  • 英文 :


我试图让某些东西统一移动并以随机间隔改变方向。

我的想法是为每个移动(2D)向右,向左,向上,向下创建公共布尔值, 并使机器以随机时间间隔选择其中一个为真,而其他为假。

请注意,您正在寻找的内容和目标似乎并不一致,但实现此类价值本身就很有趣。

首先,你绝对不能将true更改为任何东西(类似于将数字1更改为42) - 有些语言/运行时在编译时(#define true 0)或运行时(不太兼容的Fortran或在Python中破解暂禁值)可以做到这一点,但这通常不是一个好主意,在C#中也是不可能的。

由于我们无法更改文字值,因此有 3 个选项可以实现该功能 - 字段、属性和单独的类,可以直接或通过捕获的变量实现。由于字段本身不能有逻辑,因此不能改变自己的值 - 它需要一些代码来操作它们,使字段本质上等同于属性的"成为假"代码。

因此,我们的目标是拥有一个在随机间隔后更改值的属性:

var currentValue = this.MyValueProperty; 

现在我们需要一个"随机"间隔(为简单起见,代码使用众所周知的随机数,对于您的代码查找 Unity3d Random)和某种"当前时间",以查看值是否需要从 true 切换到 false(反之亦然)。

bool myValueField = true; // stores current value
int timeToChange = 0;
public bool MyValueProperty =>
{
int currentTime = GetCurrentOrGameTime(); // pick your time here
if (timeToChange < currentTime) 
{
// time to flip the value and update next time to change
myValueField = !myValueField;
// random value here in the range you like GetRandom(10,100)
int randomInterval = 4; // code uses well known random number
timeToChange = currentTime + randomInterval;
}
return myValueField;
}

笔记:

  • 通过选择用于生成随机值的范围,您可以控制方向更改的频率。上面的示例显然会简单地每 4 个单位时间翻转一次值。
  • 小心你选择的"时间"——如果你的游戏有某种时间管理(暂停/减慢),你绝对应该使用"游戏时间"来检查何时翻转值,否则所有值将在足够长的暂停后立即翻转。对于"游戏时间"与墙时间大致相同的基本游戏,您可以只使用"当前时间"。

最新更新