クラスを使ったゲーム

<戻る

ここに載せてあるソースコードは、参考のために載せてあります

サンプルコードは、一番下にLZHとしてあります

グラフィックに手間をかけました




Option Explicit

'ステータス管理をするクラスを使う
Private clsBattle As New Class1

'フォームがロードされた
Private Sub Form_Load()
    Initialization
    Attack_Start
End Sub

'初期設定です
Sub Initialization()
    
    '同じ戦闘にならないようにランダムを初期設定する
    Randomize Time
    
    '攻撃ボタンをイベント無効にします
    cmdAttack.Enabled = False
    
    'キャラの位置の設定です
    imgMy.Move 24, 64, 60, 70
    imgEnemy.Move 176, 16, 60, 70
    
    labMy.Move 88, 104, 137, 17
    labEnemy.Move 48, 16, 137, 17
    
    'ステータスの設定です
    With clsBattle
        .My_Name = "黒猫"
        .My_Hp_Max = 100
        .My_Hp = 100
        .My_Str = 12
        .My_Def = 5
        .My_Qui = 20
        
        .Enemy_Name = "宿敵ルキア"
        .Enemy_Hp_Max = 120
        .Enemy_Hp = 120
        .Enemy_Str = 9
        .Enemy_Def = 7
        .Enemy_Qui = 8
        
    End With
    
End Sub

'戦闘を開始します
Sub Attack_Start()
    timMy.Enabled = True
    timEnemy.Enabled = True
    MsgInfo "***   戦闘開始!   ***"
End Sub

'味方の動きのアクションです
Sub My_Action()
    Dim j As Integer
    
    For j = 0 To 10
        imgMy.Left = imgMy.Left + 10
        imgMy.Top = imgMy.Top - 3
    Next
    
    For j = 0 To 10
        imgMy.Left = imgMy.Left - 10
        imgMy.Top = imgMy.Top + 3
    Next
    
End Sub

'敵の動きのアクションです
Sub Enemy_Action()
    Dim j As Integer
    
    For j = 0 To 10
        imgEnemy.Left = imgEnemy.Left - 10
        imgEnemy.Top = imgEnemy.Top + 3
    Next
    
    For j = 0 To 10
        imgEnemy.Left = imgEnemy.Left + 10
        imgEnemy.Top = imgEnemy.Top - 3
    Next
    
End Sub

'味方の攻撃です
Sub My_Attack()
    
    '一度、攻撃したのでイベント無効にします
    cmdAttack.Enabled = False
    
    My_Action
    
    'HPからダメージを引きます
    With clsBattle
        If .Enemy_Def < .My_Str Then
            .Enemy_Damage = CInt(.My_Str + Rnd * (.My_Str - .Enemy_Def))
            .Enemy_Hp = .Enemy_Hp - .Enemy_Damage
        Else
            .Enemy_Damage = CInt(Rnd * (3))
            .Enemy_Hp = .Enemy_Hp - .Enemy_Damage
        End If
    End With
    
    '状況を表示します
    With clsBattle
        MsgInfo .My_Name & "の攻撃。"
        MsgInfo .Enemy_Name & "は、" & .Enemy_Damage & "のダメージをうけた。"
        
        '相手が倒れていたら相手を消して戦闘を終了する
        If .Enemy_Death = True Then
            timMy.Enabled = False
            timEnemy.Enabled = False
            imgEnemy.Visible = False
            labEnemy.Visible = False
            cmdAttack.Enabled = False
            MsgInfo .My_Name & "は、" & .Enemy_Name & "を倒した。"
            MsgInfo "***   戦闘終了   ***"
        End If
    End With
    
End Sub

'敵の攻撃です
Sub Enemy_Attack()
    
    Enemy_Action
    
    'HPからダメージを引きます
    With clsBattle
        If .My_Def < .Enemy_Str Then
            .My_Damage = CInt(.Enemy_Str + Rnd * (.Enemy_Str - .My_Def))
            .My_Hp = .My_Hp - .My_Damage
        Else
            .My_Damage = CInt(Rnd * (3))
            .My_Hp = .My_Hp - .My_Damage
        End If
    End With
    
    '状況を表示します
    With clsBattle
        MsgInfo .Enemy_Name & "の攻撃。"
        MsgInfo .My_Name & "は、" & .My_Damage & "のダメージをうけた。"
        
        '相手が倒れていたら相手を消して戦闘を終了する
        If .My_Death = True Then
            timMy.Enabled = False
            timEnemy.Enabled = False
            imgMy.Visible = False
            labMy.Visible = False
            cmdAttack.Enabled = False
            MsgInfo .My_Name & "は、" & .Enemy_Name & "に倒された。"
            MsgInfo "***   戦闘終了   ***"
        End If
    End With
    
End Sub

'攻撃ボタンをクリックした
Private Sub cmdAttack_Click()
    My_Attack
End Sub

'テキストボックスに状況を表示します
Sub MsgInfo(ByVal strText As String)
    txtMsg.Text = txtMsg.Text & strText & vbCrLf
    txtMsg.SelStart = Len(txtMsg.Text)
End Sub

'敵のタイマーイベントが発生した
Private Sub timEnemy_Timer()
    Enemy_Attack
End Sub

'味方のタイマーイベントが発生した
Private Sub timMy_Timer()
    cmdAttack.Enabled = True
End Sub




<戻る

Sample48.lzh


http://www.vector.co.jp/authors/VA015521/