クリップボード履歴ソフト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+

サイト内検索

サイトについて

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

寄付のお願い

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