eraseStartFrameerasingStartFrame
erasingStartFrame ←正しい誤:「全消し」が表示されていない画像
正:「全消し」が表示された画像

Q:配列の最後が「],」とカンマが付いている箇所について、「]」にしなくても大丈夫でしょうか?
A:配列の最後にカンマを付けるのは、JavaScript においては仕様上問題なく許されています。カンマを付けない形でもありませんが、たとえば配列の順番をコピペで移動した場合にカンマがついていない行をそのまま上に持って来ると構文エラーになります。本書の該当部分も、読者の皆さんが自由にconfig.jsを編集した場合にエラーになりにくいように、という実務的な理由により最後にカンマを付けています。
Q:たまたま、2ケ所「Stage.eraseStartFrame = startFrame; ・・・A」「const elapsedFrame = frame - Stage.eraseStartFrame; ・・・B」同じ間違いをしたから、たまたま動いたという説明がありますが、P.63 006行目で、 static erasingStartFrame = 0; としているのは無意味だということでしょうか?VisualStudioCodeでも、ぷよぷよプログラミングのクラウドIDEでも未定義でのエラー検出はされないようですが、Stage.eraseStartFrameという変数は定義なしで使えた、ということでしょうか。JavaScriptでは、Aと記述すれば定義したことになるのでしょうか。
A:無意味、というと語弊がありますが、プログラムの挙動に影響を与えないという観点ではその通りです。
なぜ挙動に影響を与えないにもかかわらず書いているかというと、「このクラスの中で erasingStartFrame というメンバ変数を使い、それが数値である」というのを読む人のために明示するためです。
また JavaScript では未定義のメンバ変数へのアクセスは問題なく出来るので、 eraseStartFrame という書き間違いをしてしまってもエラーにはなりません。
Q:remainingInfoList.push(…connectedInfoList); という行に17番という番号が付いていてP.67の20行目でリストをコピーするとありますが、”…”は行列の中身を表すのでしょうか。
A:これは「スプレッド構文」と呼ばれる文法で、push の引数に配列の中身を展開する意味となります。
例えば、
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
arr1.push(arr2);
とすると arr1 の中身は [1, 2, 3, [4, 5, 6]] と配列の中に配列が入ってしまいます。しかし、
const arr3 = [1, 2, 3];
const arr4 = [4, 5, 6];
arr3.push(...arr4);
とすると、これは
arr3.push(4, 5, 6);
と同等であると評価され、結果的に arr3 の中身は [1, 2, 3, 4, 5, 6] となります。
書籍内のP.188 の左下に簡単な説明を用意しておりますので、そちらも是非ご覧ください。
Q:最初からZenkeshiimageを透明にしていると記載されており、なぜこのタイミングでhideZenkeshiをして非表示にしているのか
A:最初はZenkeshiImageを透明にしていますが、 一度全消しが発生し、ZenkeshiImageが表示されていると、その後透明になるタイミングがここ以外ではありません。ここで非表示にしているのは、過去に全消しが発生してZenkeshiImageが発生した場合に備え、ぷよが1つでも消えた場合に非表示にする意図を持った処理となっています。この行をコメントアウトして実行すると、一度全消しが発生すると二度と全消し画像が消えないことをご確認頂けると思います。
Q:ソースコードに’px’ “px” などが混在しているのが気になります
A:p.44, 185を参照いただければと思います。