クリップボード履歴ソフトCliborを公開中!

VBでゲームを作ろう10

Visual Basicでゲームを作ろう10

敵クラスのコード

Public Class CEnemy

    ' 変数
    Dim PB_ImgEnemy As PictureBox ' 敵の画像
    Dim O_Owner As Object         ' 敵が出現するオーナー
    Dim R_Rnd As System.Random    ' ランダム変数
    Dim intTokuten As Integer     ' 敵を倒した時の得点
    Dim intMvwd As Integer        ' 敵が動く際の幅
    Dim intMvud As Integer        ' 上下左右に動く
    Dim intMovePattern As Integer ' 敵のパターン

    ' クリックイベント
    Public Event OnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)

    ' 敵画像をランダムな場所に作成
    ' Owner : 敵が出現するオーナー
    ' i_Obj : 敵画像
    Private Sub _RandPlace(ByRef Owner As Object, ByRef i_Obj As Object)

        ' 出現場所はオーナーの範囲内にする
        ' 高さ
        Dim intTop As Integer = R_Rnd.Next(Owner.Size.Height - i_Obj.Size.Height)
        i_Obj.Top = intTop
        ' 横
        Dim intLeft As Integer = R_Rnd.Next(Owner.Size.Width - i_Obj.Size.Width)
        i_Obj.Left = intLeft

        ' 敵のパターン(画像と得点)をランダムに指定する
        intMovePattern = R_Rnd.Next(1, 4)
        PB_ImgEnemy.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize
        Select Case intMovePattern
            Case 1
                '画像読み込み
                PB_ImgEnemy.Image = System.Drawing.Image.FromFile("enemy1.gif")
                '得点
                intTokuten = 500
            Case 2
                '画像読み込み
                PB_ImgEnemy.Image = System.Drawing.Image.FromFile("enemy2.gif")
                '得点
                intTokuten = 1000
            Case 3
                '画像読み込み
                PB_ImgEnemy.Image = System.Drawing.Image.FromFile("enemy3.gif")
                '得点
                intTokuten = 3000
        End Select

    End Sub

    ' コンストラクタ
    ' Owner : 敵が出現するオーナー
    ' Rnd   : ランダム変数
    Public Sub New(ByRef Owner As Object, ByRef Rnd As Object)

        ' 敵の画像を表示する変数を初期化
        PB_ImgEnemy = New PictureBox
        ' オーナーの取得
        O_Owner = Owner
        ' ランダム変数
        R_Rnd = Rnd
        ' 敵が動く際の幅の初期化
        intMvwd = 10
        ' 上下左右に動く
        intMvud = 0

        ' 敵画像がクリックされたイベント
        AddHandler PB_ImgEnemy.Click, AddressOf DoClick
        ' ランダムな場所に出現
        _RandPlace(O_Owner, PB_ImgEnemy)
        ' オーナーに画像を貼り付け
        O_Owner.Controls.Add(PB_ImgEnemy)

    End Sub

    ' デストラクタ
    Protected Overrides Sub Finalize()
        MyBase.Finalize()
    End Sub

    ' Clickイベントを発生させる
    Public Sub DoClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        RaiseEvent OnClick(Me, e)
    End Sub


    ' 動きを見せる(オーナーの中での動き)
    Public Sub MvEnm()
        Select Case intMovePattern
            Case 1
                '--------------------
                ' enemy1
                ' 完全ランダムな動き
                '--------------------
                ' 移動先をランダムに決めます
                Dim intMv As Integer = R_Rnd.Next(1, 5)
                ' 一歩移動(オーナーの範囲をはみ出しそうになったら現状維持)
                Select Case intMv
                    Case 1 '下
                        If (PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) < (O_Owner.height) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top + intMvwd
                        End If
                    Case 2 '上
                        If (PB_ImgEnemy.Top - intMvwd) > 0 Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top - intMvwd
                        End If
                    Case 3 '右
                        If (PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) < (O_Owner.Width) Then
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left + intMvwd
                        End If
                    Case 4 '左
                        If (PB_ImgEnemy.Left - intMvwd) > 0 Then
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left - intMvwd
                        End If
                End Select
            Case 2
                '--------------------------
                ' enemy2
                ' 上下左右にぶつかるまで動く
                '--------------------------
                If intMvud = 0 Then
                    ' 初回時だけは上下左右どちらに進むか決める
                    intMvud = R_Rnd.Next(1, 5)
                End If

                ' 上下左右にぶつかるまで移動する。
                ' ぶつかったらまた上下左右にランダムに移動する。
                Select Case intMvud
                    Case 1 '下 
                        If (PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) < (O_Owner.height) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top + intMvwd
                        Else
                            intMvud = R_Rnd.Next(1, 5)
                        End If
                    Case 2 '上
                        If (PB_ImgEnemy.Top - intMvwd) > 0 Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top - intMvwd
                        Else
                            intMvud = R_Rnd.Next(1, 5)
                        End If
                    Case 3 '右
                        If (PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) < (O_Owner.Width) Then
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left + intMvwd
                        Else
                            intMvud = R_Rnd.Next(1, 5)
                        End If
                    Case 4 '左
                        If (PB_ImgEnemy.Left - intMvwd) > 0 Then
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left - intMvwd
                        Else
                            intMvud = R_Rnd.Next(1, 5)
                        End If
                End Select
            Case 3
                '--------------------
                ' enemy3
                ' ななめに動く
                '--------------------
                If intMvud = 0 Then
                    ' 初回時だけは上下左右のななめに進むか決める
                    intMvud = R_Rnd.Next(1, 5)
                End If

                ' ななめにぶつかるまで移動する。
                ' ぶつかったら跳ね返されるように移動する。
                Select Case intMvud
                    Case 1 '斜め右下 
                        If (((PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) < (O_Owner.height)) And _
                            ((PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) < (O_Owner.Width))) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top + intMvwd
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left + intMvwd
                        Else
                            '次は跳ね返った位置
                            If ((PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) >= (O_Owner.height)) Then
                                intMvud = 2 ' 斜め右上
                            ElseIf ((PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) >= (O_Owner.Width)) Then
                                intMvud = 3 ' 斜め左下
                            End If
                        End If
                    Case 2 '斜め右上
                        If (((PB_ImgEnemy.Top - intMvwd) > 0) And _
                            (PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) < (O_Owner.Width)) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top - intMvwd
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left + intMvwd
                        Else
                            '次は跳ね返った位置
                            If ((PB_ImgEnemy.Top - intMvwd) <= 0) Then
                                intMvud = 1 ' 斜め右下
                            ElseIf (PB_ImgEnemy.Left + PB_ImgEnemy.Width + intMvwd) >= (O_Owner.Width) Then
                                intMvud = 4 ' 斜め左上
                            End If
                        End If
                    Case 3 '斜め左下
                        If ((PB_ImgEnemy.Left - intMvwd) > 0) And _
                            ((PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) < (O_Owner.height)) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top + intMvwd
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left - intMvwd
                        Else
                            '次は跳ね返った位置
                            If (PB_ImgEnemy.Left - intMvwd) <= 0 Then
                                intMvud = 1 ' 斜め右下
                            ElseIf ((PB_ImgEnemy.Top + PB_ImgEnemy.Height + intMvwd) >= (O_Owner.height)) Then
                                intMvud = 4 ' 斜め左上
                            End If
                        End If
                    Case 4 '斜め左上
                        If ((PB_ImgEnemy.Left - intMvwd) > 0) And _
                            ((PB_ImgEnemy.Top - intMvwd) > 0) Then
                            PB_ImgEnemy.Top = PB_ImgEnemy.Top - intMvwd
                            PB_ImgEnemy.Left = PB_ImgEnemy.Left - intMvwd
                        Else
                            '次は跳ね返った位置
                            If (PB_ImgEnemy.Left - intMvwd) <= 0 Then
                                intMvud = 2 ' 斜め右上
                            ElseIf (PB_ImgEnemy.Top - intMvwd) <= 0 Then
                                intMvud = 3 ' 斜め左下
                            End If
                        End If
                End Select

        End Select
    End Sub

    ' 敵が倒されたイベント
    Public Sub EnemyDown()
        ' 違う場所に出現する
        _RandPlace(O_Owner, PB_ImgEnemy)
    End Sub

    ' 敵の得点のゲット
    Public Function GetTokuten() As Integer
        GetTokuten = intTokuten
    End Function

End Class

  • Facebook
  • Hatena
  • twitter
  • Google+

サイトについて

Cliborに関する匿名のアンケートやご要望はこちらからCliborアンケート


Amunsへ直接のお問い合わせはこちらからContact

寄付のお願い

Cliborはフリーソフトですが寄付歓迎です。 →寄付のお願い
PAGETOP
Copyright © amuns:code All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.