Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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#_Var_Repeat - Fatal编程技术网

C# 战利品生成器,相同的变量

C# 战利品生成器,相同的变量,c#,var,repeat,C#,Var,Repeat,所以我制作了一个随机的战利品发生器,HP伤害和法力是不同的,但是出于某种原因,它只在两种物品类型之间循环 稀有狼牙棒,稀有狼牙棒,稀有靴子,稀有靴子,传奇狼牙棒。 即使我让它生成20个项目,它也只有两种类型 这是发电机 namespace TestingRNG { public class Items { public int ID { get; set; } public int Damage { get; set; } public int Defense { ge

所以我制作了一个随机的战利品发生器,HP伤害和法力是不同的,但是出于某种原因,它只在两种物品类型之间循环 稀有狼牙棒,稀有狼牙棒,稀有靴子,稀有靴子,传奇狼牙棒。 即使我让它生成20个项目,它也只有两种类型

这是发电机

namespace TestingRNG
{
public class Items
{

    public int ID { get; set; }
    public int Damage { get; set; }
    public int Defense { get; set; }
    public string Name { get; set; }
    public int HP { get; set; }
    public int MANA { get; set; }
    public string Rarity { get; set; }
    public int NumberOfNames { get; set; }
    public string ItemType { get; set; }
    public Random Random = new Random();
    public List<string> ItemTypeList = new List<string> {"Weapon", "Armor" };
    public List<string> WeaponList = new List<string> { "Staff", "Sword", "Dagger", "Wand", "Axe", "Mace" };
    public List<string> ArmorList = new List<string> { "Chest area armor", "Shield", "Head area armor", "Leggings", "Shoes", "Gloves", "Belt", "Ring" };
    public string WeaponType { get; set; }
    public string Value { get; set; }
    public List<string> DamageType = new List<string> { "Meele", "Magic" };
    public List<string> WeaponListMeele = new List<string> { "Staff", "Wand" };
    public List<string> WeaponListMagic = new List<string> { "Sword", "Dagger", "Axe", "Mace" };
    public List<string> ValuePoor = new List<string> { "Wooden", "Bronze" };
    public List<string> ValueCommon = new List<string> { "Bronze", "Iron" };
    public List<string> Value2 = new List<string> { "Silver", "Steel", "Iron" };
    public List<string> ValueElite = new List<string> { "Silver", "Steel", "Dragon Glass", "Adamantium", "Titanium", "Arcane" };
    public List<string> ValueLegendary = new List<string> { "Dragon Glass", "Adamantium", "Titanium", "Arcane" };
    public List<string> ArmorValuePoor = new List<string> { "Cloth", "Leather" };
    public List<string> ArmorValueCommon = new List<string> { "Cloth", "Leather", "Iron" };
    public List<string> ArmorValue2 = new List<string> { "Iron", "Silver", "Steel" };
    public List<string> ArmorValueElite = new List<string> { "Silver", "Steel", "Titanium", "Arcane", "Dragon Glass", "Titanium" };
    public List<string> ArmorValueLegendary = new List<string> { "Titanium", "Arcane", "Dragon Glass", "Adamantium" };
    public List<string> Name1 = new List<string> { "Stupid", "Great", "Powerful", "Epic", "Masterfull", "Mighty", "Bountiful", "Foreverlasting", "Pointless", "Useless" };
    public List<string> Name2 = new List<string> { "Things", "Power", "Proportions", "Torment", "Legs", "Turnament", "Shit", "Crazyness", "Awesomeness" };
    public List<string> NameLenght3List = new List<string> { "Ragnarok", "Power", "Bondage", "Noobs", "Great Weakness", "Error", "404", "Torture", "SHIT STATS(No idea since I'm not good enough to programm stats based on names)", "The Dark Lord", "Emperor", "Monkey Kong", "I ran out of words", "Blablabla" };

