Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用随机种子生成对象_C#_Unity3d - Fatal编程技术网

C# 使用随机种子生成对象

C# 使用随机种子生成对象,c#,unity3d,C#,Unity3d,所以我正在做一个2D手机游戏,你向目标投掷长矛,目标在屏幕外生成,在一组固定的轨道上从右到左浮动,有点像集市上的射击亭。我想知道是否可以/建议使用radom seed gerenator来设置目标的速度和繁殖位置,而不是手动构建每个波浪和水平。这样我就可以测试它们,并保存效果良好的种子。使每一个波浪都有一种更随机的感觉,而不是完全随机,造成混乱。我对这个很陌生,我似乎找不到任何相关的文档。有什么想法吗? 另外,我不确定我当前的目标产卵器脚本是否与此相关,如果相关,请让我知道,我会将其编辑到本文中

所以我正在做一个2D手机游戏,你向目标投掷长矛,目标在屏幕外生成,在一组固定的轨道上从右到左浮动,有点像集市上的射击亭。我想知道是否可以/建议使用radom seed gerenator来设置目标的速度和繁殖位置,而不是手动构建每个波浪和水平。这样我就可以测试它们,并保存效果良好的种子。使每一个波浪都有一种更随机的感觉,而不是完全随机,造成混乱。我对这个很陌生,我似乎找不到任何相关的文档。有什么想法吗?
另外,我不确定我当前的目标产卵器脚本是否与此相关,如果相关,请让我知道,我会将其编辑到本文中。提前谢谢

这听起来更像是一个一般的游戏设计/游戏开发问题,而不是一个具体的技术问题

从技术角度来看:使用随机值生成标高非常简单,比手工设计标高/波浪更快

从游戏开发的角度来看:生成随机关卡,然后保存你喜欢的关卡,可能会比手工创建波动/关卡更慢、更难管理。这可能不会很好地解决的关键原因是,随着玩家技能的提高,你会想调整关卡的难度。这意味着您需要在创建随机生成的标高/波浪后,根据某些标准对其进行排序

从游戏设计的角度来看:让随机值完全生成你的关卡,即使你管理它们,这可能是个坏主意。增加游戏难度是成功游戏参与循环的绝对核心部分。如果游戏变得太难太快,玩家将停止游戏。如果太容易太久,玩家将停止游戏。如果它停滞不前,或者从难到易再到难,没有明显的逻辑,那么玩家将停止比赛。你想通过手工设计关卡,或者;设计并完善生成关卡的算法

也就是说,如果你想要某种程度的不可预测性,随机值应该是你游戏的一部分。但是你需要管理随机性的影响,以确保它不会破坏游戏性。例如,一个简单的关卡可能有以1到10之间的随机速度移动的敌人。硬关卡可以让敌人以30到60之间的随机速度移动。换句话说,用受约束的随机性建立你的等级。使用约束来缩放难度

这只是我的两分钱。

只要以相同的顺序和相同的步骤使用实现,就可以使用带有种子参数的System.Random反复获得相同的值

var seed = 42;
var random = new System.Random(seed);
出现的一个问题是,如果更改源,将无法获得相同的值。如果你在某个阶段为你的水平找到了一个不错的种子,那么当你添加了新的内容,比如说一种新的尖峰时,这可能会完全不同

因此,我建议您在构建关卡时使用种子,然后保存关卡生成的结果。如果在以后的版本中添加新内容,您以前的级别将保持不变。但是,如果在运行时使用seed随机生成级别,则可能会得到不同的结果

using System;
using System.Text;

public class Program
{
    public static readonly int SEED = 42;

    public static void Main()
    {
        Console.WriteLine("Using {1,2,3,4,5}");

        int[] items = new int[] {1,2,3,4,5};

        for(var i = 0 ; i < 10 ; i++)
        {
            RandomFromSeed(items);
        }

        Console.WriteLine("Using {1,2,3,4}");

        items = new int[] {1,2,3,4};

        for(var i = 0 ; i < 10 ; i++)
        {
            RandomFromSeed(items);
        }
    }

    public static void RandomFromSeed(int[] items)
    {
        Random random = new Random(SEED);
        StringBuilder sb = new StringBuilder();

        for(var i = 0 ; i < 10 ; i++)
        {
            sb.Append(items[random.Next(0, items.Length)]);
        }

        Console.WriteLine(sb.ToString());
    }
}

是的,很好的一点,我仍然会研究这是否是正确的方法。是的,这个想法是通过提高速度或改变产卵位置来逐渐增加难度。但我还是会仔细考虑的。谢谢,我很感激。啊,我会看看我是否能用这个来实现它。非常感谢。
Using {1,2,3,4,5}
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
4113124314
Using {1,2,3,4}
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314
3113123314