Почему игровое время сокращается вдвое, а не на 2 секунды? - PullRequest
4 голосов
/ 29 мая 2011

Я пытаюсь построить игру на чистом Javascript в качестве упражнения.

Цель игры - ответить на случайное математическое упражнение до того, как закончится таймер.Время представлено яйцом, которое падает на чью-то голову;если вы правильно ответили на все математические упражнения, вы начнете все сначала, но время будет сокращено на 2 секунды.

Моя проблема: на 1-м уровне игры время работает, как и ожидалось, но по уровню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 

Я знаю, что этот вопрос загружен кодом, поэтому я был бы очень признателен, если кто-то может помочь.

1 Ответ

5 голосов
/ 29 мая 2011

Проблема в том, что вы повторно используете переменную 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

EDIT

Кроме того, если вы хотите точно уменьшить, вы, вероятно, должны учитывать тот факт, что первый уровень действительно равен 0 вместо одного для функции getNewTime () . Если вы заметили, кажется, что первый уменьшается на два уровня. Чтобы решить эту проблему, вы можете:

for (var i = 0; i < levelCount - 1; i++) { // Notice the - 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...