    public Items(int iD,int droprarity)
    {
        ID = iD;
        int dropRarity = droprarity;
        NumberOfNames = NumberOfNamesGenerator(dropRarity);
        Rarity = RarityGenerator(dropRarity);
        ItemType = ItemTypeGenerator();
        if (ItemType == "Weapon")
        {
            WeaponType = DamageType[Random.Next(0, DamageType.Count)];

            if (ItemType == "Meele")
            {
                ItemType = WeaponListMeele[Random.Next(0, WeaponListMeele.Count)];
            }
            else
            {
                ItemType = WeaponListMagic[Random.Next(0, WeaponListMagic.Count)];
            }
        }
        if (ItemType == "Armor")
        {
            ItemType = ArmorList[Random.Next(0, ArmorList.Count)];
        }
        if (WeaponList.Contains(ItemType))
        {
            Value = WeaponValueGenerator(dropRarity);
            Damage = WeaponDamage(dropRarity);
        }
        else
        {
            Value = ArmorValueGenerator(dropRarity);
            HP = ArmorHealthGen(dropRarity);
            int RandomChance = Random.Next(0, 100);
            if (RandomChance <= 75)
            {
                MANA = ArmorManaGen(dropRarity);
            }
        }
        Name = NameGenerator();


    }
    public string RarityGenerator(int dropRarity)
    {
        switch (dropRarity)
        {
            case 1:
                Rarity = "Poor";
                break;
            case 2:
                Rarity = "Common";
                break;
            case 3:
                Rarity = "Uncommon";
                break;
            case 4:
                Rarity = "Elite";
                break;
            case 5:
                Rarity = "Rare";
                break;
            case 6:
                Rarity = "Legendary";
                break;
        }

        return Rarity;
    }
    public string ItemTypeGenerator()
    {
        return string.Format("{0}", ItemTypeList[Random.Next(0, ItemTypeList.Count)]);
    }
    public int NumberOfNamesGenerator(int dropRarity)
    {
        switch (dropRarity)
        {
            case 1:
                NumberOfNames = 2;
                break;
            case 2:
                NumberOfNames = Random.Next(2, 4);
                break;
            case 3:
                NumberOfNames = Random.Next(2, 4);
                break;
            case 4:
                NumberOfNames = Random.Next(2, 5);
                break;
            case 5:
                NumberOfNames = Random.Next(2, 5);
                break;
            case 6:
                NumberOfNames = Random.Next(2, 6);
                break;
        }
        return NumberOfNames;
    }
    public string NameGenerator()
    {
        int nameNR = NumberOfNames;
        if (nameNR == 2)
        {
            return string.Format("{0} {1} {2}", Rarity, Value, ItemType);
        }
        else if (nameNR == 3)
        {
            return string.Format("{0} {1} {2} of {3}", Rarity, Value, ItemType, NameLenght3List[Random.Next(0, NameLenght3List.Count)]);
        }
        else if (nameNR == 4)
        {
            return string.Format("{0} {1} {2} of {3} {4}", Rarity, Value, ItemType, Name1[Random.Next(0, Name1.Count)], Name2[Random.Next(0, Name2.Count)]);
        }
        else if (nameNR == 5)
        {
            return string.Format("{0} {1} {2} of {3} {4} {5}", Rarity, Value, ItemType, Name1[Random.Next(0, Name1.Count)], Name1[Random.Next(0, Name1.Count)], Name2[Random.Next(0, Name2.Count)]);
        }
        else if (nameNR == 6)
        {
            return string.Format("{0} {1} {2} of {3} {4} {5} {6}", Rarity, Value, ItemType, Name1[Random.Next(0, Name1.Count)], Name1[Random.Next(0, Name1.Count)], Name1[Random.Next(0, Name1.Count)], Name2[Random.Next(0, Name2.Count)]);
        }
        else
        {
            string ErrorSword = "Error Sword/Armor/blablabla";
            return ErrorSword;
        }
    }
    public string WeaponValueGenerator(int droprarity)
    {
        switch (droprarity)
        {
            case 1:
                Value = ValuePoor[Random.Next(0, ValuePoor.Count)];
                break;
            case 2:
                Value = ValueCommon[Random.Next(0, ValueCommon.Count)];
                break;
            case 3:
                Value = Value2[Random.Next(0, Value2.Count)];
                break;
            case 4:
                Value = ValueElite[Random.Next(0, ValueElite.Count)];
                break;
            case 5:
                Value = ValueElite[Random.Next(0, ValueElite.Count)];
                break;
            case 6:
                Value = ValueLegendary[Random.Next(0, ValueLegendary.Count)];
                break;

        }
        return Value;
    }

