c#中的随机事件系统.怎么做
本文关键字:事件系统 随机 | 更新日期: 2023-09-27 18:16:23
我只是一个编程世界的初学者,因此我有一个简单的问题。是否有可能随机执行函数?如果有,你会怎么做?这只是基于我在另一个论坛上读到的一个帖子的好奇心。基本上,讨论是关于如何为游戏生成随机事件,他们评论了某些语言(特别是AS3)中使用的"hack"。这个窍门就是把函数当作变量来对待。例子:
//Make an array of the functions
public function makeEarthquake():void{}
public function causePlague():void{}
public function spaceZombieAttack():void{}
//select at random
var selection:uint = Math.random() * eventArrray.length;
//Call it
eventArray[selection]();
我希望这是清楚的。我会很高兴与任何答案,可以解释如何随机调用方法。谢谢你。
编辑:谢谢你们,所有的答案都很有帮助!这当然有可能。一个直接的方法是拥有一个委托列表或数组:
在c#中看起来是这样的:(在一个基本的控制台应用程序中)
class Program
{
// Create the functions:
static void Beep()
{
Console.Beep();
}
static void SayHello()
{
Console.WriteLine("Hello!");
}
// Create the function delegate:
private delegate void RandomFunction();
static void Main(string[] args)
{
// Create a list of these delegates:
List<RandomFunction> functions = new List<RandomFunction>();
// Add the functions to the list:
functions.Add(Beep);
functions.Add(SayHello);
// Make our randomizer:
Random rand = new Random();
// Call one:
functions[rand.Next(0, 2)](); // Random number either 0 or 1
// This is just here to stop the program
// from closing straight away should it say "Hello"
Console.ReadKey();
}
}
让这些函数具有不同数量的参数需要更多的努力,但是
您可以有一个List<Action>
并从中随机选择。
class Program
{
static void Main(string[] args)
{
List<Action> actions = new List<Action>();
actions.Add(() => Program.MakeEarthquake());
actions.Add(() => Program.CausePlague());
actions.Add(() => Program.SpaceZombieAttack());
Random random = new Random();
int selectedAction = random.Next(0, actions.Count());
actions[selectedAction].Invoke();
}
static void MakeEarthquake()
{
Console.WriteLine("Earthquake");
}
static void CausePlague()
{
Console.WriteLine("Plague");
}
static void SpaceZombieAttack()
{
Console.WriteLine("Zombie attack");
}
}
你可以创建一个动作列表,然后在列表中随机选择一个项目,就像下面的代码
List<Action> actions = new List<Action>();
actions.Add(() => makeEarthquake());
actions.Add(() => causePlague());
actions.Add(() => spaceZombieAttack());
var random=new Random();
int rndNumber = random.Next(actions.Count);
actions[rndNumber].Invoke();
你为什么不像往常一样随机选择一个数字,然后在一个公共函数中使用这个数字,这个函数反过来调用基于你得到的函数?
public void DoRandomThing()
{
switch(new Random().Next(1,4))
{
case 1:
makeEarthquake();
break;
case 2:
causePlague();
break;
case 3:
spaceZombieAttack();
break;
}
}