2011-05-29 29 views
4

我想在純Javascript中構建一個遊戲作爲練習。爲什麼比賽時間縮短一半而不是2秒?

遊戲的目的是在計時器用完之前回答一個隨機的數學練習。時間代表了一個落在某人頭上的蛋;如果你正確地回答了所有數學題,你會重新開始,但時間會縮短2秒。

我的問題:在遊戲的第一階段,時間按預期工作,但到第二階段時間縮短一半。是什麼導致了這種情況發生?

相關代碼:

var gameTime; 
//function responsible for starting The game 
function StartGame() { 
    ... 
    ... 
    ... 
    checkLevel(); 
    getNewTime();   
    speed=getNewSpeed(); 
    dh=setInterval("move(egg)",gameTime); 
    ...    
}//End start game 

function checkLevel() { 

    if(document.getElementById("begginer").checked==true) { 
     fillNumbervalue(true); 
     gameTime=30;     
     } 
    else {   
     fillNumbervalue(false); 
      gameTime=60;  
    } //End else 
}//End of checkLevel 

function getNewSpeed() {  
    return (distanceBetweenEggToYudale/gameTime); //distanceBetweenEggToYudale=310 
}//End function 

//if player pass level this function will get down by 2 seconds the time 
function getNewTime() { 
    for(var i=0;i<levelCount;i++) 
       gameTime-=2; 
}//end getNewTime 

//function responsible for moving The Egg 
function move(eggBall) {  
    eggBall.imagePositionY=eggBall.imagePositionY+(gameTime/1000)*speed; 
//image postion=0 at the beginning 
    eggBall.element.style.top=eggBall.imagePositionY+"px";  
    ... 
    ...  
}//End move 

//when the player push the answer button 
function answerValidation() { 
     var answers=new Array();   
      for(var i=0;i<result.length;i++) 
       answers[i]=document.getElementById("txtAnswer"+(i+1)).value;   

       if(result[0]!=answers[0] || result[1]!=answers[1] || result[2]!=answers[2])     
        gameOverScreen();      
       else 
       { 
        score++; 
        levelCount++;     
        init(); //Initial the egg position onload of the body element 
        clearTxtRows();     
        gameTime-=2; 

        StartGame();  
       }//End else 


    }//End anwser validation 

我知道這個問題加載代碼,所以我會很感激,如果有人可以提供幫助。

+0

你的努力很好。請處理你的打字和語法。有一個清晰而簡潔的問題,包括寫一個精心編寫的*個人編輯*問題。這有助於他人看到你是認真的。 :) – 2011-05-29 18:34:34

+5

此外,標籤它的家庭作業的榮譽。 :D – 2011-05-29 18:36:17

回答

5

問題是,您正在重新使用gameTime變量,當你想要做的是在同一時間開始和減少。所以你想要一個startGameTime變量。

由於只有一個gameTime變量:

http://jsfiddle.net/DPTJ3/1/

隨着startGameTime變量遞減之前重新啓動gameTime值:

http://jsfiddle.net/DPTJ3/

function getNewTime() { 
    gameTime = startGameTime; 
    for (var i = 0; i < levelCount; i++) { 
     gameTime -= 2; 
    } 
} 

function logData() { 
    log = document.getElementById('log'); 
    log.innerHTML += "LEVEL: " + levelCount + "\nGTIME: " + gameTime + "\n\n"; 
} 

var levelCount = 1; 
var startGameTime = 60; 
var gameTime = 60; 

logData(); 

for (var i = 0; i < 10; i++) { 
    levelCount++; 
    getNewTime(); 
    logData(); 
} 

OUTPUT

LEVEL: 1 
GTIME: 60 

LEVEL: 2 
GTIME: 56 

LEVEL: 3 
GTIME: 54 

LEVEL: 4 
GTIME: 52 

LEVEL: 5 
GTIME: 50 

LEVEL: 6 
GTIME: 48 

LEVEL: 7 
GTIME: 46 

LEVEL: 8 
GTIME: 44 

LEVEL: 9 
GTIME: 42 

LEVEL: 10 
GTIME: 40 

LEVEL: 11 
GTIME: 38 

編輯

另外,如果你想準確減量,你應該考慮的事實,第一個層次是真正0,而不是一個到getNewTime()函數 。如果你注意到,它似乎會減少兩個級別的第一。爲了解決這個問題,你可以:

for (var i = 0; i < levelCount - 1; i++) { // Notice the - 1 
+0

當我把「警報(gameTime)」和警報(「速度」)來檢查變量值是否正常。 輸出繼電器: gameTime = 30級1 gameTime = 28 ....在2級 我試圖做什麼ü告訴我,但它並沒有幹活想到,也許問題就在這裏: egg.imagePosition = egg.imagePosition +(速度/ 1000)* gameTime 有什麼建議嗎? ps.English是我的第二語言,所以我會嘗試在我的語法上工作:) – liron 2011-05-29 20:22:26

+0

@liron - 首先,您需要使用'console'(在Firefox中使用Firebug,在Chrome中它已經存在)。其次,你確定每個級別的時間的方法是有缺陷的(正如我上面演示的那樣)。雞蛋的位置不應該決定遊戲的時間(考慮它),它只是當前等級遊戲的一個因素。如果你有你的遊戲的在線版本,這將有所幫助。 – 2011-05-29 20:41:02

+0

鏈接到文件:http:// www。2shared.com/file/pCmVyN41/calcGame.html – liron 2011-05-29 20:51:06

相關問題