自分だけのクイズ作成 - Quipha公開中

【#8】VBでゲームを作ろう【敵を倒す処理実装】

VB
スポンサーリンク

敵を倒す処理実装

もうラストです。敵をクリックしたら得点を加算する処理を実装します。
以下のメソッドをメイン画面(F_Main)に追加します。

' 敵クリックイベント
Public Sub EnmOnClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
    ' 得点の加算(それぞれの敵の得点を取得する。)
    L_Sum.Text = CInt(L_Sum.Text) + CType(sender, CEnemy).GetTokuten
    ' 敵を倒したイベント(再度敵を出現させる)
    Call CType(sender, CEnemy).EnemyDown()
End Sub

このクリック処理をすでに実装したスタートボタンのクリックイベント(B_Start_Click)に実装します。

' スタートボタンクリック
Private Sub B_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Start.Click
    ' スタートボタンを使えなくする
    B_Start.Enabled = False

    ' 敵の作成
    Dim i As Integer
    ' 敵を10体生成します
    For i = 0 To 9
        ' 配列に敵クラスを生成します。その際にオーナーのパネルとランダム変数を渡します。
        _enemies.Add(New CEnemy(Me.P_Enemy, _rnd))
        ' 敵のクリックイベント(倒すイベント)
        AddHandler CType(_enemies(i), CEnemy).OnClick, AddressOf EnmOnClick
        ' ループの中でDoEventsを呼んでおく
        System.Windows.Forms.Application.DoEvents()
    Next

    ' タイマーのスタート
    T_Enemy.Enabled = True
    T_Jikan.Enabled = True
End Sub

これでほぼ完成です。
最後に初級・中級・上級の処理を書きましょう。

ちなみに以下の処理の役割をまとめましょう。

敵の数スタートボタンクリック時のループの回数。
敵の動くスピードタイマー(T_Enemy)のインターバル。
敵の動く範囲パネル(P_Enemy)の大きさ。
残り時間プログレスバー(PG_Jikan)の値。

この値を設定することで難易度を変更します。
メイン画面(F_Main)の先頭に以下のプロパティを追加します。

Public Property Enms As Integer          ' 敵の数
Public Property EnmTim As Integer        ' 敵の動くスピード(秒数)
Public Property GmTim As Integer         ' 残り時間(秒数)

さらに初期化するメソッドを追加します。
メイン画面(F_Main)の先頭に以下のメソッドを追加します。

' 難易度初期化
Public Sub FrmIni()
    ' フォームのサイズでコントロールを配置する
    P_Enemy.Height = Me.Height - P_Enemy.Top - 45
    P_Enemy.Width = Me.Width - 40

    ' 合計得点
    L_Sum.Text = "0"
    ' 敵の動くスピード
    T_Enemy.Interval = EnmTim
    ' 残り時間の初期化
    PG_Jikan.Maximum = (GmTim / 1000)
    PG_Jikan.Value = PG_Jikan.Maximum
End Sub

P_Enemy.TopとP_Enemy.Leftはフォームとパネル次第ですので調整してください。
次にスタートボタンクリックイベントのループの回数を変更します。

' スタートボタンクリック
Private Sub B_Start_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles B_Start.Click

    ' スタートボタンを使えなくする
    B_Start.Enabled = False

    ' 敵の作成
    Dim i As Integer
    ' 敵を10体生成します
    For i = 0 To Enms - 1
        ' 配列に敵クラスを生成します。その際にオーナーのパネルとランダム変数を渡します。
        _enemies.Add(New CEnemy(Me.P_Enemy, _rnd))
        ' 敵のクリックイベント(倒すイベント)
        AddHandler CType(_enemies(i), CEnemy).OnClick, AddressOf EnmOnClick
        ' ループの中でDoEventsを呼んでおく
        System.Windows.Forms.Application.DoEvents()
    Next

    ' タイマーのスタート
    T_Enemy.Enabled = True
    T_Jikan.Enabled = True
End Sub

最後にメニュー画面(F_Menu)に戻って初級・中級・上級ボタンのクリックイベントに難易度を設定します。
とりあえず以下のように難易度を設定してみました。

   ' 初級ボタンクリック
    Private Sub B_Syokyu_Click(sender As Object, e As EventArgs) Handles B_Syokyu.Click
        F_Main.Height = 400    ' フォームの高さ
        F_Main.Width = 400     ' フォームの幅
        F_Main.EnmTim = 1000   ' 敵の動く速度
        F_Main.Enms = 20       ' 敵の数
        F_Main.GmTim = 10000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

    ' 中級ボタンクリック
    Private Sub B_Chukyu_Click(sender As Object, e As EventArgs) Handles B_Chukyu.Click
        F_Main.Height = 500    ' フォームの高さ
        F_Main.Width = 700     ' フォームの幅
        F_Main.EnmTim = 800    ' 敵の動く速度
        F_Main.Enms = 30       ' 敵の数
        F_Main.GmTim = 15000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

    ' 上級ボタンクリック
    Private Sub B_Jyokyu_Click(sender As Object, e As EventArgs) Handles B_Jyokyu.Click
        F_Main.Height = 600    ' フォームの高さ
        F_Main.Width = 800     ' フォームの幅
        F_Main.EnmTim = 300    ' 敵の動く速度
        F_Main.Enms = 40       ' 敵の数
        F_Main.GmTim = 20000   ' 制限時間
        F_Main.FrmIni()        ' 難易度初期化
        F_Main.Show()
        Me.Hide()
    End Sub

以上で、全て完成です。実行して正しく動くかどうか確認しましょう。
お疲れ様でした。

あまりにも敵の数が多すぎて、動く速度が早い場合など
正常に動かなくなりますので、適正な難易度を設定してください。

コメント

タイトルとURLをコピーしました