”もぐらたたき”ゲームを作りましたが、往年の名機”ファミコン”並みにしたい。
まあ、スーパーマリオ並みのデザインまで、ビジュアルを高められないものか。
VBAでも、ワークシートに画像ファイルの貼り付けは、そう難しくありません。
貼り付けるとシェイプ”Shape”として認識されますが、問題はシェイプ名です。
”Shape 1”のように連番が振られていきますが、判別にはやや分かりにくいな。
だとすれば、識別しやすい名称のシェイプを、シート上に張り付けるだけです。
このゲームで使用したシェイプは、たったの三つで背景、もぐら、ドクロだけ。
メモリーも使いたくないので画素数は抑えながら、ネットで拾った画像で作成。
フリー素材とかサイトに載っていたので、使う分には大丈夫だろうと思います。
モグラ・ドクロのアイコンは正方形で、真四角なセルの大きさより少し小さめ。
乱数で抽出した数値を使ってセル番地を指定して、そこにモグラを貼り込むの。
このシェイプ三要素は、別シートに張り付けてあり、そこからコピペするんだ。
もっとも、背景はブックを開くと先に張り付けますが、アイコンは後からです。
ゲーム展開でアイコンが出現して、まずモグラがランダムにひょっこり現れる。
そのモグラをクリックしてアイコンを取得できれば、ドクロに切り替わります。
もちろん、モグラは一秒しか表示されないから、クリックできない時もあるな。
そこで、モグラの取得をどうやって判断しているかですが、これがゲームの肝。
なかなかに凝ったロジックでして、最初はVartType関数を使ったのに動かない、
Sub 図形選択の判定()
If VarType(Selection) = vbObject Then
MsgBox "図形が選択中"
Else
MsgBox "図形は未選択"
End If
End Sub
Sub 図形選択の判定2()
On Error GoTo ErrHandl
Dim shp As ShapeRange
Set shp = Selection.ShapeRange
MsgBox "図形が選択中"
Exit Sub
ErrHandl:
Err.Clear
MsgBox "図形は未選択"
End Sub
理由は分かりませんが、シェイプの時間内表示での取得が判断できなさそうだ。
ならばと、ネットで紹介されていた別のコードをダメ元で仕込んでみましたな。
If文と違って、取得した図形セットの”ShapeRange”コレクションで判断する。
問題なのは、選択していないとエラーが出るので、エラー処理で逃げています。
これは直截的な挙動の感じがしまして、実際に動かしたら完全に動作しました。
というわけで、サンプルコードをダウンロードしながら、参照してみて下さい。
このコードの中身をVBエディターで見てもらうと、クラスモジュールを使ってみたり、ゲーム画面だけにするのでインターフェースのリボンを非表示にするなど、それなりに工夫はしたつもりなので、参考になればとと思ったのでした。
※サンプルコードのダウンロードは、こちらから(”MoguraTataki.xlsb”)
0 件のコメント:
コメントを投稿