javascript(テトリス008_テトリスをクラスのコードにする)

■テトリス006のコードをクラスを使ったものに修正する。
テトリス006の記事で作成したコードは function を使っただけのものなので、それぞれの関係性が分かりづらい。クラスを使ったものにコードを整理した。

おおまかには、固定値(const)、全体で使用するクラスに対する変数 pc_(PieceClass), bc_ (BoardClass)、実行ボタン(game_start())を押した際の挙動、キーボード操作をした際の挙動、それぞれのクラスという構成にした。


BoardClassクラスは、イメージとしてはテトリスの画面に対するクラス。持っているフィールド、メソッドは下のような感じ。

・フィールド
#score_(プライベート): ゲームの点数、同時に1~4行を消した際に固定値のポイントを追加する。
#pieceCnts_(プライベート): 使ったピースのそれぞれの種類の数、7種類。
board_(スタティック): 画面の状態を表現する配列、要素200の配列。ピースがない場合は0、ある場合1。
repeatInterval_(スタティック): setIntervalを入れる変数。ゲーム終了時に、停止させるために使う。

・コンストラクタ: initBoard で初期値の指定をする。ここではすべて0(ピースがない状態)とする。

・メソッド
deleteSetLine: 揃った行を削除する。
synchronizeBoard: board_ と実際の画面を同期させる。css の背景色を調整。
createPieces: ピースを作成する。PieceClassを返す。
checkEndinBoard(tempblock): ゲームの終了の判定。ピース作成時にすでにboard_ 上にピースがある場合はゲーム終了とする。

PieceClassクラスは、イメージとしては落ちていくピースに対するクラス。積み重なったものは BoardClassの情報としてもつ。持っているフィールド、メソッドは下のような感じ。

・フィールド
#piece_(プライベート): ピースを形作る4マス分のセル。
#rotationPattern_(プライベート): ピースを回転させるための演算用の数字。

・コンストラクタ: random の数字から7種類のいずれかのピースを作る。

・メソッド
parallelMovetoLeft(tempblock): ピースを左へ動かす。
parallelMovetoRight(tempblock): ピースを右へ動かす。
parallelMovetoDown(tempPiece): ピースを下へ動かす。一番下や積みあがったピースがある所まで行ったら0として返り値を返す。
rotationMove(tempblock): ピースを回転させる。
getter_piece (ゲッター): #piece_ の値を取得する。

移動させるものは、基本的には引数としてPieceClassを入れ、更新後のクラスを返り値とする。次の操作では、更新後のものが引数として使用される。このあたりの操作で、上の方で宣言している pc_ を使う。

PieceClass 内で、board_ の情報を使いたい時がある。この変数自体は1つあればいいので、static として使用する。逆に、BoardClass 内で、#piece_ を使いたいときは、ゲッターで取得するようにしている。javascriptのスタイルブックとか見ればもう少しきれいなコーディング方法もあるかもしれないけど、とりあえずこんなところまで。

コードの整理もできたので、後は Anime.js を使ったものを考えて一端終わりにする。