0

豚のゲームを作っています。ゲーム全体とコードはこちら: http://cisp362.info/johng/CISP362_Pig/Pig.html 私の問題は、コンピューター プレーヤーのプレイが速すぎて、列の色の変化が見えず、すべてのロールが発生したように見えることです。すぐに。setInterval と setTimeout が速度を落とすために使用できる唯一のものであることはわかっていますが、変数の結果に依存するループ内にあるため、コードを再配置して機能させる方法がわかりませんthisRollthisRollsetTimeout を使用してみましたが、残りのコードが実行され続け、変更されるのを待たないため、予測できない結果が生じますrollDie(). do while ループの代わりに setInterval を使用してみましたが、条件ステートメントを組み込む方法や、後でクリーンアップ コードを実行する方法がわかりません。私はそれをもっと遅くしたいだけです。たぶん、私はこれをあまりにも長い間見つめていました。

function takeNPCTurn(){
    do{
        thisRoll = rollDie();
        if(thisRoll===1){
            document.getElementById("NPCRolls").innerHTML = "------------------------------------<br>You Rolled a 1 and lost your turn!<br>" + document.getElementById("NPCRolls").innerHTML
            localStorage.whosTurnIsIt = "Player";
            changeColumnColor('col1','lime');
            changeColumnColor('col2','transparent');
            runningTotal=0;
            return;
        }else{
            runningTotal += thisRoll;
            document.getElementById("NPCRolls").innerHTML = "You Rolled a " + thisRoll + ", totalling " + runningTotal+"<br>" + document.getElementById("NPCRolls").innerHTML;
        }   
    }while(runningTotal < 20 && (parseInt(document.getElementById('NPCScore').textContent) + runningTotal) < 100);

    //finish up NPC turn and switch back to player
    document.getElementById('NPCScore').textContent = parseInt(document.getElementById('NPCScore').textContent) + runningTotal;
    document.getElementById("NPCRolls").innerHTML = "------------------------------------<br>You held at " + runningTotal + ", bringing your score to " + document.getElementById('NPCScore').textContent + "<br>" + document.getElementById("NPCRolls").innerHTML;
    runningTotal=0;
    localStorage.whosTurnIsIt = "Player";
    changeColumnColor('col1','lime');
    changeColumnColor('col2','transparent'); 
    if(parseInt(document.getElementById("NPCScore").textContent) >= 100){alert (losingMessage);}
}
4

2 に答える 2

1

このリンクで見つけたものを使用してそれを理解しました: http://nokarma.org/2011/02/02/javascript-game-development-the-game-loop/

JavaScript サンプル:

function get_random_color() {
    var letters = '0123456789ABCDEF'.split('');
    var color = '#';
    for (var i = 0; i < 6; i++ ) {
        color += letters[Math.round(Math.random() * 15)];
    }
    return color;
}

var game = { };
game.fps = 1;

//draw entities here
game.draw = function() {  
    document.getElementById("heading").style.color = get_random_color();
};

//run game logic here
game.update = function() {  
};

game.run = function() {
  game.update();
  game.draw();
};

//start the game loop
function start() {
    game._intervalId = setInterval(game.run, 1000 / game.fps);
}

//reset the burn
function reset(){
    clearInterval(game._intervalId);
}

対応する html ファイル:

<!DOCTYPE html>
<html>
    <head>
    <link rel="stylesheet" type="text/css" href="spreadingFire.css">
        <title>Spreading Fire</title>
        <script src="http://cdnjs.cloudflare.com/ajax/libs/ocanvas/2.0.0/ocanvas.min.js"></script>
        <script type="text/javascript" src="spreadingFire.js"></script>
         <h1 id="heading" >Spreading Fire!</h1>
    </head>

    <body> 

        <canvas id="canvas"></canvas>
        <button type="button" id="bReset" onClick="reset()">Reset</button>
    </body>
</html> 
于 2013-11-03T00:00:33.377 に答える
0
function takeNPCTurn(){
    // disable player controls here

    // roll the die for the NPC
    thisRoll = rollDie();

    // potentially show a thinking animation here

    setTimeout(function() {
        //do something after the delay here

        //when done with things the NPC does, call the function to give turn/control back to player here
    }, 250);
}
于 2013-10-15T05:39:59.663 に答える