オブジェクト指向の例

未分類
  • このページの著者ZISIRUが練習用に書いたコードです。
  • 他で公開、配布、販売、使用する場合は変数名等、一部でもいいので改変して公開してください。
  • 上記に違反しない限り私はすべての権利を主張しません。ご自由にお使いください。
  • 本コードの使用において、この文章の表記、著者名の表記は不要です。
  • 本コードは「現状のまま」提供され、明示または黙示を問わず、商品性、特定目的への適合性、非侵害に対する保証を含むがこれらに限定されない、いかなる種類の保証もありません。いかなる場合も、著者または著作権保有者は、契約行為、不法行為、またはその他の行為にかかわらず、本コード、または本コードの使用もしくはその他の取り扱いから生じる、またはそれに関連するいかなる請求、損害、またはその他の責任についても責任を負わないものとします。
  • The code on this page was written by the author, ZISIRU, for practice purposes.
  • If you wish to publish, distribute, or sell the code elsewhere, please modify it, even if only in terms of variable names, before making it public.
  • As long as the above is not violated, I do not claim any rights and you are free to use it.
  • There is no need to include this statement or the author’s name when using this code.
  • This code is provided “as is”, and no warranties of any kind are offered, including but not limited to warranties of merchantability, fitness for a particular purpose, or non-infringement, whether expressed or implied. In no event shall the author or copyright holder be liable for any claims, damages, or other liabilities arising from or related to the use of this code, regardless of whether they are based on contract, tort, or other legal theory.

VBA、落ちものゲームで説明(メインページ)

オブジェクト指向とはプログラムを役割ごとに分割して(部品にするイメージ)メインから呼び出して使う感じです。
こうする事により一か所に書くコードを短く出来てメンテナンス性や拡張性、コードの可読性を上げることが出来ます。

これとは別に関数型プログラミングという物があり、こちらは性質がちょっと違いますが似たようなものがあります。
そしてクラスを応用することにより多態性(ポリモーフィズム)とか難しいこともできます。

以前、職場が暇な時にVBAで作ったゲームのプログラムがあるので(初めて作ったゲーム)、これでオブジェクト指向の概念が説明できればなと思います。

実際にコピペで動かしたい場合にはまずシートに下の画像のようなシートを作ります。
無くてもセルの境界がわからないだけでゲーム自体は出来ます。
なのでセルの色や文字、サイズは任意に指定してください。
※Uの22のセル(スコア表示部)は小さいと文字が表示されないのでセル統合か書式設定で調整してください。(画像ではセル統合しています)

ちゃんとは詰めてないので機能はいまいちですが、まぁ普通に動いて遊べます。(クラスモジュールとシートのオブジェクト名を合わせればコピペだけで動くはずです。)
底足掻き処理とかいうのはうまく機能してないですw
しかもこの時はパブリック変数使ってますねlol【許してください】

上が標準モジュールに書くメインのコードになります。

メインの流れとしては、①描写範囲のクリア、連想配列で落ちるブロックと次のブロックの生成→②時間経過で連想配列に入れたブロックを下にずらしていく→③キーの入力があればそちらに移動、または回転後のオブジェクト描写→④【底】に着いたときに列が埋まったら消す→⑤得点計算→⑥得点の条件で落下待機時間を変動→⑦ブロックの準備→⑧【天井】に【底】が重なったら終了、重なってなかったら②からループ
というようになってます。

で、初期化とか移動、回転等の処理のコードはクラスモジュールに書いて呼び出して使用してます。
クラスモジュールを使っているコードの部分は
初期化.消去
右移動.落下物 = 落下中
右移動.移動
左移動.落下物 = 落下中
左移動.移動
回す.落下物 = 落下中
回す.回すよ
の辺りになります(一部ですが)

各クラスモジュールのコード詳細は下のようになります。(リンク先)

※リンク先にクラスモジュールのコードがあります。
ゲームをするシートのオブジェクト名はGAME
クラスモジュール名は

ブロック_
右移動_
回す_
左移動_
初期化_
消去_
得点_
落下_
落下速_

リンクで分かりにくいですが、全部後ろに半角のアンダーバーが付いています

このメインのページと上のクラスモジュールのサブページを合わせて一つの説明とすることでメインページの文字数を減らせたり、もし同じ説明を繰り返し使うならリンクを貼るだけで良くなり修正も一回で済みます。
例えば、サブページ無しで書いていて右移動の同じ説明を3回していたとします、もし何かあって修正したくなったときは3か所修正しなければなりませんが、オブジェクト指向で作っていた場合だとリンク先の1か所だけ直せば良いということになります。

こんな感じでコードを書くのがオブジェクト指向のイメージになります。

コメント

タイトルとURLをコピーしました