2011-05-29 51 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

相关问题