2013-02-25 91 views
0

这是我在这里的第一篇文章。提前感谢您花时间阅读我的问题。游戏模拟器超时

我是新手编码器。我有一个十年前的计算机科学未成年人。我有一个冲动去做一些简单的编码,并且有机会出现,所以我做到了!

在开发游戏时,我想运行一个程序来确定给定参数给定结果的机会。我兴奋地达到了这个目标,但Google脚本无法处理运行6000万个可能的场景,以计算胜率。

我得到了“错误:超出了最大执行时间”。

我只是想找到我和运行这个程序之间的最短路径。想法:

1)有没有办法消除最大的执行时间,让它只需要一整天?有其他方法可以让它在Google脚本中运行吗? 2)也许我可以通过输入随机数来运行更少的试验。有没有办法在Google脚本中生成随机数字? 3)我应该在Google脚本之外做些什么吗?如果是这样,是否有免费的/负担得起的Mac编译器我应该看看?我试着将它导入Xcode,但我很困惑,似乎无法获得一个简单的编译地点。另外,将其导入“C”会产生一些兼容性问题;尽管我可能只需将它吸起来并在这里重新制作它。

仅供参考,这里有一个选择的时机出来的功能:

function dieFeeder(winCount, fSkill, fMagnitude, fHeart, fDie1, fDie2, fDie3, fDie4, fDie5, cSkill, cMagnitude, cHeart, cDie1, cDie2, cDie3, cDie4, cDie5){ 
// a parent function to function questionMatrix, feeds the changing dice into it 

var matrixWinner; 

//This 'for' clause keeps going until all dice permutations have been tried out 

for (var i=0; i<60466176; i++){ 
//This part changes the dice to go through all combiations in a way similar to counting in base 6 

if (cDie5 == 7){ 
    cDie5 = 1; 
    cDie4 = cDie4+1; 
} 

if (cDie4 == 7){ 
    cDie4 = 1; 
    cDie3 = cDie3 +1; 
} 

if (cDie3 == 7){ 
    cDie3 = 1; 
    cDie2 = cDie2 +1; 
} 

if (cDie2 == 7){ 
    cDie2 = 1; 
    cDie1 = cDie1 +1; 
} 

if (cDie1 == 7){ 
    cDie1 = 1; 
    fDie5 = fDie5 +1; 
} 

if (fDie5 == 7){ 
    fDie5 = 1; 
    fDie4 = fDie4 +1; 
} 

if (fDie4 == 7){ 
    fDie4 = 1; 
    fDie3 = fDie3 +1; 
} 

if (fDie3 == 7){ 
    fDie3 = 1; 
    fDie2 = fDie2 +1; 
}  

if (fDie2 == 7){ 
    fDie2 = 1; 
    fDie1 = fDie1 +1; 
} 

cDie5 = cDie5 + 1; 

//This part checks to see who wins and increases the winCount if it was the Favorite 

matrixWinner = questionMatrix(fSkill, fMagnitude, fHeart, fDie1, fDie2, fDie3, fDie4, fDie5, cSkill, cMagnitude, cHeart, cDie1, cDie2, cDie3, cDie4, cDie5); 

if (matrixWinner == 'favorite'){ 

    winCount = winCount +1; 

} 

} 

    return winCount; 

} 

回答

0
  1. 没有办法解除最长执行时间。限制在那里,以便其他用户(如我)可以有时间运行我们的脚本!解决这个问题的办法是把你的问题分解成许多子问题。

    • 一种解决方案是在您的运行时间低于某个阈值(例如3分钟)(即跟踪您的脚本已运行多久)时继续执行脚本。然后保存与脚本有关的所有状态(变量等)。将这些保存到ScriptDb。然后让脚本在5分钟的触发器上运行。当您的脚本再次运行时,它会从ScriptDb中读取值,并从中断的位置继续。
  2. 如果您要查找随机数,请使用Math.random()。 Google Apps脚本是基于JavaScript构建的,因此可以使用基本的JavaScript功能。

  3. 关于我对#2的回答,您所展示的完全是javascript,因此您可以将代码复制到某个网页上运行。 (For testing, you can use jsfiddle)。 还需要定义if (cDie5 == 7){

+0

谢谢你帮我找的jsfiddle!你是我的英雄!这完全奏效。自从我编写代码已经很长时间了,我已经忘记了当你运行时的令人振奋的感觉,并且它实际上做了你想做的事情。我真的很喜欢在我的公寓里跳来跳去。 – Quizoid 2013-02-28 01:34:16