2017-04-22 11 views
0

私は4つのゲームを接続しています。 人間のプレイヤーがゲームをプレイするときに、彼が移動したいコラムをクリックできるようにしたいと考えています。ユーザー入力が発生するまでスクリプトを一時停止する方法

私は動きが合法な列にイベントを追加するのに苦労していますに。 次のコードは、プレーヤーがクリックする列に基づいてlegalMovesの項目を返します。法的な列がクリックされていない限り、コードは一時停止してただ待つだけです。

今のところ、addEventListenersの行はちょうど無視されているようですが、コードは実行し続け、人間の入力を待っていません。

// array of legal moves, eg.[0,1,3,5,6] 
let legalMoves = game.getLegalMoves(); 

// initialization with -1 to check if it changes 
let humanMove = -1; 

//column nodes 
let node = document.getElementsByClassName("column"); 

// my try of getting at least the first column to work 
node[0].addEventListener("click", function() { 
        humanMove = 0; 
}); 
/* pseudo code: 
while(humanmove===-1){ 
wait here until one event listener fires 
}*/ 
// returns -1 every time :'(
return humanMove; 
+0

あなたがチェック文が 'humanMove =である場合は、単に追加することができます= -1 'イベントリストの後宣言をして、次に何が起こるかを決めることに依存します。 – Leguest

+0

私はwhileループを必要としません。 Clickイベントリスナー自体で何をやろうとしているのですか(おそらく特定のパラメータを持つ関数を呼び出すことはできません)。 – jrook

+0

@Leguest私が擬似コードで書いたことを意味していますか?中括弧に何を入れることができますか? – Tweakimp

答えて

0

OPは「ゲーム」のためのHTMLを提供したとメソッドgetLegalMovesを(定義されていた場合、私は)が好ましいだろうが、私は1つ特に重要な変化を作り、コードを変更しました。なぜなら、OPがコードブロック内に含まれていない、つまり中かっこで定義されているときに、グローバルスコープ内の変数を定義するためにOPが "let"を使用する理由はわかりません。つまり、ここでは動作する修正版があります。 JavaScriptは関数またはメソッドから値を返すことしか許さないので、returnステートメントを取り除くことが重要な変更になりました。

HTML:

<div id="game"> 
<div class="column"> 
<button>Test</button> 
</div> 
</div> 

CSS:

.column { 
    color:blue; 
} 

JS:

// array of legal moves, eg.[0,1,3,5,6] 
//let legalMoves = game.getLegalMoves(); 

// initialization with -1 to check if it changes 
let humanMove = -1; 

//column nodes 
var node = document.getElementsByClassName("column"); 
node[0].addEventListener("click", function() { 
    humanMove = 0; 
    console.log(humanMove); 
}); 

実施例here

関連する問題