    public string ArmorValueGenerator(int droprarity)
    {
        switch (droprarity)
        {
            case 1:
                Value = ArmorValuePoor[Random.Next(0, ArmorValuePoor.Count)];
                break;
            case 2:
                Value = ArmorValueCommon[Random.Next(0, ArmorValueCommon.Count)];
                break;
            case 3:
                Value = ArmorValue2[Random.Next(0, ArmorValue2.Count)];
                break;
            case 4:
                Value = ArmorValueElite[Random.Next(0, ArmorValueElite.Count)];
                break;
            case 5:
                Value = ArmorValueElite[Random.Next(0, ArmorValueElite.Count)];
                break;
            case 6:
                Value = ArmorValueLegendary[Random.Next(0, ArmorValueLegendary.Count)];
                break;

        }
        return Value;
    }

    public int WeaponDamage(int droprarity)
    {
        switch (droprarity)
        {
            case 1:
                Damage = Random.Next(5, 20);
                break;
            case 2:
                Damage = Random.Next(25, 45);
                break;
            case 3:
                Damage = Random.Next(50, 105);
                break;
            case 4:
                Damage = Random.Next(110, 200);
                break;
            case 5:
                Damage = Random.Next(210, 500);
                break;
            case 6:
                Damage = Random.Next(550, 1200);
                break;
        }
        return Damage;
    }

    public int ArmorHealthGen(int droprarity)
    {
        switch (droprarity)
        {
            case 1:
                HP = Random.Next(5, 20);
                break;
            case 2:
                HP = Random.Next(25, 45);
                break;
            case 3:
                HP = Random.Next(50, 105);
                break;
            case 4:
                HP = Random.Next(110, 200);
                break;
            case 5:
                HP = Random.Next(210, 500);
                break;
            case 6:
                HP = Random.Next(550, 1200);
                break;
        }
        return HP;
    }

