Excelでブロック崩しをする

  • 投稿 : 2019-08-31

本記事は広告およびアフィリエイトプログラムによる収益を得ています

VBAマクロの実行は、自己責任で!!

Excelでブロック崩し

ブロック崩しゲームを創る - 情報授業実践記録

上記をみて、ちょっと興味を持ちました。上記にソースは公開されてるのですが、その部分だけでは動作しないようで、検証するのには使えないので断念。

ブロックくずし for Excel 97

今度は動作するとおもう、完成したものを探しました。

ブロックくずし for Excel 97の詳細情報 : Vector ソフト

上記からダウンロードしてきます。大丈夫だと思うけど、自己責任で!!

実行してみる

ダウンロードしたファイルを展開(解凍)して、「Block.xls」をEXCELで開きます。EXCEL2013で開きました。

マクロを有効にして起動すると、こんな画面になります。「スタート」ボタンを押すとブロック崩しが始まります。

ソースを見てみる

後から知ったのですが、パスワードがかかってるようでEXCELからは見れません。実は、LibreOfficeの表計算のcalcの動作確認に使っていて、LibreOfficeだとソースが見れてたんですね。

LibreOfficeで読み込んでソースをみる

パスワード設定をスルーするようで、ソースが見れます。

ただし、このVBAマクロはLibreOfficeでは動作しません。

If .TopLeftCell.Interior.ColorIndex <> xlNone Then
    Call SpecialAction(.TopLeftCell.Interior.ColorIndex)
    .TopLeftCell.Interior.ColorIndex = xlNone
    bCount = bCount - 1
    yFlag = -1 * yFlag
End If
If .BottomRightCell.Interior.ColorIndex <> xlNone Then
    Call SpecialAction(.TopLeftCell.Interior.ColorIndex)
    .BottomRightCell.Interior.ColorIndex = xlNone
    bCount = bCount - 1
    'xFlag = -1 * xFlag
    yFlag = -1 * yFlag
End If

最低でもこの部分でエラーになるので、この部分を削除してみると、動作はします。ゲームとしては遊べませんが、なんか動いてますという感じにはなります。

「TopLeftCell」というのがサポートされてないようで、

Sheet1.Shapes("Ball").Top =>OK
Sheet1.Shapes("Ball").TopLeftCell =>エラー

になります。この部分を同じような動作になるように書き換えれば、LibreOfficeでも遊べますが・・。

その他

EXCELでブロック崩しを実現する方法はいろいろあります。ユーザーフォームを作成するとかになると、ほぼVBライクになると思います。このプログラム自体は、EXCELっぽい作りになってると思います。

・ブロックの部分は、セル
・ボールの部分は、図形 Sheet1.Shapes("Ball")
・ラケットの部分は、図形 Sheet1.Shapes("Racket")

こういう構造になってます。また、面データは、2つ目のシートに定義してあって、画像のようになってます。たぶん、この部分を少し書き換えるだけで面をカスタマイズできると思われます。

あまり中身(ソース)を見てませんが、たぶん、EXCELらしいコーディングになってるんじゃないかなぁと思う。

その他

平文で保存されていることがわかったので、特に工夫せずに抽出ができるはずです。
ツールがないかググってみると、oletoolsというPythonツール群のolevbaがコードの抽出をしてくれるようです。


VBAの「プロジェクトを表示用にロック」機能はVBEからの閲覧を禁止するだけで、コード自体は平文で保存されています。本機能を使ってソースコードを非公開にしたつもりでいても、実際には閲覧されてしまう可能性があるので注意が必要です。
VBAの「ソースコードをロック」ではソースコードをロックできない - Qiita

パスワード保護はこの程度のものなので、過信しないように!!
まあ、完全に見えない・分からないと、セキュリティーチェックするのが不可能になりかねないというのはあるのかも。

スポンサーリンク