Performance 有没有更有效的方法来编写此Actionscript来计算随机事件的结果;自旋;?
这是一个老虎机风格的模拟。我有5个卷轴,每个轮子上有9个可能的符号。下面是我用来计算给定支付线的支付的代码。我省略了生成随机符号的代码。这段代码只接受随机分组的结果,并确定玩家赢得了什么(如果有的话)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
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的重要性是什么?)然后通过重构来清除重复的代码