Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Performance 有没有更有效的方法来编写此Actionscript来计算随机事件的结果;自旋;?_Performance_Actionscript 3 - Fatal编程技术网

Performance 有没有更有效的方法来编写此Actionscript来计算随机事件的结果;自旋;?

Performance 有没有更有效的方法来编写此Actionscript来计算随机事件的结果;自旋;?,performance,actionscript-3,Performance,Actionscript 3,这是一个老虎机风格的模拟。我有5个卷轴,每个轮子上有9个可能的符号。下面是我用来计算给定支付线的支付的代码。我省略了生成随机符号的代码。这段代码只接受随机分组的结果,并确定玩家赢得了什么(如果有的话) paytable[0] = [3,5,6,8,10,15,20,50,150]; paytable[1] = [12,15,20,30,50,80,100,200,1500]; paytable[3] = [50,75,100,150,200,250,500,2000,10000]; //symb

这是一个老虎机风格的模拟。我有5个卷轴,每个轮子上有9个可能的符号。下面是我用来计算给定支付线的支付的代码。我省略了生成随机符号的代码。这段代码只接受随机分组的结果,并确定玩家赢得了什么(如果有的话)

paytable[0] = [3,5,6,8,10,15,20,50,150];
paytable[1] = [12,15,20,30,50,80,100,200,1500];
paytable[3] = [50,75,100,150,200,250,500,2000,10000];
//symbol[0..4] is assigned a value of 0..8
//the value 8 is considered wild and will match any
//other symbol except when the first 3 on a line

payout = 0;
if(!(symb[0] == 8)){
    if(symb[1] == 8 || symb[1] == symb[0]){
        if(symb[2] == 8 || symb[2] == symb[0]){
            payout = paytable[0][symb[0]];
            if(symb[3] == 8 || symb[3] == symb[0]){
                payout = paytable[1][symb[0]];
                if(symb[4] == 8 || symb[4] == symb[0]){
                    payout = paytable[2][symb[0]];}}}}
} else if(!(symb[1] == 8)){
    if(symb[2] == symb[1]){
        payout = paytable[0][symb[1]];
        if(symb[3] == 8 || symb[3] == symb[1]){
            payout = paytable[1][symb[1]];
            if(symb[4] == 8 || symb[4] == symb[1]){
                payout = paytable[2][symb[1]];}}}
} else if(!(symb[2] == 8){
    payout = paytable[0][symb[2]];
    if(symb[3] == 8 || symb[3] == symb[2]){
        payout = paytable[1][symb[2]];
        if(symb[4] == 8 || symb[4] == symb[2]){
            payout = paytable[2][symb[2]];}}
} else {
    payout = paytable[0][8];
    if(symb[3] == 8){
        payout = paytable[1][8];
        if(symb[3] == 8){
            payout = paytable[2][8];}}
}

我只是一个新手,希望确保我没有犯一些骨头算法错误。

是的,你可以使用一个带有特殊值的2D匹配数组,比如-1,表示“any”,并逐行检查该数组中的卷轴与元素,一旦找到匹配,就从同一数组中获得付款(额外元素)并授予该奖项

static var wins:Array=[]; // one win set for class. Static to signify global data
wins.push([8,8,8,8,8,10000]);
wins.push([8,8,8,8,-1,1500]);
wins.push([8,8,8,-1,-1,150]);
// etc. Make sure more difficult or more precise matches are before less precise ones
书写这种结构的另一种方式:

static var wins:Array=[ 
    [8,8,8,8,8,10000],
    [8,8,8,8,-1,1500],
    [8,8,8,-1,-1,150],
    // etc, don't forget to not type a comma at the last entry
];
利用这种结构,wins是一个二维数组,其中行的元素0-4对应于卷轴,元素5对应于win值。所以,然后依次遍历该数组,一旦找到匹配项就退出

function checkWin(reels:Array):int {
    // assuming reels to hold those 0-8 values
    for (var i:int=0;i<wins.length;i++) {
        var aWin:Array=wins[i];
        for (var j:int=0;j<5;j++) { // check reels vs aWin
            if ((aWin[j]!=reels[j]) && (aWin[j]>=0)) break; // no match
            if (j==4) return aWin[5]; // match! You win! :D
        }
    }
    return 0; // no match - no win.
}
函数checkWin(卷轴:数组):int{
//假设卷筒保持这些0-8值

对于(var i:int=0;iAt最小值)(我可能遗漏了一些组合)
获胜。长度
将为304。这需要管理大量的
推送
语句。此外,最坏的情况似乎是命中外部循环304次,而我的示例中最坏的情况是评估6条if语句。但正如我所说,我是一个初学者,所以也许你可以解释一下。304在执行时不会太大每3-4秒执行一次推送。如果您愿意,您可以按第一卷分割
wins
,并只运行
wins
的匹配部分。关于推送语句,您可以执行常量声明语法,而不是推送。检查更新的答案。是的,如果您发现有错误,编写ifs的整个数组方式都是为了维护如果是一个成功的条件,您可以在
wins
声明中添加一行,仅此而已,但是更改if语句树可能会使用如此多的分支和条件将其破坏。回答您的问题:不,代码的性能没有问题。但重命名过程确实会带来好处(例如,数字8的重要性是什么?)然后通过重构来清除重复的代码