0

私はこれをまったく理解していません。while ループを追加すると、変数が「Uncaught type error cannot read property of 'perp'」をスローします。私は多くの解決策を試し、コードを分離し、追加の入力を追加し、:any タイプを作成しようとしましたが、本当に途方に暮れています。

背景情報: 私は「Three's a Crime」と呼ばれる簡単な小さなゲームを作ろうとしています。基本的に、最大 3 人の犯罪者を表示するアルゴリズムを持っています。そのうちの最大 2 人が実際の加害者である可能性があります。

すべてのコードは公開されています: https://github.com/treehau5/ThreesACrime

function main(num) {
    var is_over = false;
    var game = new GameObject.Game(shuffled_criminals, num);

    $('body').append(game.display());
    $("#status").text("Turn in progress");
    $('body').append('<div class="container"><p>Enter your guess<p><div class="input-append" id="turn_form"><form>\
         <input class="span2" id="Text1" type="text" />\
         <button class="btn" id="Button1" type="button">Go!</button>\
         </form>\
     </div></div>');

    console.log(game.getThree());
    while (true)          //removing this while loop causes above line to work fine.
    { }
}

これは、ゲーム クラス内の getThree メソッドです。

       getThree() {
        var result: Criminal[] = [];
        var temp: Criminal[] = _.shuffle(this.criminals);
        var num_perp = 0;
        while (result.length != 3) {
            while ((num_perp != 3) && (result.length != 3)) {
                var x: Criminal = temp.pop();
                result.push(x);
                if (x.perp == true)
                    num_perp++;
                temp = _.shuffle(temp);
            }
            do {
                temp = _.shuffle(temp);
                var y: Criminal = temp.pop();
                if (y.perp == false)
                    result.push(y);
            }
            while (result.length != 3)

        }

        return result;
    }//end displayThree

私はシャッフルにunderscorejsを使用しており、DefiniteTypedアンダースコアタイピングを使用しています。

レポジトリを表示または複製して試してみてください。このエラーは Google Chrome 26 で発生しています。すべてのコードは game.ts、gameobject.ts、main.ts 内にあります。アンダースコアや jquery ui などの外部ライブラリへの参照がたくさんあります。GUI を少し改善する予定です。メインのゲーム ロジックを完成させます。

これをすべて読んでくれたことに感謝します。あなたの助けに感謝します。

編集:だから私はこのようなループを使ってゲームに「ターン」を入れようとしています

 while (is_over)
    {
        break;
    }
4

2 に答える 2

1

試す

while(false){
 // Unreachable code
 do_something;
 break;
}

条件の中にあるもの、つまり。anythingあなたの場合、決してfalseにならない場合while(true)、スティーブフェントンが述べたように、ブラウザまたはクラッシュによって停止されるのは事実上です。

ループする少し良い方法は次のとおりです。

function loop(){
   var result = do_something();
   // Repeat 
   if (result) {setTimeout(loop,100);}
   // Break
   else return; 
}
setTimeout(loop,100);

ただし、setTimeout の代わりにゲーム エンジンを使用することをお勧めします。例http://www.createjs.com/#!/EaselJS

于 2013-04-17T05:01:16.480 に答える