Actionscript 中的单词随机化

Word randomization in Actionscript

在 Actionscript 中,我试图找到一种生成字符串和字符串变量的方法,这些字符串和字符串变量每次出现时都会输出不同的文本。纯粹形象化:

var text:String "Red||Blue"; //Whenever the variable is called, it's either Red or Blue

textoutput("You spot a grey||black cat."); //A function equivalent of the same issue

我可以生成一个函数来实现这种效果,但据我所知,变量似乎不能是函数。

我考虑过数组变量,但我不知道如何在调用变量时使用数组吐出单个条目,而且我不知道如何使这个字符串工作'一个变量 -- 假设我可以摆脱适用于两种情况的单一系统。

编辑

为了扩展蝙蝠侠回答中表达的问题,将他的结果用于变量会产生 'sticks' 随机选择的结果。示例:

var shoes:String = grabRandomItem("Red shoes||Crimson shoes");

trace("You have " + shoes + ".") //Whichever result is chosen it stays that way.

此外,我可能想将此变量更改为完全非随机的其他变量:

var secondshoes:String = "Blue shoes";

function newshoes():
{
     shoes = secondshoes;
}

您需要从可能值列表中随机选择一个值。您可以动态引用它而不是调用变量...

function random(low:Number=0, high:Number=1):Number {
    /* Returns a random number between the low and high values given. */
    return Math.floor(Math.random() * (1+high-low)) + low;
}

var options:Array = ["red", "blue", "grey", "black"];
trace("You spot a " + options[random(0, options.length-1)] + " cat.")

//You spot a black cat.

或者,您可以使用函数代替变量来删除内联逻辑...

function catColor():String { return options[random(0, options.length-1)]; }
trace("You found a " + catColor() + " key.")

// You found a red key.

或者将其概括为带参数的泛型函数。

var options:Object = {
    "cat":["grey", "black"],
    "key":["gold", "silver"],
    "door":["blue", "red", "green"]
}

function get(item:String):String {
    return options[item][random(0, options[item].length-1)];
}

trace("You found a " + get("door") + " door.")

// You found a green door.

有很多方法可以做到这一点,但为了与您喜欢的方式保持一致,这里是实现此目的的最简单方法:

//populate your string: (remove the word private if using timeline code)
private var text_:String = "Red||Blue||Green||Yellow";

//create a getter to use a function like a property
function get text():String {
    //create an array by splitting the text on instances of ||
    var arr:Array = text_.split("||");
    //return a random element of the array you just made
    return arr[Math.floor(Math.random() * arr.length)];
}

trace(text);

更好的是,创建一个通用函数来解析您的字符串:

function grabRandomItem(str:String):String {
    var arr:Array = str.split("||");
    return arr[Math.floor(Math.random() * arr.length)];
}

//make a getter variable that regenerates everytime it's called.
function get label():String {
    return "You spot a " + grabRandomItem("grey||black||blue||red||purple") + " cat";
}

trace(label); //anytime you access the label var, it will re-generate the randomized string

trace(label);
trace(label);
trace(label);
//  ^^ should have different results

当然,我认为这种方式只有在文本来自用户输入时才最有效。如果您将文本硬编码到应用程序中,您不妨直接在数组中创建它,如 所示,因为这样涉及的开销较少。