|
毎度お世話になっております。
現在VBAにおけるクラスの擬似承継について勉強をしております。
私は普段、ゲームのたぐいはほとんどしないのですが、たとえがわかり易く
なると思いドラクエにでてきそうな敵のクラスを作成してみました。
標準モジュール
Option Explicit
Sub Main()
Dim Enemy As clsChird
'子クラスのインスタンスの作成
Set Enemy = New clsChird
'自分の体力を回復する魔法を使用
Enemy.MAGIC
'体力を表示
Debug.Print "Enemy HP =" & Enemy.HP
'相手にあたえるダメージを表示
Debug.Print "Enemy Attack =" & Enemy.ATTACK
Set Enemy = Nothing
End Sub
クラスモジュール1
Option Explicit
'////////////////////////////////////////////////////////
'クラス名 clsParent (親クラス)
'説明 敵のクラス
'特徴 攻撃はできないが、自分の体力を回復する魔法を
' 使う事ができる。
'////////////////////////////////////////////////////////
Private mMP As Long 'マジックポイント
Private mHP As Long '体力
Private Sub Class_Initialize()
mHP = 20 '体力を20に設定
mMP = 10 'マジックポイントを20に設定
End Sub
Property Get HP() As Long
HP = mHP
End Property
Property Get MP() As Long
MP = mMP
End Property
'自身の体力を+5回復する
Public Sub MAGIC()
mHP = mHP + 5
End Sub
クラスモジュール2
Option Explicit
'////////////////////////////////////////////////////////
'クラス名 clsChird (子クラス)
'説明 敵のクラス
'特徴 親クラスの特徴を承継して、さらに子クラス独自の
メソッド、プロパティを実装する。
このクラスでは親クラスと同じ魔法が使用できて
さらに相手を攻撃する事ができる。
HP,MPは親クラスと同じ
'////////////////////////////////////////////////////////
Private mParent As clsParent
Private mMP As Long
Private mHP As Long
Private Sub Class_Initialize()
'子クラス内に親クラスのインスタンスの作成
Set mParent = New clsParent
End Sub
Private Sub Class_Terminate()
Set mParent = Nothing
End Sub
Property Get MP() As Long
'親クラスのプロパティ呼び出し
mMP = mPaprent.MP
MP = mMP
End Property
Property Get HP() As Long
'親クラスのプロパティ呼び出し
mHP = mParent.HP
HP = mHP
End Property
Public Sub MAGIC()
'親クラスのメソッド呼び出し
mParent.MAGIC
End Sub
'相手に与えるダメージ量をランダム値で返す。
Public Function ATTACK() As Integer
Randomize
ATTACK = CInt((10 - 1) * Rnd + 1)
End Function
1 擬似的にクラスを承継したいが為に、
子クラス内に使用したい親クラスのメソッド、プロパティを
全て書いていますが、他の実現方法がありますでしょうか?
(現状ですと、親クラスに変更、追加があった場合に関係する
全ての子クラスを修正しなければいけません。)
2 最近私は、Scripting.Dictionaryの主要な機能をラッパーして
さらに独自の機能を追加したクラスを作成しました。
付けた機能は、
myDic.Sort "ASC" myDic.Sort "DESC" などと書き
keyを昇順、降順にSortしたり(Itemも)
(keyが数値という制限がありますが)
myDic.KeyValue(Index)みたく書き、Keyの配列内でのインデック
ス値でKeyの値を参照するプロパティを付けたりしてみました。
CreateObjectを使用するとインテリジェンス機能が使えなくなる
というのもあり、一度クラスを作成してしまえば、使いまわしが
よく自分の中では大変重宝しております。
みなさまがお使いの「これは一度作れば非常に便利!!」という
クラスを教えて頂けないでしょうか?(ソース抜きだと非常に
ありがたいです。自分への作成課題にしたいので)
勉強の為にやっておりますので、まったく急いでおりません。
1または2の質問だけでもかまいませんので
お時間のある時にでもよろしくお願い致します。
|
|