我将举例说明我要完成的事情。
使用twine2(我从那里开始),可以通过直接引用其他变量来编程设置和操作变量(我将为不熟悉twine的任何人解释一下语法)。
初始化并设置我的变量
// data map is equivalent to dict
$Inv = (dm: potion, 0, bomb, 0, gold, 0);
// array
$PossibleRewards =(a: potion, bomb, gold);
// string
$Reward "";
然后
set $Reward to (shuffled... $PossibleReward's 1st);
set $Inv's $Reward to it +1;
因此,它要做的只是简单地洗刷可能的奖赏数组,选择第一个条目,然后将奖赏字符串设置为所选的内容,然后自动将Inv数据映射适当的条目增加一个。
当然,您可以跳过字符串而只是
set $Inv's (shuffled... $PossibleReward's 1st to ot +1
我知道这是可以做到的,但是需要一些语法方面的帮助,任何输入都值得赞赏
答案 0 :(得分:0)
这是一篇有关用C#:Best way to randomize an array with .NET改组数组的文章。答案中有几个选项。
假设您有一个Dictionary<string, int>
用于库存(已经填充了所有可能的奖励),则只需将其分配为inventory[possibleRewards[0]] += 1
或inventory[possibleRewards[0]]++
但是,我不会每次都对数组进行洗牌。我会生成一个随机数,然后使用它来选择数组中的索引,例如
var rand = new Random(); // do this once, e.g. in startup
// initialize possibleRewards array
// in your reward method
var index = rand.Next(numberOfRewards);
inventory[possibleRewards[index]] += 1;
如果Twine2是到目前为止您唯一的编程知识,我建议您花点时间投入入门C#教程。
答案 1 :(得分:0)
如果PossibleRewards
只是Dictionary.Keys
值的重复,那么您可能不需要它。您可以使用Random
类,使用字典的ElementAt
方法(返回KeyValuePair
)来在字典中获取随机项,将Reward
设置为{{1 }},然后可以在字典中增加该元素的Value
:
Value
否则,如果需要该列表(例如,如果Random rnd = new Random(); // Note: you typically only need one instance of Random in a class
// Create a dictionary of rewards and quantity
Dictionary<string, int> inventory = new Dictionary<string, int>
{{"potion", 0}, {"bomb", 0}, {"gold", 0}};
// Grab the Key of a random item in the dictionary for the reward
string reward = inventory.ElementAt(rnd.Next(inventory.Count)).Key;
// Increment the value at that Key
inventory[reward]++;
是不同类的实例之间的共享列表),则可以基于该列表初始化单个清单字典。最简单的方法是使用Rewards
扩展方法ToDictionary
:
System.Linq