    public int ArmorManaGen(int droprarity)
    {
        switch (droprarity)
        {
            case 1:
                MANA = Random.Next(5, 20);
                break;
            case 2:
                MANA = Random.Next(25, 45);
                break;
            case 3:
                MANA = Random.Next(50, 105);
                break;
            case 4:
                MANA = Random.Next(110, 200);
                break;
            case 5:
                MANA = Random.Next(210, 500);
                break;
            case 6:
                MANA = Random.Next(550, 1200);
                break;
        }
        return MANA;
    }
}
}
namespace TestingRNG
{
公共类项目
{
公共int ID{get;set;}
公共整数损坏{get;set;}
公共整数防御{get;set;}
公共字符串名称{get;set;}
公共int HP{get;set;}
公共整数MANA{get;set;}
公共字符串稀有性{get;set;}
public int NumberOfNames{get;set;}
公共字符串ItemType{get;set;}
公共随机=新随机();
公共列表ItemTypeList=新列表{“武器”、“装甲”};
公开列表武器列表=新列表{“棍棒”、“剑”、“匕首”、“魔杖”、“斧头”、“狼牙棒”};
公共列表装甲列表=新列表{“胸前装甲”、“盾牌”、“头部装甲”、“绑腿”、“鞋子”、“手套”、“腰带”、“戒指”};
公共字符串WeaponType{get;set;}
公共字符串值{get;set;}
公共列表损坏类型=新列表{“Meele”,“Magic”};
公开名单武器名单Meele=新名单{“工作人员”、“魔杖”};
公开列表武器列表魔法=新列表{“剑”、“匕首”、“斧头”、“狼牙棒”};
公共清单价值穷人=新清单{“木制”、“青铜”};
public List ValueCommon=新列表{“青铜”、“铁”};
公共清单价值2=新清单{“银”、“钢”、“铁”};
public List ValueElite=新列表{“银”、“钢”、“龙玻璃”、“金刚”、“钛”、“奥术”};
公共列表值Legendary=新列表{“龙玻璃”、“金刚”、“钛”、“奥术”};
公共列表ArmorValuePoor=新列表{“布料”、“皮革”};
公共列表ArmorValueCommon=新列表{“布料”、“皮革”、“铁”};
公共列表ArmorValue2=新列表{“铁”、“银”、“钢”};
公共列表ArmorValueElite=新列表{“银”、“钢”、“钛”、“奥术”、“龙玻璃”、“钛”};
公共列表ArmorValueLegendary=新列表{“钛”、“奥术”、“龙玻璃”、“金刚”};
公共列表名称1=新列表{“愚蠢”、“伟大”、“强大”、“史诗”、“精通”、“强大”、“慷慨”、“永久”、“无意义”、“无用”};
公共列表名称2=新列表{“事物”、“权力”、“比例”、“折磨”、“腿”、“转折”、“狗屎”、“疯狂”、“惊人”};
public List name lenght3list=新列表{“Ragnarok”、“Power”、“Bondage”、“Noobs”、“Great弱点”、“Error”、“404”、“酷刑”、“SHIT STATS(我不知道,因为我没有足够的能力根据名字来编程统计)”、“黑魔王”、“皇帝”、“悟空”、“我没话了”、“Blablabla”};
公共项目(int iD、int droprarity)
{
ID=ID;
int-dropRarity=dropRarity;
NumberOfNames=NumberOfNamesGenerator(dropRarity);
稀有性=稀有性发生器(dropRarity);
ItemType=ItemTypeGenerator();
如果(项目类型=“武器”)
{
WeaponType=DamageType[Random.Next(0,DamageType.Count)];
如果(ItemType==“Meele”)
{
ItemType=WeaponListMeele[Random.Next(0,WeaponListMeele.Count)];
}
其他的
{
ItemType=WeaponListMagic[Random.Next(0,WeaponListMagic.Count)];
}
}
如果(项目类型==“装甲”)
{
ItemType=ArmorList[Random.Next(0,ArmorList.Count)];
}
if(武器清单包含(项目类型))
{
值=武器值生成器(dropRarity);
伤害=武器伤害(掉落概率);
}
其他的
{
值=ArmorValueGenerator(dropRarity);
HP=ArmorHealthGen(滴度);
int RandomChance=Random.Next(01100);

if(RandomChance我相信这是因为使用了两个不同的Random实例,一个在Items类中,另一个在主程序中。为了解决这个问题,我更改了Items类,将主程序的Random作为一个参数,一切都运行得很好

Items.cs

        public string ItemType { get; set; }
        public Random Random;
        public List<string> ItemTypeList = new List<string> { "Weapon", "Armor" };
        public Items(int iD, int droprarity, Random random)
        {
            Random = random;
            ID = iD;
Program.cs

编辑: 要扩展Nikerym的评论,创建新随机项时将基于当前时间;由于您的所有项目都是在同一时间生成的,每个项目都使用新随机项,因此每次生成的数字相同


Random.Next()的使用是正确的,它只需要与上面类中使用的相同Random!

当你说它总是创建相同的项目时…你是说第一次运行它?还是每次运行它?Random并不是完全随机的。。。。(在main方法中对程序调用进行第二次调用以查看发生了什么)
public Random Random=new Random();
--您正在为紧循环中的每个
项创建一个新的
Random
对象。不要这样做!通常整个应用程序都有一个静态
Random
对象(或者每个线程至少只有一个)。--所以尝试将其更改为
publicstaticrandom=newrandom();
,看看这是否有帮助
object它根据四舍五入到秒的当前时间戳初始化并运行算法,因此如果代码在这1秒内运行并完成所有20次迭代,它每次都会创建相同的种子,请添加
Thread.Sleep(1500)
在创建新项目并运行该循环的for循环中,您应该会看到随机值开始出现。@Nikerym-与我说的不完全一样,添加thread.sleep不会有任何帮助,您只需添加一组不同的“随机值”数字和使程序变慢。有很多关于使随机变得更随机的材料,这取决于op的多少needs@sayse是的,它会使程序变慢,但它会
        public Items(int iD, int droprarity, Random random)
        {
            Random = random;
            ID = iD;
            dropRate = Random.Next(1, 6);
            Loot.Add(new Items(i, dropRate, Random));