首页 / C# / C#-计算随机动作以执行可能性
C#-计算随机动作以执行可能性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#-计算随机动作以执行可能性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2045字,纯文字阅读大概需要3分钟。
内容图文
我有一个可能采取的行动的枚举
internal enum Action
{
Stay,
MoveLeft,
MoveRight
}
和一个对象,其中包含有关此操作当前机会的信息
internal class ActionWithPossibility
{
public Action Action { get; }
public int ActionChancePercent { get; }
public ActionWithPossibility(Action action, int actionChancePercent)
{
Action = action;
ActionChancePercent = actionChancePercent;
}
}
机会从0变为100.
List<ActionWithPossibility> actionsWithPossibilities = new List<ActionWithPossibility>() {
new ActionWithPossibility(Action.Stay, 40),
new ActionWithPossibility(Action.MoveLeft, 30),
new ActionWithPossibility(Action.MoveRight, 30)
};
要么
List<ActionWithPossibility> actionsWithPossibilities = new List<ActionWithPossibility>() {
new ActionWithPossibility(Action.Stay, 30),
new ActionWithPossibility(Action.MoveLeft, 10),
new ActionWithPossibility(Action.MoveRight, 60)
};
要么
List<ActionWithPossibility> actionsWithPossibilities = new List<ActionWithPossibility>() {
new ActionWithPossibility(Action.Stay, 30),
new ActionWithPossibility(Action.MoveLeft, 60),
new ActionWithPossibility(Action.MoveRight, 10)
};
有两件重要的事情:
>可能性之和为100.
>可以执行更多或更少的操作.因此动作的数量是未知的.
通过此方法调用随机动作时
public void NextAction(List<ActionWithPossibility> actionsWithPossibilities)
{
int randomNumber = random.Next(0, 100);
// ...
Action targetAction = null; // ?
}
有没有一种方法来计算操作(不使用ifs)?我考虑过这种设置:
>行动A 30
>动作B 10
>动作C 60
我可以总结一下当前行动的前身,并得到这个结果
>动作A 0-30
>动作B 30-40
>动作C休息
但是我不知道如何通过代码来计算动作.一些帮助会很棒.
这可能是重复的
但是正如我之前提到的,可能采取的行动数量是未知的,所以我不能选择三个if语句.也许有一些技巧可以使用一些数学运算来完全避免if语句.
解决方法:
int threshold = 0;
int randomNumber = random.Next(0, 100);
for (var i = 0; i < actionsWithPossibilities.Count; i++)
{
var item = actionsWithPossibilities[i];
threshold += item.ActionChancePercent;
if (randomNumber <= threshold)
{
//first action that's under the defined threshold is placed in result
result = item.Action;
break;
}
}
内容总结
以上是互联网集市为您收集整理的C#-计算随机动作以执行可能性全部内容,希望文章能够帮你解决C#-计算随机动作以执行可能性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。