掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
構造体について? (ID:105086)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
'使い方がわからない、ということですので例を1つ・・・。 'ゲームを作ろうと思ったとします。 'そのゲームには敵が出てきます。 '敵には、識別番号、名称、x座標、y座標、ヒットポイント、攻撃力、防御力、速度があります。 'これを構造体(ユーザ定義型)で宣言/定義しましょう。 '========================================================= 'まずはユーザ定義型の型宣言/定義 Private Type TekiType ID As Long Name As String x As Long y As Long hp As Long Att As Long Def As Long sp As Long End Type '敵は最大100体でてきますので、配列でユーザ定義型の変数宣言/定義 Dim udtTeki(99) As TekiType '次に変数の中身を初期化する関数を作ります。 Private Sub TekiInit() Dim i As Long For i = 0 To 99 With udtTeki(i) .ID = i + 1 .Name = "スライム" & CStr(.ID) ' 名前はスライム1〜スライム99 .x = Int(Rnd * 100) .y = Int(Rnd * 100) .hp = Int(Rnd * 6) + 5 ' ヒットポイントは 5〜10 .Att = Int(Rnd * 4) + 3 ' 攻撃力は 3〜6 .Def = Int(Rnd * 3) + 2 ' 防御力は 2〜4 .sp = Int(Rnd * 2) + 1 ' 速度は 1〜2 End With Next End Sub 'で、敵にダメージを与える関数は Private Sub TekiDamage(lngTekiNo As Long, lngDamage As Long) Dim strMsg As String With udtTeki(lngTekiNo) If .hp = 0 Then strMsg = .Name & " はすでに死んでいる" Else If .hp - lngDamage < 0 Then lngDamage = .hp .hp = 0 Else .hp = .hp - lngDamage End If strMsg = .Name & " は " & CStr(lngDamage) & " のダメージを受けた" strMsg = strMsg & vbCrLf & .Name & " の体力は " & CStr(.hp) & " になった" If .hp = 0 Then strMsg = strMsg & vbCrLf & .Name & " は死んだ" End If End If MsgBox strMsg End With End Sub 'でもって、ボタンを押したらスライム11に5のダメージを与えましょう。 Private Sub Command1_Click() Call TekiDamage(10, 5) End Sub 'あとは、Form_Loadで初期化処理を呼べば出来上がり。 Private Sub Form_Load() Randomize Call TekiInit End Sub '========================================================= 'ゲームにはほど遠いですが、Formにボタン1個置いて、 'このレスを丸ごと貼り付ければ、一応動作します。 'ボタンを2回も押せばスライム11を退治できるでしょう。 'ちなみに、今回の例ようにユーザ定義型変数に '敵の攻撃、敵の防御などの関数を関連付けたほうが都合がいいときは、 'クラス化したほうがすっきりします。 'PS. '適当に作ってるのであら捜ししないように (^_^;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.