2023年11月3日金曜日

シェイプのアイコンをクリックで取得できたか、できなかったかを判定するのが、このゲームのキモではあるな ー Selection.ShapeRange(VBAマクロ)

        
”もぐらたたき”ゲームを作りましたが、往年の名機”ファミコン”並みにしたい。
まあ、スーパーマリオ並みのデザインまで、ビジュアルを高められないものか。

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エディターで見てもらうと、クラスモジュールを使ってみたり、ゲーム画面だけにするのでインターフェースのリボンを非表示にするなど、それなりに工夫はしたつもりなので、参考になればとと思ったのでした。




いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