【JavaScript】テトリスの構文、↓これで何故「一

Writer: admin Type: 友人関係の悩み Date: 2018-12-14 00:00
【JavaScript】テトリスの構文、↓これで何故「一行がそろった」か分かるんですか?こちらのサイトで、200行で作れるテトリス、というのを勉強中です。http://coderecipe.jp/recipe/iHjJBJx9Si/---------------// 一行が揃っているか調べ、揃っていたらそれらを消すfunction clearLines() { for ( var y = ROWS - 1; y >= 0; --y ) { var rowFilled = true; // 一行が揃っているか調べる for ( var x = 0; x < COLS; ++x ) { if ( board[ y ][ x ] == 0 ) { rowFilled = false; break; } 以下略---------------ここ以外にもわからない部分があるので、問題はもっと別のところにあるのかもしれませんがここにきて完全にわからなくなりました。とくに↓これですif ( board[ y ][ x ] == 0 ) {board[]は、テトリスの盤面情報なのですが、これがどういう意味なのかさっぱりわかりません。なぜこれが「一行が揃っているか調べる」構文になるのでしょうか?少し解説をお願いできますでしょうか。共感した0###board[ y ][ x ]は2次配列です。将棋の盤面と同じで縦横のマスに番号をつけてそれぞれのマスの情報にアクセスします。どの番号を画面上のどのマスに割り当てるかはプログラム次第ですが、一行が揃っているかどうか調べるのにxを回しているので、xが横座標です。(リンク先読んでないのでこれは仮定ですが)board[ 0 ][ 0 ] とすると、画面の1番上の1番左のマスの情報を表し、それが0なら空のマスである事を表しています。問題の部分は外側のforループで、y=行を選んで、内側のループで、xを左端から右端まで、順番に変えてゆきます。そうやってマスをズラしながら順番にif ( board[ y ][ x ] == 0 ) {を実行してゆきます。その内容は、『対象のマスが0=空だったら〜』ですそしてその時に実行する内容はrowFilled = false;break;『揃ってないと、マークしてループを抜ける』と言った感じでしょうか要は、『一行分のマスを一つずつ確認していって、一つでも空白を発見したら、その時点で確認を打ち切って次(次の行)に進む』=『最後まで空白の無かった行は、一行埋まっている』という内容です。ナイス0
###なるほど!!!「全部埋まっている」じゃなくて「1つも空がない」っていう構造か!!!すっごく理解できました!###0はマスにブロックが入っていない状態を表しています。行のマスを左から順にチェックしていき、1つでも0がある、つまり行の中に1つでも空白ブロックがあるということは、その行は揃っていないという判定になります。空白ブロックを発見した場合は、行が揃っているかどうかのフラグ(rowFilled)をfalseにし、breakで1行分のループを抜けています。ループを抜けるのは、1つでも空白のブロックを発見した場合、その行の残りのブロックは判定する必要が無いからです。ナイス0
###>なぜこれが「一行が揃っているか調べる」構文になるのでしょうか「一行に空きが無ければ揃っている」という言い換えです***『if ( board[ y ][ x ] == 0 ) {』において「0」はどうやら盤面の空きらしい……と察することが出来ますつまり、その箇所は埋まってませんので、揃っているハズが無く、揃っているかどうかのフラグrowFilledを偽にして、breakしてます***つまり、「一行が揃っているか」を言い換えますと、「一行に空きがあるか調べる」ということと同義になりますさらに言いますと、「一行が揃う」を「その一行に空きが無ければ、その一行は揃っている」と言語的に言い換えられるかどうか(思い付くかどうか)、となります***また、このような言い換えは、大抵は事象の対偶によって導くことが出来ます今回ならば「一行が揃っている ならば 一行に空きが無い」というのが『揃っている』という事象の条件ですので、それを対偶によって言い換えますと「一行に空きがある ならば 一行が揃っていない」という言い換えになりますまとめますと、次です1)「一行が揃っている ならば 一行に空きが無い」2)「一行に空きがある ならば 一行が揃っていない」なので、そのソースコードでは『一行が揃っている』ことの言い換え(対偶)である2番の条件で判定してますナイス0

 

TAG