2013-02-25 88 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