質問: 0; y < 8; y++) { // 空白マスのみおけるのでチェック // それ以外は石の数を加算 switch( field[x][y] ) { //case 0: //console.log('何もしない'); //break; case 1: black_cnt++; console.log('黒を1加算'); console.log('黒の数' + black_cnt); break; case 2: white_cnt++; console.log('白を1加算'); console.log('白の数' + white_cnt); break; } } } } ``` これで正常に動いた!と思ったのですが、譜面が進むと、白か黒か枚数が同一ではなくなります。どうすればいいのか思案してましたが、当方playable関数に関してまったく理解がないので、どうも自分流で作れれば作った方がいいのではないかと思いました。トレーニングしてないのに野球の実践で活躍できるかと言うと、リトルリーグと大リーグぐらい違うものだと認識しました。たかだか100行くらいですけど、明日までに解決策が出なかったら、メンターに失敗だったと報告します。 他に何かご助言ありますでしょうか?人格攻撃とか向いてないとか言うのはご遠慮ください。 追記。Switchの0も何を指してるかわかりません
回答: > > 今現在勝利判定の所で何を対象にチェックをしたらいいのか、苦戦しています。 > > ...略 > > showWinnerはどこからか引っ張ってきたメソッドです。普通に動きません。 > > > `showWinner`のロジック自体は動作するかと思います。 全コード中から必要な部分だけ抜き出していますが、下記を実行してみてください。 ``` var BLACK = 1; var WHITE = 2; var field = [ [9, 9, 9, 9, 9, 9, 9, 9, 9, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 0, 0, 0, 0, 0, 0, 0, 0, 9], [9, 9, 9, 9, 9, 9, 9, 9, 9, 9] ]; // 以下showWinnerより抜粋 var nt = {}; nt[BLACK] = 0; nt[WHITE] = 0; for (var x = 1; x < 8; x++) for (var y = 1; y < 8; y++) nt[field[[x, y]]]++; console.log((nt[BLACK] == nt[WHITE]) ? 'The game ends in a draw.' : 'The winner is ' + (nt[WHITE] < nt[BLACK] ? BLACK : WHITE) + '.' ); // 表示結果 // -> The game ends in a draw. ``` 画面上には表示されず、コンソールに表示があるかと思います。 行っていることはシンプルで、盤面状の`1:黒`と`2:白`の数をカウントしてどちらが多いかを比較しているだけです。 仮に`showWinner`がうまく動かないのだとすれば引数の`field`がどこかのタイミングで意図せず書き換わっていると思います。