文系人間がプログラミングをはじめてみた。

プログラミング初心者のゼロからの勉強記録。

VBAテトリス 詳細編 ブロックの消去を演出する

どうもこんにちは。

 

今回もエクセルのマクロでつくったテトリスの解説をしていきます。

今回はブロック消去処理の番外編です。

単に消去するだけでなく、実機のように消去に演出を加えるためのコードの解説になります。

 

テトリスのイメージはこちらから確認できますので興味があればどうぞ。

programminghajimetemita.hatenablog.com

 

では解説に入ります。

 

 

1.ブロック消去処理の振り返り

前回の記事で解説した通り、

ブロックを消去する処理はセルの書式を調整することで行っています。

前回記事の内容を見たい方は以下リンクからどうぞ。

programminghajimetemita.hatenablog.com

 

ということで、消去のためにセルの書式を調整するコードに工夫を加えれば、

一風変わった演出にできるというわけです。

 

では、どのように手を加えたのか次から解説していきたいと思います。

 

2.テトリスの挙動

工夫を加えるためにも、まずは本家の動きがどうなっているのかを把握することが重要です。

ということで、まずは本家の挙動について考えていきます。

 

私はこのマクロのテトリスを作る際にテトリスミニの挙動を参考にしましたので、

以下紹介する挙動はテトリスミニの挙動になります。

 

どんな演出がなされるかというと、

・ブロックが揃った行すべてが数回点滅する

という演出です。

 

この挙動を見て、消去行すべてを同時に点滅させるのは難しいなと思い諦めました。笑

諦めも時に肝心です。

 

ただ、何かしら演出は加えたいという思いがありましたので、

実際に作ったマクロでは、

「ブロックの揃った行について、左から一つずつブロックが消えていく」

という処理を入れました。

 

この演出でも、"この行が消えるんだ!"というのが明確になるので、

まずまずの演出ができているのではないかと自負しています。

 

では、次のセクションで具体的なコードの内容に入っていきます。

 

3.ブロックを消去するコード

繰り返しになりますが、処理内容は以下のとおりです。

「ブロックの揃った行について、左から一つずつブロックが消えていく」

 

上記処理のために実際に作ったコードの内容は以下の通りです。

なお、細字部分は前回記事で紹介したコードと同じコードです。

 

    For r = end_r To start_r Step -1
        If checklineblack(r) = True Then
            For c = leftedge_c To rightedge_c
                With Cells(r, c)
                    .Interior.ColorIndex = 2
                    .Borders.LineStyle = xlDouble
                    .Borders.ColorIndex = 1
                End With
                Application.Wait [Now() + TimeValue("00:00:00.03")]
            Next c
        End If
    Next r

※ leftedge_cはゲーム画面の左端列、rightedge_cはゲーム画面の右端列を指す定数

 

コードのポイントについて解説します。

 

記述しているコードはかなり単純です。

ブロックを一つずつ消去するということで、

繰り返し処理を利用して一セルずつ書式の変更を行っているだけです。

 

繰り返し処理にはおなじみForを使っており、

繰り返しの回数はゲーム画面内の一行全体を消去するわけですから、

ゲーム画面の左端から右端までになるということです。

 

消去を再現する書式の調整については前回記事で解説したのと同じコードです。

 

最後に、Application.Waitというコードがありますが、

これは実際に処理を実行したときに、

人の目で見て滑らかに映るようにするために、

処理時間の調整として付加したコードです。

何も入れないと、ぱっと処理が終わってしまい味気ないので、

あえて処理中断時間を入れることでゲームっぽい演出にしているわけです。

 

以上でコードの解説を終わります。

 

4.おわりに

今回はブロック消去を演出するコードについて解説しました。

ここまででマクロテトリスのコードの大部分の解説が終わりました。

これらのコードを実際に組み、つなぎ合わせると、

かなりテトリスっぽい挙動になっているかと思います。

 

完成まで残りもう少しですので、

もうしばらくお付き合いください。

 

次回はブロックの消去に応じてSCOREなどを計算する処理について解説します。

ではまた。